Commit Graph

846 Commits

Author SHA1 Message Date
Jakub Zych
f5cf6f2580 docs(14): align fix report titles with the review 2026-10-04 08:13:28 +02:00
Jakub Zych
d5a8ef7834 docs(14): record code review disposition 2026-10-04 08:13:17 +02:00
Jakub Zych
5d3299b26f docs(14): add code review fix report 2026-10-04 08:13:12 +02:00
Jakub Zych
b7d10a4448 test(14): verification report and human verification items as UAT 2026-10-04 03:13:37 +02:00
Jakub Zych
aa8ff53c0c docs(14): record code review disposition 2026-10-04 03:05:31 +02:00
Jakub Zych
549ffed415 docs(14): add code review report 2026-10-04 03:05:10 +02:00
Jakub Zych
fc4f70013b docs(14-06): update state and roadmap after the plan 2026-10-04 02:50:21 +02:00
Jakub Zych
e67dbaf895 docs(14-06): complete unit tests and Phase 14 gate plan 2026-10-04 02:49:59 +02:00
Jakub Zych
17b2ef1961 docs(14-06): Phase 14 validation signed off, requirements complete, API coverage confirmed, folded todos closed
- 14-VALIDATION.md: per-task map 14-01-T1 to 14-06-T4, all green, the
  measured coverage, validated, Nyquist-compliant, Wave 0 complete, the
  final --all and --removal results
- REQUIREMENTS.md: INTG-02 and API-08 Complete (JOBS-02, JOBS-03, SRCH-02,
  INTG-01, CLI-05 already were)
- COVERAGE.md: every INTEGRATE row's test confirmed by --named
- fetchguard-guarded-http-client and redacting-slog-handler moved to done
2026-10-04 02:47:53 +02:00
Jakub Zych
a1fccd39ad test(14-06): check-phase14.sh --evidence refuses an incomplete phase record
- every T-14 threat has one review row copying its plan's severity and
  disposition; a mitigated one names a test --named runs and a removal row
- the validation map is validated, Nyquist-compliant and Wave 0 complete,
  with no open row and only tests --named runs
- each COVERAGE.md INTEGRATE row names a run test, each OPT-OUT a reason
- REQUIREMENTS.md keeps no SDK wording for INTG-02 and no sitemap output
  for API-08; the ROADMAP Phase 14 repos and criteria name the album
  Discogs and recognize routes and both shared plugin repos
- --all runs it after the coverage stage
2026-10-04 02:11:39 +02:00
Jakub Zych
81543524be docs(14-06): Phase 14 security review maps every T-14 threat to its protection, test and removal check 2026-10-04 02:11:15 +02:00
Jakub Zych
4c042f7cd5 test(14-06): check-phase14.sh runs the named tests, the coverage floors and the removal harness
- --named runs every test the validation map and the security review name,
  by package, the fonoteka, discogs, golem and feedback suites with -race
- --coverage enforces the 80% floor on the framework packages, classes/
  discogs, console and every package of both shared plugins, and on each of
  the 132 Phase 14 functions of the fonoteka root, classes and
  controllers/api (two exemptions with their reasons)
- --removal applies 43 anchor-exact mutations, one or more per mitigated
  threat, requires the named test to fail on an assertion and restores
  each file byte for byte; the self-test plants each refusal
2026-10-04 02:11:15 +02:00
Jakub Zych
fc90ae2382 test(14-06): tide reports every sidecar refusal and multipart mismatch
- LoadUpstream names the file for a missing, unknown-field, wrong-version,
  method-less, relative-URL or out-of-range-status sidecar
- WriteUpstream writes nothing for an invalid sidecar or an uncreatable
  directory
- compareParts reports count, name, filename, content type, sha256 and
  value mismatches and a non-multipart body
2026-10-04 01:44:19 +02:00
Jakub Zych
88f7683b99 test(14-06): check-phase14.sh gates the phase over both repositories, the corpus and the named flows
- --self-test proves each detector fails on planted failing, skipped,
  zero-test, racy and non-JSON runs, a fourth pending route, a vendor SDK
  in the module graph and planted corpus secrets
- --go runs vet and tests in summercms.go and, with -race, in fonoteka.go
  including sm-golem-plugin and sm-feedback-plugin
- --parity requires 175 recorded, 172 ported and passing, 3 pending, every
  TestFonotekaNuxtFlows subtest, the sidecar replay, check_corpus secrets
  and the docs checks
2026-10-04 00:53:53 +02:00
Jakub Zych
c12641605c docs(14-05): update state and roadmap after the plan 2026-10-04 00:28:16 +02:00
Jakub Zych
5024e3ff42 docs(14-05): complete sm-feedback-plugin plan 2026-10-04 00:28:16 +02:00
Jakub Zych
b5d20b3bfd fix(14-05): surf answers OPTIONS on CORS paths with Laravel's HandleCors headers
- every OPTIONS on a CORS path: 204 with Cache-Control no-cache, private
- a preflight echoes the requested method (upper-cased) and headers when * allows any, with Vary and PHP's default Content-Type, as recorded from PHP
- README and the routing docs describe the answer
2026-10-04 00:00:01 +02:00
Jakub Zych
7eb0174612 docs(14-04): update state and roadmap after the plan 2026-10-03 23:39:37 +02:00
Jakub Zych
b3e4626d2d docs(14-04): complete sm-golem-plugin and AI recognition plan 2026-10-03 23:39:07 +02:00
Jakub Zych
7c2c43359f feat(14-04): fetchguard.IsPrivateAddr exposes the dial guard's address classification
The golem SSRF guard checks a URL's resolved addresses before it connects,
as PHP's SSRFGuard does, with the same table the dial guard uses.
2026-10-03 22:49:19 +02:00
Jakub Zych
f519261da6 docs(14-03): complete Discogs routes plan 2026-10-03 22:25:35 +02:00
Jakub Zych
5101ecb49c feat(14-03): tide keeps binary upstream bodies and compares every *_url upload by shape
- A response body that is not valid UTF-8 (a cover image) is written as a
  YAML !!binary scalar, never masked and replayed byte for byte
- The upload URL normalizer covers every key ending in _url (cover_url),
  not only url and thumb_url
- README and parity-testing docs updated
2026-10-03 21:34:52 +02:00
Jakub Zych
2ee97c62f6 docs(14-02): update state, roadmap and requirements after the plan 2026-10-03 21:26:27 +02:00
Jakub Zych
f22c9144e6 docs(14-02): complete Discogs core, CSV and digest workers, prune and reindex plan 2026-10-03 21:26:02 +02:00
Jakub Zych
cdd8d710fa feat(14-02): conga.Describe reports a registered job's kind, queue, attempts and timeout
- lets a plugin test assert what its Jobs() registers, such as the CSV
  match job's 240 s timeout, without reaching into conga internals
- README API table, jobs docs page and an example
2026-10-03 20:56:49 +02:00
Jakub Zych
0a7635b12a fix(14-02): parity:upstream writes its sidecar on interrupt or SIGTERM
- the command context had no signal handling, so stopping the proxy
  killed it before Flush and no sidecar was ever written
- a background proxy (SIGINT ignored by the shell) now stops on SIGTERM
2026-10-03 20:06:42 +02:00
Jakub Zych
43b869d613 docs(14-01): complete framework helpers plan 2026-10-03 20:03:29 +02:00
Jakub Zych
7700c6da28 docs(14-01): reword INTG-02, API-08 and the Phase 14 scope (D-06, D-07, D-13, D-14)
- INTG-02 names hand-rolled Anthropic and OpenAI-compatible adapters over the guarded client
- API-08 is feedback only; sitemap dropped for this application
- Phase 14 criteria list the album Discogs and recognize routes; Repos names the new core-plugin repos
- PROJECT moves golem and feedback to sm-*-plugin submodules
2026-10-03 20:02:04 +02:00
Jakub Zych
58e6324da8 feat(14-01): beachcomber DropIndex and EnsureIndex for reindex tooling
- optional IndexDropper reports whether a dropped index existed; DropIndex falls back to Flush
- optional IndexEnsurer creates an empty index from its schema; EnsureIndex is a no-op otherwise
- typesense implements both (404 is already absent; ensure reuses collection creation)
2026-10-03 20:01:36 +02:00
Jakub Zych
7241704e93 feat(14-01): sunscreen redacting slog handler installed by every generated main
- Wrap redacts sensitive keys at any depth and scrubs Bearer, sk- and x-api-key shapes
- InstallDefault is the first statement of the generated run; hello main regenerated
- surf test pins that recovered panics echo no credential
- sunscreen README, root modules row and the logging docs page
2026-10-03 20:01:36 +02:00
Jakub Zych
ee0004fb65 feat(14-01): record vendor calls with summer parity:upstream and replay them offline
- WriteUpstream masks vars, hashes long base64 JSON strings and refuses unmasked Authorization/X-Api-Key
- multipart requests recorded as ordered parts; the fake compares parts and hashed payloads
- loopback CONNECT recording proxy with a local ECDSA parity CA, script and forward modes
- parity:upstream command, README and parity docs
2026-10-03 19:55:42 +02:00
Jakub Zych
e6a67134d1 feat(14-01): fetchguard client covers PUT, multipart, bearer and a trusted mode
- TrustedMode (declared after PublicOnlyMode) lifts the scheme, host and dial checks for Client only
- PutJSON, PostMultipart with FormField/FormFile, Bearer
- tests for modes, redirects, multipart order, body cap and the scheme guard
- README, root modules row and outbound HTTP docs describe the client and its test seam
2026-10-03 19:42:37 +02:00
Jakub Zych
93b7142059 feat(14-01): guarded fetchguard client replayed through a tide upstream fake
- fetchguard.NewClient with Do, Send, Get and PostJSON over a capped, never-redirecting transport
- WithTransport: code-only context seam for offline replay; Result gains Header
- tide UpstreamSidecar, LoadUpstream, UpstreamPath and the asserting UpstreamFake
2026-10-03 19:39:58 +02:00
Jakub Zych
06d6fdc758 docs(roadmap): insert phase 14.1 for oauth identities and fonoteka me routes 2026-10-03 19:35:52 +02:00
Jakub Zych
ed4d4c380c docs(14): create phase plan 2026-10-03 18:56:43 +02:00
Jakub Zych
de5b01266b docs(14): add pattern map 2026-10-03 18:18:50 +02:00
Jakub Zych
1c7538d54c docs(14): record plan-time decisions from research checkpoint 2026-10-03 18:15:27 +02:00
Jakub Zych
5353aa28a5 docs(phase-14): add research and validation strategy 2026-10-03 17:49:00 +02:00
Jakub Zych
0795515914 docs(state): record phase 14 context session 2026-10-03 17:27:21 +02:00
Jakub Zych
2746bf5ac5 docs(14): capture phase context 2026-10-03 17:27:17 +02:00
Jakub Zych
3c9516b080 test(13): persist human verification items as UAT 2026-10-03 12:04:54 +02:00
Jakub Zych
8b4f03a36c docs(13): record code review disposition 2026-10-03 11:56:30 +02:00
Jakub Zych
412bc30daf docs(13): add code review report 2026-10-03 11:56:22 +02:00
Jakub Zych
bbc3e13d56 docs(13-06): record plan completion in state and roadmap 2026-10-03 11:45:26 +02:00
Jakub Zych
bcd099566b docs(13-06): complete the Phase 13 unit tests, gate and sign-off plan 2026-10-03 11:45:03 +02:00
Jakub Zych
931c02db31 docs(13-06): sign off the Phase 13 security review and validation
- 13-SECURITY-REVIEW.md: every T-13 threat with its strictest severity and
  disposition, protecting code, named tests and the 31 removal checks,
  all failing as required; the CSV export logging fix and the Phase 9
  route inventory update
- 13-VALIDATION.md: per-task map 13-01-T1 to 13-06-T3 all green, the gate
  command, coverage per package, Wave 0 ticked, status validated
- REQUIREMENTS.md: API-03, API-04, API-06 and API-07 complete
- deferred-items.md: 13-06 findings (process-wide job dispatcher, scalar
  mapping body, tmpfs quota)
2026-10-03 11:43:39 +02:00
Jakub Zych
ad79b3cca9 test(13-06): run TestOverlapConstraintFallsThrough in the gate's named stage
- The evidence stage refused T-13-23's review row because the named stage
  did not run the test its removal check RC-01 relies on
2026-10-03 11:32:35 +02:00
Jakub Zych
12b961b1c0 test(13-06): add the fail-closed Phase 13 gate
- scripts/check-phase13.sh with --self-test, --go, --parity, --named,
  --removal, --coverage, --evidence and --all, modelled on check-phase12
- Parity reads the replay's own coverage line: 157 ported and passing,
  0 failing, 14 recorded and not ported; every TestFonotekaNuxtFlows
  subtest, the three wishlist goldens, docs checks and the corpus scan
- Coverage floors of 80% for surf, conga, lagoon, tide and the four
  application packages, the user plugin's classes and every function of
  controllers/registration.go, and the controllers package's pre-phase value
- 31 anchor-exact removal checks with cmp restore, dirty-file refusal and
  a signal-safe restore; FORCE_COLOR unset by the gate itself
2026-10-03 11:27:44 +02:00
Jakub Zych
22a5ebdeda test(13-06): pin that a family falls through a member whose constraint fails
- TestOverlapConstraintFallsThrough: an earlier member that matches the
  literals but not its Where constraint must let a later member answer;
  the routes.php pairs cannot show this, since each member's own handler
  re-checks its constraints and the pairs differ in their literals (T-13-23)
2026-10-03 11:27:44 +02:00
Jakub Zych
4ed45c1b03 test(13-06): cover the Phase 13 framework edges in surf, conga, lagoon and tide
- surf: a transitive three-route family, HEAD and sorted Allow on family
  paths, a family across two plugins with per-member middleware, refused
  trailing-slash and multi-segment shapes
- conga: refusal messages name kind and queue, a configured queue counts
  as served, a delayed unregistered dispatch waits scheduled
- lagoon: prohibited under a wildcard, on a dotted path and after bail
- tide: quoted, RFC 5987 and multi-date download names; a captured id
  beside a masked notification id
2026-10-03 11:01:58 +02:00