Conversation
The 2026-07-31 re-baseline added 83 new endpoint rows at Implemented ☐ /
Tested ☐ and they were never rescored, so the matrix badly understated the
app: 56 of the 83 scoreable rows had shipped in the interim (G1 DMs, G2
Moderation, G3 Sharing, G5 Search, G4 GitHub, G11a LinkedIn, G12 templates,
G14 limits, D2 public profile, native OAuth link).
Walked every row against the Kit builders, DTOs and Domain service call
paths and applied the existing maintenance rule literally. Implemented ☑
requires builder + DTO + a service call path, so GET /api/linkedin/targets
stays ☐ (builder exists, nothing calls it). Tested ☑ only where the endpoint
has its own decode/encode test and its group supplies failure + empty
coverage; ◐ where only the group-wide builder-shape test reaches it.
Four defects found beyond the flips:
- Six Moderation paths were transcribed from OpenAPI, not from the
live-verified client: the app sends POST|DELETE /api/users/{username}/block
and /mute, POST /api/users/{username}/report and
POST /api/messages/{id}/report — not the /api/user/blocks and
/api/reports/* forms the matrix documented.
- Two GitHub paths likewise: the client sends
PATCH /api/github/repos/{repo}/issues/{number} and its /comments sibling.
Both routes are still unconfirmed live (P1-H2); ☑ records that the client
path is built and tested, not that the route answers.
- Six shipped /invites endpoints (lists + documents) were absent from the
matrix entirely. Added; G3 goes 17 -> 23 rows.
- The subtotal and grand total were arithmetic errors: "53 new" is the
running total through the sixth of sixteen sections, and "151 endpoints"
inherited it. Recomputed from the rows: 89 new, 187 total.
G6 List Folders is rescored — (feature removed in PR #19), joining the
out-of-scope G8 Stripe rows. No original-98 row was touched.
work-consolidation.md: G14's ImagePrep size-ceiling tail was already done —
ContentLimits.imagePrepLimits feeds both upload paths — so §1 is fully
closed, leaving G4's backend-blocked routes as the only §1 thread.
Footnote 14 records the scoring rule and every correction.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GpH4PQZhdYiCfsk5PQmwzq
The "New endpoints (2026-07-31 re-baseline)" section had sat at its initial ☐ Implemented / ☐ Tested state through the entire July/August parity effort, so the matrix was the last artifact still describing the pre-parity client. Re-derive every row from the repository: - Implemented ☑ where a builder exists in InterlinedKit/Endpoints and an InterlinedDomain service calls it; Tested graded by counting distinct test_* functions in Packages/InterlinedKit/Tests that exercise the builder (ContractTests excluded — it needs live credentials): ☑ ≥ 3, ◐ 1–2, ☐ 0. 53 rows flipped. - Add 10 implemented endpoints that had no row at all: email invites for lists and documents (6, from PR #13) and user search / handle lookup / Bluesky + Mastodon provider status (4). - Correct 8 row paths copied from OpenAPI that the client does not use — six Moderation writes (/api/users/{username}/block|mute|report and /api/messages/{id}/report) and the two nested GitHub issue routes — with footnotes 14 and 15 recording why, including that GitHub's update and comment routes 404 live despite shipping client-side. - Mark List Folders (G6) retired: the feature was removed in PR #19, so its 4 rows stay ☐ permanently rather than reading as an open gap. - Recompute the totals per the docs checklist: the new section holds 93 rows, not the 53 claimed — that figure never matched its own per-area breakdown, which already summed to 83. Grand total 98 + 93 = 191 rows, with a note that a row count is not a live-endpoint census. Also refresh two stale claims in work-consolidation.md: the G14 ImagePrep size-ceiling follow-up is done (both upload paths already project ContentLimits through ImagePrep.Limits), and Sparkle's code integration is complete — only the Ed25519 key material and appcast hosting remain. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QYA3FQuyhHgvpbbeMFuYrx
…nsolidation # Conflicts: # work-consolidation.md
…dation docs(coverage): reconcile the API matrix against shipped code
Pulled GET /api/openapi.json under a Bearer token from the .env contract
account and diffed all 294 live operations against the 154 request
builders in InterlinedKit, then cross-read the 18 published help topics
at interlinedlist.com/help. The ~150-endpoint baseline this doc was
built on is a year stale, and "§1 is exhausted" no longer holds.
§1c — six shipping calls send a verb the live server rejects, each
confirmed twice (live spec + an authenticated OPTIONS Allow header):
message edit sends PUT (live: PATCH), preferences save sends POST (live:
PATCH), list-row edit sends PATCH (live: PUT), organization edit sends
PATCH (live: PUT), document-folder rename sends PATCH (live: PUT), and
follower removal sends POST (live: DELETE). Editing a message, saving
Preferences, editing a row, renaming a folder and removing a follower
are all broken against production today. A seventh entry corrects the
GitHub issue update/comment routes to the flat three-segment form.
§1d — G15..G29 record the unimplemented product areas: AI writing and
generation (status/suggest/generate, subscriber-gated, BYO key),
"Create from…" materialize, Applications settings-and-devices sync,
notification preferences, session revocation, tags, link metadata,
DM conversations/single-message/image upload, lists shared-with-me and
contributors, the documents sidebar tree and public documents, org admin
plus the LinkedIn org set, identity unlink, and small one-off routes.
Dashboard/front-wall + widgets and Blog are flagged confirm-demand.
Admin, cron, webhooks, Stripe, analytics and test-db are marked
explicitly out of scope so future re-measures stop re-flagging them.
§2 — P1-H2 and P2-I are resolved: both were client-side path/verb errors,
not backend gaps. P3-H's premise ("both verbs work live") was wrong.
P3-D's client half is unblocked — /api/user/sessions is Bearer-reachable.
G11b is deployed. P1-G re-verified still broken (scope=following returns
the identical feed) and /api/auth/accounts still 401s under Bearer. The
test account is now GitHub-linked but has no repos, so G4 issue envelopes
remain unverifiable.
All probes were read-only (GET/OPTIONS); no writes were made.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QYA3FQuyhHgvpbbeMFuYrx
Reconciles the second of two parallel audit passes (PR #22 merged the first) and folds in the live API re-measure that followed. Conflict resolution: dev's merged version is the base for both files; this branch's unique content is ported on top. docs/api-coverage.md - Adds a section for four implemented endpoints neither pass had a row for: GET /api/users/search, /api/users/lookup, /api/auth/bluesky/status and /api/auth/mastodon/status. - GET /api/auth/twitter/authorize flips to ☑/☑ — built by the shared Auth.authorize(provider:) builder (OAuthProvider includes .twitter) and consumed by UserService + LinkedAccountsViewModel. - Corrects the two GitHub issue rows again, this time against the live API: the routes are the flat PATCH /api/github/issues/{owner}/{repo}/ {number} and its /comments sibling (confirmed by openapi.json and by OPTIONS Allow headers), and Implemented returns to ☐ because the client's builders point at a nested path that 404s. Footnote 15. - Adds a staleness banner: the live API reports 294 operations against this matrix's 191 rows. - Where the two passes graded Tested differently on shared rows, PR #22's grades stand. Totals recomputed: 93 new rows, 191 total. work-consolidation.md - Adds §1c (six live-verb defects that break shipped features) and §1d (G15-G29, the unimplemented product areas found by the re-measure). - Re-statuses §2: P1-H2 and P2-I resolved as client-side errors, P3-H's premise withdrawn, P3-D's client half unblocked, G11b deployed, G13 no longer blocked; P1-G and G10 re-verified still blocked. - Keeps dev's G14 closure, refreshed test baseline and §3a audit intact; the superseded "§1 is exhausted" paragraph is marked as such rather than deleted, since it was accurate for the gaps known at the time. - Adds the re-measure log recording method and evidence. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QYA3FQuyhHgvpbbeMFuYrx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Plan / wave reference
Path ownership
Packages/InterlinedKit/**,Packages/InterlinedDomain/**,Packages/InterlinedPersistence/**per agent (or one App feature folder)PLAN.mdorORCHESTRATION.md(read-only)Tests
test_givenX_whenY_thenZ)swift test --package-path Packages/<pkg>passes locallyxcodebuild -scheme InterlinedList -destination 'platform=macOS' build testpasses locallyDocs
docs/api-coverage.mdupdated if endpoint coverage changeddocs/progress.mdupdated if a wave gate moveddocs/decisions/if architecture changed