Skip to content

docs: consolidate onto one master doc, verify the auth column, archive the build log - #97

Merged
Adron merged 1 commit into
devfrom
docs/phase2-consolidation
Sep 17, 2026
Merged

Adron merged 1 commit into
devfrom
docs/phase2-consolidation

Conversation

@Adron

@Adron Adron commented Sep 15, 2026

Copy link
Copy Markdown
Member

Summary

Addresses most of #65. ⚠️ This PR pushes a pre-existing local commit that I did not author — bd3324d, sitting on docs/phase2-consolidation in a worktree, committed and never pushed.

That is the same situation PR #83 was in, and #83's description called it out as urgent for exactly this reason: work that exists only in a local worktree is one git worktree remove away from being lost, and meanwhile the master planning doc contradicts the code on dev.

I have pushed it and opened this PR rather than deleting the worktree around it. It needs review by whoever wrote it — I have verified only that it is clean, docs-only, and does not break the build.

What the commit contains

 .claude/agents/doc-engineer.md                     |   2 +-
 .claude/skills/doc-engineer/assets/…checklist.md   |   7 +-
 .claude/skills/swift-engineer/assets/e2e-gate…md   |  11 +-
 .github/pull_request_template.md                   |   2 +-
 CLAUDE.md                                          |  15 +-
 README.md                                          |  12 +-
 docs/api-coverage.md                               | 429 +++++-----
 docs/archive/progress.md                           | 810 +++++++++++++++++
 docs/progress.md                                   | 818 +----------------
 docs/spikes/ai-materialize-live-shapes.md          |   8 +-
 docs/user/feature-status.md                        |   2 +-
 work-consolidation.md                              | 180 ++++-

Against #65's checklist, this covers items 1, 2 and 3: folding the parity re-measure into the master doc, recording the sweep findings, and reconciling docs/api-coverage.md (429 changed lines, including the auth-type column the issue asked for).

Item 4 — worktree pruning — done separately

Audited on 2026-09-15. Of the eleven worktrees present, exactly one was for a branch already merged into dev:

acct-gating   fix/account-status-gating   clean, merged as PR #83   → removed

The ten the issue listed as stale were already gone. The rest are live branches with open PRs from this pass.

Item 5 — local dev behind origin/dev

Was true again (local at 01bc1a9, remote at 3461baf with PR #83 merged). Fast-forwarded before any branch was cut, so every PR in this pass is based on current dev.

What #65 still needs after this

The doc reconcile in bd3324d predates this session, so it does not yet carry:

That is a follow-up pass on work-consolidation.md and docs/api-coverage.md once these PRs land — and it is better done after them than speculatively now, which is the same reasoning #65 itself gives for merging the re-measure before updating it again.

Verification

  • xcodebuild build → ** BUILD SUCCEEDED **
  • Zero .swift, .pbxproj or .plist changes — the diff is documentation, one PR template, and two checklist files.
  • Working tree clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_016gSWb3scYobtxLJioV1qF9

…e the build log

`work-consolidation.md` becomes THE single source of truth. Epic #66 restated its
§1/§2/§3 as a second backlog and both drifted: between 2026-09-07 and 2026-09-13
seven PRs (#67-#73) shipped without either moving, leaving the doc ~330 tests and
two API re-measures behind the code and six shipped issues listed as open.

The duplication is now cut in one direction. The doc owns the plan (ordering,
probe evidence, API shapes, the re-measure log, release path) and a new §1f work
index mapping every item to its issue. Issues own execution. #66 is a pointer.

Anti-drift: a PR that ships a G-item, closes a parity issue, or moves the test
baseline must update the doc IN THAT PR. Added to the doc-quality checklist, the
PR template, CLAUDE.md and the doc itself. A doc updated only in dedicated docs
passes will always drift; one updated by the PR that invalidates it cannot.

Live re-measure (232 paths / 303 operations, up from 226/294) overturned two
standing conclusions, both confirmed by read-only probe rather than by reading
the spec:

- Session-only operations fell 45 -> 32, and 28 of the 32 are admin /
  architecture / Stripe routes a native client should never call. Four actually
  constrain us: auth/accounts, auth/switch, auth/remove-account (#60) and
  send-verification-email.
- The Dashboard is no longer backend-blocked. Both layout routes, engagement and
  all five widget routes now answer 200 under Bearer, so #61 is a product
  decision only. The invite/share claim routes moved to sync-token too, which
  makes PR #70's "genuinely out of reach" note on document-invite accept stale.

Controls probed the other way (auth/accounts and send-verification-email both
401) confirm the four that remain really are session-only -- which also settles
the contradiction inside the unmerged fix/account-status-gating branch in
EmailVerification.swift's favour.

docs/api-coverage.md: the Auth column is now derived from the live spec's
x-auth-type rather than hand-written -- 168 of 191 rows rewritten, retiring the
~50 reading "per OpenAPI, unverified". Bearer vs Session-only makes "not built"
and "not buildable" distinguishable per row. Eleven rows carried a method or path
the live spec does not serve; six were the §1c verb defects, where the matrix
still documented the broken verbs the client stopped sending in PR #24 -- it was
behind the code, not ahead of it. Two speculative rows were disproved and scored.

Implemented/Tested were deliberately NOT re-scored: footnote 14's rule needs a
per-row semantic check (builder AND DTO AND service call path), and a mechanical
flip would manufacture exactly the unverified-but-confident marks that footnote
exists to prevent. Queued as its own pass, with the evidence in footnote 16.

Also fixed: the Decision 0003 gate command was unanchored and matched prose
comments, reporting four false positives while the rule genuinely passed.

Harvested from docs/parity-refresh-2026-09 before retiring it: the AI
provisioning correction (AI is included in the subscription -- no user API key;
an empty providers[] is a site outage, not something the user can fix) and the
article_series ~4-minute 502 timing, which implicates a server-side retry loop.
G15-G20 are marked shipped; they had been left unmarked since PRs #25/#30/#31.

New gap found by the re-measure and filed as #81: saved list views -- five live,
free-tier, Bearer-reachable operations (shared + personal views, forking,
defaults) that no issue or prior sweep mentions. config is an unspecified string,
so it must be probed before modelling.

docs/progress.md is archived to docs/archive/ with a stub left at the original
path so the read-only decision records keep resolving. The doc-quality
"shipped-only rule" pointed at that file as its authority and now points at the
master doc. Dead PLAN.md / ORCHESTRATION.md links (both deleted in f040954) are
retired from README and the checklist.

Gate: BUILD SUCCEEDED; Kit 478 / Domain 946 / Persistence 140 / App 954, all
green. One App-target run reported 1 failure that did not reproduce in three
re-runs on a documentation-only change; filed as #82 with the evidence, since
PR #73 saw the same pattern.

Refs #65, #66, #61, #39, #81, #82

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gSWb3scYobtxLJioV1qF9
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant