Commit Graph

283 Commits

Author SHA1 Message Date
Jakub Zych
7303467602 docs(02-05): complete contract-security-integration-tests plan
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 14:15:37 +02:00
Jakub Zych
84a5f007e3 docs(02-05): record measured Phase 2 gate evidence
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 14:15:13 +02:00
Jakub Zych
066c3d3ab7 fix(02-05): wait for MariaDB with hex-only process credentials
- Avoid urlsafe passwords that start with a dash and break mariadbadmin -p
- Probe readiness with a quoted SQL SELECT against the disposable container

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 14:12:05 +02:00
Jakub Zych
a296e98d8e feat(02-05): add the repeatable Phase 2 vet, race and PHP gate
- Check root and fonoteka.go with vet, test and race plus TestParitySynthetic
- Audit the 154-route corpus and smoke parity:record/replay against loopback
- Provision a disposable MariaDB, pin PHP to 127.0.0.1:8423, and self-replay seed, routes and clients

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 14:09:16 +02:00
Jakub Zych
5ed920b7b1 test(02-05): cover proxy, scrub and CLI security boundaries
- Reject non-loopback bind/upstream, cap bodies, isolate concurrent sessions and refuse traversal
- Scrub JWT, inv_ tokens, cookies, client secrets and OAuth codes out of fixtures
- CLI discovery and replay errors exit nonzero without printing secrets

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 14:06:40 +02:00
Jakub Zych
59b5276cba test(02-05): lock down every response parity class with negative tests
- Record/replay baselines plus mutated fixtures for nil vs [], dates, tri-state bools, envelopes, money and ids
- Header, CSV/image byte, sidecar digest and two-flow continuation cases fail with path diagnostics
- Manifest coverage still reports later flows after a comparison failure

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 14:03:55 +02:00
Jakub Zych
6f0168ae1e docs(02-04): mark plan complete in STATE and ROADMAP 2026-09-17 13:59:51 +02:00
Jakub Zych
9a8fcc2c1e docs(02-04): complete honest-go-replay-with-testcontainers plan
Tasks completed: 2/2
- Replay a synthetic write/read flow against Postgres
- Expose the full corpus as honest selectable subtests

SUMMARY: .planning/phases/02-api-parity-harness-bootstrap/02-04-SUMMARY.md
2026-09-17 13:59:04 +02:00
Jakub Zych
1f21982472 docs(02-03): mark plan complete in STATE and ROADMAP
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 13:47:58 +02:00
Jakub Zych
38dd34d221 docs(02-03): complete record-154-routes-and-client-flows plan
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 13:47:29 +02:00
Jakub Zych
7a6c669e3a fix(02-03): scrub PKCE and OAuth form fields by name
Value-based replace can miss a code_verifier when an authorization code is a substring of it, which 502'd MCP token capture.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 13:43:27 +02:00
Jakub Zych
2eb9b4b0c9 fix(02-03): surface reverse-proxy record failures in 502 bodies
Silent "upstream error" hid capture-rule failures during MCP token exchange.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 13:40:47 +02:00
Jakub Zych
8881df9f7a fix(02-03): capture OAuth code from JSON redirect URLs
Consent returns the callback URL in JSON, so replay can fill {{oauth:code}} from $.data.redirect_to before the token request.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 13:38:54 +02:00
Jakub Zych
22f02eed59 fix(02-03): mask OAuth client_id and unix issued_at
RFC 7591 registration returns a string client_id and unix client_id_issued_at; treating those as Carbon/integer foreign keys would fail PHP self-replay of MCP OAuth.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 13:36:30 +02:00
Jakub Zych
8f94b07986 fix(02-03): scrub PHP-escaped JSON secret values
PHP json_encode writes \/ so captured redirect URLs never matched the fixture body, leaving OAuth codes in client sessions.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 13:32:11 +02:00
Jakub Zych
0307510b22 fix(02-03): mask collection_key and checkpoint in JSON diffs
Album sync payloads hash the collection and stamp a checkpoint that
change across seed runs and must not fail PHP self-replay.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 13:03:38 +02:00
Jakub Zych
4c1259aafd fix(02-03): keep a recorded seed when --update recaptures routes
Re-running bootstrap against an already seeded PHP instance 409s.
Route --update must not recapture a complete seed fixture.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 13:00:44 +02:00
Jakub Zych
39ddf787ce fix(02-03): re-record on --update and honor case capture rules
Ordered PHP self-replay needs regenerated share tokens captured into
vars, and --update must overwrite already-recorded route fixtures.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 13:00:14 +02:00
Jakub Zych
5b947c7454 fix(02-03): treat null foreign keys as valid masked ids
PHP album payloads leave discogs_id null. The id mask required an
integer and failed PHP self-replay on otherwise identical bodies.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:52:06 +02:00
Jakub Zych
591a0d4681 fix(02-03): expand expected placeholders after replay capture
Unquoted numeric id placeholders made recorded JSON illegal to parse.
Replay now recaptures, persists vars, expands the expected body, and
diffs against the live response.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:51:24 +02:00
Jakub Zych
1ea3c59055 fix(02-03): scrub short captured ids only at token boundaries
Numeric seed ids like 1 were substring-replaced through /api/v1 paths
and 15-style JSON integers. Keep ReplaceAll for long secrets and isolate
short values so the corpus stays replayable.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:47:38 +02:00
Jakub Zych
4451c2f39f fix(02-03): resolve relative seed specs and skip only recorded seeds
Manifest seed paths are fixtures-relative. Skip re-hitting the backend
only when every seed step already has a recorded status so a hand-written
spec can be recorded in place.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:46:38 +02:00
Jakub Zych
eabbe00976 docs(02-02): record plan progress in STATE and ROADMAP
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:38:05 +02:00
Jakub Zych
0824f31d08 docs(02-02): complete capture-sessions-and-manifest-coverage plan
Tasks completed: 3/3
- Capture a complete named session through the proxy
- Replay stateful flows with safe capture and strict differences
- Record manifest route cases and report complete coverage

SUMMARY: .planning/phases/02-api-parity-harness-bootstrap/02-02-SUMMARY.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:37:17 +02:00
Jakub Zych
24c1f43e84 feat(02-02): record manifest route cases and report coverage
Drive ordered route cases through RecordFlow, resume in batches of
15, and print recorded/passing/failing/unrecorded coverage.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:36:48 +02:00
Jakub Zych
aa165fe3d0 feat(02-02): capture, scrub, and strictly diff stateful flows
Resolve named placeholders from a private variable store, mask
dates and ids after shape checks, and keep comparing independent steps.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:32:49 +02:00
Jakub Zych
bb6a5a91c9 feat(02-02): capture named sessions through a loopback proxy
Record Nuxt/MCP traffic as ordered flows via parity:proxy, pin
loopback upstream, and refuse oversized or credential-shaped fixtures.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:27:57 +02:00
Jakub Zych
603270da08 docs(02-01): record plan progress in STATE and ROADMAP
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:23:12 +02:00
Jakub Zych
f9ba69c663 docs(02-01): complete record-and-replay one fixture plan
Tasks completed: 2/2
- Record and replay one route through the summer CLI
- Lock the one-route tide record and replay contract

SUMMARY: .planning/phases/02-api-parity-harness-bootstrap/02-01-SUMMARY.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:22:30 +02:00
Jakub Zych
f669d056c9 feat(02-01): lock the one-route tide record and replay contract
- Reject unknown YAML fields, empty names, duplicate steps and unsafe sidecars
- Treat JSON key order as insignificant and fail missing keys and token types at $.path
- Bound request bodies and refuse oversized or malformed input before writing a fixture

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:21:34 +02:00
Jakub Zych
f6e1b892bc feat(02-01): record and replay one route through the summer CLI
- Add a generic tide flow schema with YAML fixture IO and HTTP record/replay
- Register parity:record and parity:replay on the bonfire summer tool
- Diff JSON scalars at $.path and non-JSON bodies at the changed byte offset

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 12:20:22 +02:00
Jakub Zych
acd31ba28c docs(02): create verified phase plans 2026-09-17 01:57:41 +02:00
Jakub Zych
e3076950c3 docs(02): finalize parity research and validation map 2026-09-17 01:56:49 +02:00
Jakub Zych
a109b52ec6 docs(02): resolve parity proxy port split 2026-09-16 16:27:50 +02:00
Jakub Zych
9368a18530 docs(02): research parity harness and validation 2026-09-16 15:55:53 +02:00
Jakub Zych
f5fca4f62d docs(phase-01): evolve PROJECT.md after phase completion 2026-09-16 14:46:25 +02:00
Jakub Zych
3ad9904fe8 docs(phase-01): complete phase execution 2026-09-16 14:46:25 +02:00
Jakub Zych
7bb1b3a76d test(01): persist human verification items as UAT 2026-09-16 14:39:53 +02:00
Jakub Zych
7a7f35af0e docs(01): add phase verification report 2026-09-16 14:39:53 +02:00
Jakub Zych
fead2527b6 docs(01): add code review report 2026-09-16 14:31:28 +02:00
Jakub Zych
2da09c5233 docs(phase-01): update tracking after wave 4 2026-09-16 14:16:24 +02:00
Jakub Zych
e2c27b02ce chore: merge executor worktree (worktree-agent-01-04) 2026-09-16 14:15:30 +02:00
Jakub Zych
d0ed25cd37 docs(01-04): complete kernel unit and integration test plan
- Record coverage, check-phase1.sh result, and measured hello rebuild
- Document race-buffer and pact-test deviations
2026-09-16 14:15:09 +02:00
Jakub Zych
bee03bd54c docs(01-04): record phase 1 validation evidence
- Mark KERN-01..09 and CLI-01 automated checks passed
- Set nyquist_compliant after scripts/check-phase1.sh succeeded
2026-09-16 14:14:05 +02:00
Jakub Zych
dc7997e45c test(01-04): cover tool, output, watch loop and workspace modules
- Non-TTY widgets/prompts, flag parsing, secret non-leak and malicious IDs
- Real hello workspace rebuild latency line, debounce and ignored bin/tmp
- scripts/check-phase1.sh runs vet/test/race across root, hello, base, greeter, optional
2026-09-16 14:14:05 +02:00
Jakub Zych
a43c734546 test(01-04): cover config, lifecycle, services, events and context
- Table-driven compass precedence, malformed YAML, snake_case env and concurrent reads
- Party duplicate/missing/cycle, reordered manifest, HasConfig/HasCommands discovery
- Isolated backpack services, festival panic payload omission, towel nested isolation
2026-09-16 14:08:17 +02:00
Jakub Zych
4093d4230e docs(phase-01): update tracking after wave 3 2026-09-16 14:02:17 +02:00
Jakub Zych
ce5f06c95a chore: merge executor worktree (worktree-agent-01-03) 2026-09-16 14:02:00 +02:00
Jakub Zych
9b2b035b68 docs(01-03): complete plugin scaffold CLI and watch-loop plan
- Record make:plugin, bonfire output and summer dev results
2026-09-16 14:01:34 +02:00
Jakub Zych
270b7f1e87 feat(01-03): add summer dev watch rebuild loop
- Watch app sources with fsnotify, debounce, and one serialized build.App
- Restart the child only after a successful build and print rebuild latency
- Ignore generated app files and reap the child on cancellation
2026-09-16 13:59:43 +02:00