Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
1d8a1e1
Add FastForm design spec
Aug 5, 2026
5b3504f
Fix spec inconsistencies found in review
Aug 5, 2026
4719292
Add hold state; fix optimistic mode reachability
Aug 5, 2026
84d17ef
Add implementation plan for spec phases 0-4
Aug 5, 2026
094356d
Fix plan sequencing bugs that would have failed the E1 gate
Aug 5, 2026
d2dc70d
Scaffold package layout and answer bank
Aug 5, 2026
a8ab496
Add cookie loading and freshness check
Aug 5, 2026
967cce1
Correct overclaimed cookie-challenge mitigation in spec
Aug 5, 2026
1a8efda
Add unit tests for cookies.verify()
Aug 5, 2026
d8fb522
Correct spec and plan from E1 gate evidence
Aug 5, 2026
dcff2c6
Rewrite retry policy on measured evidence: no server-side idempotency
Aug 6, 2026
32733e4
Document response fixtures; drop mislabeled already-responded capture
Aug 6, 2026
0379f70
Read cookies live from Chrome's store
Aug 6, 2026
2e72caf
Require an explicit Chrome profile; add account resolver
Aug 6, 2026
4780a14
Add profile.toml with Chrome profile setup, unset by default
Aug 6, 2026
64515db
Add synthetic F3/F4 parse fixtures to unblock Task 5
Aug 6, 2026
7bf98fa
Add form structure parser
Aug 6, 2026
002b0a5
Fix parse.parse to raise NotParseable on malformed items, not IndexError
Aug 6, 2026
4d64195
Add text-based answer matching with confidence scoring
Aug 6, 2026
d6fdbbb
Add request compiler
Aug 6, 2026
dfd8e48
Rewrite Task 9 classifier from measured fixtures
Aug 6, 2026
843f650
Add response classifier (Task 9)
Aug 6, 2026
40500a4
Add warm connection transport
Aug 6, 2026
5fb0022
Make the connection-reuse test a real guard; fix double-connect leak
Aug 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
config/cookies.txt
__pycache__/
*.pyc
.DS_Store
fixtures/*.curl.txt
17 changes: 17 additions & 0 deletions config/answers.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Answer bank. Each entry matches a question by text and supplies a value.
# match — list of phrases; scored against question text (see fastform/match.py)
# regex — optional; a hit here is an exact match, outranking everything
# value — what gets submitted

[[answer]]
match = ["full name", "your name", "name"]
value = "Test Person"

[[answer]]
match = ["email address", "email"]
regex = "e-?mail"
value = "test@example.com"

[[answer]]
match = ["phone number", "phone", "mobile"]
value = "0800000000"
22 changes: 22 additions & 0 deletions config/profile.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Runtime configuration.

[chrome]
# Which Chrome profile's cookies to submit with. REQUIRED before any real run —
# the tool refuses to guess, because picking the wrong profile submits as the
# wrong person. Leave unset until you know which Google account competes.
#
# To see the choices, run:
# python3 -c "from fastform import cookies; [print(f'{p.name}: {e}') for p,e in cookies.resolve_accounts()]"
#
# That prints each profile with the account it is signed into. Then set:
# profile = "Profile 1"
#
# Identified on this machine so far:
# Profile 1 -> student@example.com
# Profile 5 -> personal@example.com
#
# NEITHER is the competition account? Sign it into any Chrome profile first,
# then re-run the command above — a freshly signed-in profile shows up there
# and can be pinned like any other.

# profile =
Loading