Repository navigation
docs(spec): the form.sharing and formViews liveness rows quote the code as it reads now - #24296
Merged
objectstack-fleet[bot] merged 1 commit intoOct 18, 2026
Conversation
…de as it reads now The two rows' evidence quoted code that no longer exists on main (`slugMatchesPublicLink(...)` and `const formViews = view.formViews`). They now cite findPublicFormView in packages/rest/src/form-routes.ts and anonymousFormIntakeCandidates / anonymousFormIntakeSlug in packages/spec/src/ui/anonymous-form-intake.ts, quoting only text those files carry. The sharing row names all three keys the slug rule reads. Verdicts, notes and every other row are unchanged. Claude-Session: https://claude.ai/code/session_019oFY6Hi35J7atvgVFnmoaK Co-authored-by: Claude <noreply@anthropic.com>
Contributor
📓 Docs Drift Check
What this run could not see
Coarse fallback — 143 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
Contributor
Author
席位核对 (seat check) · PR #24296 ·
|
| item | reading |
|---|---|
| Shape | Draft, base main. The body's line 1 is Fixes #24063, then Clause-②: no; no other closing keyword. Assignee = the card's. 2 files. |
| Only the two evidence strings move | The diff touches form.children.sharing.evidence and formViews.evidence. status, verifiedAt and note are byte-identical, as the card asks. |
Every quoted fragment is on origin/main |
git grep -c -F, 1 hit each, in the file each clause names. form-routes.ts: for (const c of anonymousFormIntakeCandidates(view)), if (c.slug !== slug) continue;, publicFormGrant: { object: match.object }. anonymous-form-intake.ts: the three return null key reads (enabled, allowAnonymous, publicLink) and for (const [key, fv] of Object.entries(v.formViews)) forms.push({ form: fv, key });. The anchors resolve: the dev's mutation of #anonymousFormIntakeSlug turned check:liveness red. |
The resolveFormBySlug rewording (deviation 1) |
Accepted. On main, resolveFormBySlug (form-routes.ts:174) is the lookup both doors share (:218), and the grant is set where the clause now says. The old "grants" overstated it. |
| Changeset | '@objectstack/spec': patch; liveness ships in files[]. Its Clause-②: no (…) line parses as declared · no · arm null (readClause2Line), so the gates read it. The three bullets match the diff. |
| Gates (check-runs on this head, read now) | 38 runs: 17 success, 6 skipped, 15 in progress, 0 failure. Not converged, so it does not land yet. |
| Out of scope | All Acceptance notes, none a card: the gate does not read backticked quotes (an observation, and the dev proposes no gate, rightly: 新增门禁默认否); the superseded rest-server.ts:NNNN pointers inside the notes; verifiedAt left as it was. |
| Landing | After every check on this head is green: pr_ready then automerge_enable, through the relay. |
Generated by Claude Code
objectstack-fleet
Bot
deleted the
claude/issue-24063-view-liveness-evidence
branch
October 18, 2026 10:50
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.
Fixes #24063
Clause-②: no
Two evidence strings in
packages/spec/liveness/view.jsonquoted code thatmainno longer has. This PR rewrites them to cite the code as it reads now. Both verdicts were right and staylive. This is the dispatched card under claim6248142626, withmainatd537a318b3(the base of this branch;origin/mainwas re-fetched before this PR and had not moved).What changes
d537a318b3)form.sharingslugMatchesPublicLink(sharing.publicLink, slug)packages/rest/src/form-routes.ts#findPublicFormView, quotingfor (const c of anonymousFormIntakeCandidates(view))andif (c.slug !== slug) continue;·packages/spec/src/ui/anonymous-form-intake.ts#anonymousFormIntakeCandidates, which hands each form'ssharingtoanonymousFormIntakeSlug(the nestedform, everyformViewsentry, and the flattenedconfigof aviewKind: 'form'item) ·packages/spec/src/ui/anonymous-form-intake.ts#anonymousFormIntakeSlug, quoting the three key readsif (s.enabled !== true) return null;,if (s.allowAnonymous !== true) return null;,if (typeof s.publicLink !== 'string' || !s.publicLink) return null;·packages/rest/src/form-routes.ts#resolveFormBySlug(kept)formViewsconst formViews = view.formViewspackages/spec/src/ui/anonymous-form-intake.ts#anonymousFormIntakeCandidates, quotingfor (const [key, fv] of Object.entries(v.formViews)) forms.push({ form: fv, key });·packages/spec/src/ui/view.zod.ts#expandViewContainerWithDiagnostics(kept, unchanged)sharingtext names all three keys the slug rule reads:enabled,allowAnonymousandpublicLink.sharingstring, declared here: the oldresolveFormBySlugclause said that function "grantspublicFormGrant". Onmain,resolveFormBySlug(form-routes.ts:174) only resolves the match. The grant is set in the submit door,publicFormGrant: { object: match.object }(:549), for the matchresolveFormBySlugreturns. The clause now says that. Its anchor and its identifiers are the same as before.formViewsdoes not citeform-routes.ts. That file namesformViews0 times at HEAD, so the liveness key-mention check would flag the citation. That is also why refactor(rest): move registerFormEndpoints into form-routes.ts (#23050 slice 11) #24054 moved this row toanonymous-form-intake.ts..changeset/24063-view-liveness-evidence.md: apatchon@objectstack/spec.livenessis in that package'sfiles[], and docs(spec): the sha-less objectui line citations move to their liveness rows #23621 / refactor(rest): move registerFormEndpoints into form-routes.ts (#23050 slice 11) #24054 carried the same kind of changeset.⛔ No verdict, key, note or other row changes. Checked on the parsed JSON: base
d537a318b3and HEAD differ at exactly two paths,.props.form.children.sharing.evidenceand.props.formViews.evidence. BothverifiedAtvalues stay as they are, because the card forbids key changes.Readings (each a count plus the tree it was taken against)
Repository
objectstack-ai/objectstack. Based537a318b3, HEADe8dd32685.git grep -n -Foverpackages: at the base, each has exactly 1 hit,view.json:356(slugMatchesPublicLink) andview.json:392(const formViews = view.formViews). At HEAD there are 0 hits (exit 1). Positive control at HEAD:findPublicFormViewinpackages/rest/src/form-routes.tsgives 2 lines (exit 0).packages/*/srcalso answers 0 forfindPublicFormView, which exists. A git pathspec glob has to match the whole path, sopackages/*/srcmatches no file. The zero readings above use-- packages, with the control beside them.const findPublicFormView = (atpackages/rest/src/form-routes.ts:132,export function anonymousFormIntakeSlug(atpackages/spec/src/ui/anonymous-form-intake.ts:74, andexport function anonymousFormIntakeCandidates(at:84.git show HEAD:PATH, by substring count. All 6 anchors are present. All 13 fragments occur at least once: each of the 7 quoted code lines occurs exactly once, and the 6 single words occur several times (sharing10,formViews6,viewKind: 'form'2). Result: 0 misses.Which gate reads these citations (E2)
pnpm --filter @objectstack/spec check:liveness(packages/spec/scripts/liveness/evidence.mts#checkEvidenceAnchors, pluskey-mention.mts) resolves each repo-localpath#symboltoken. It checks that the cited file names the symbol as a word, and that every cited file names the row's key. It does not read backticked quotes. Those are checked only by the readings above, which is how both stale quotes survived a green gate.check:spec-docblock-symbol-anchorscoverspackages/spec/src/**doc prose only, not the ledger JSON.d537a318b3: exit 0.symbol anchors: 947 pointer(s) written path#symbol, 947 naming a symbol the cited file contains.key-mention anchoring: 737 (entry, cited file) pair(s) asked, 736 anchored, 1 exempt.e8dd32685: exit 0.symbol anchors: 949 ..., 949 naming a symbol the cited file contains.key-mention anchoring: 738 ... pair(s) asked, 737 anchored, 1 exempt.The deltas are +2 anchors and +1 pair: thesharingrow now anchors two symbols inanonymous-form-intake.ts.node scripts/ablation-replace.mjs(wrap mode, trap-armed, absolute path),#anonymousFormIntakeSlug (the slug rulebecame#anonymousFormIntakeSlugGone (the slug rule. Result:check:livenessexit 1, with949 pointer(s) ..., 948 naming a symbol ..., 1 UNRESOLVEDandview/form.sharing → packages/spec/src/ui/anonymous-form-intake.ts#anonymousFormIntakeSlugGone. Restore: the blob after restore equals the HEAD blob (60737e436b96),git diff HEADis empty andgit status --porcelainis clean. No permanent test was added.Tests and gates (all after the final commit, HEAD
e8dd32685)pnpm --filter @objectstack/spec build(verify lock): exit 0.@objectstack/specvitest run --project local --maxWorkers=2(verify lock):Test Files 694 passed (694),Tests 21027 passed | 1 todo, exit 0.pnpm --filter @objectstack/spec typecheck(verify lock): exit 0. No TS file imports a liveness ledger (git grepexit 1, with a positive control), andtsconfig.jsonincludessrc/**only.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 62 commands from the merge based537a318b. Of those, 60 exited 0. Two exited 3 withPREREQUISITE NOT MET, so they are NOT MEASURED:pnpm check:dual-build-cjs-loadsneeds every package'sdist/(69 of 70 are absent in this worktree) andpnpm check:lean-entry-closureneedspackages/objectql/dist. This narrowing is declared: the diff changes no build input of any package, and CI'sLint & Repo Gatesruns both.--ranprinted62 derived famil(ies) accounted for — 60 run, 2 NOT-MEASURED (2 DERIVED from a recorded exit 3).check:nul-bytes: exit 0.check:skill-frame-freshness(local-only): exit 0.check:dev-prereqs(local-only): exit 1,The workspace is not built. That is a reading of this worktree's state (onlypackages/specis built), not of the diff.Acceptance notes
check:livenessanchor check readspath#symboland the key-mention check reads file-level mentions, but nothing reads a row's backticked quoted code. Both stale quotes here passed a green gate because the anchors still resolved. This is an observation only. Nothing is filed, and no gate is proposed. Carrier: none.notefields still carry supersededrest-server.ts:NNNNline pointers. Each note marks them itself as "superseded by the anchors". The card forbids note changes, so they stay. Carrier: none.verifiedAt: 2026-08-28, although their evidence was re-read for this PR. The card forbids key changes. Carrier: none.Generated by Claude Code