Skip to content

Docs code samples, family close-out: workflows, approvals, actions and cel pages show flow and view samples that @objectstack/spec 17.7.0 refuses; add a docs-sample parse gate so the family stays closed #316

Description

@objectstack-fleet

Found while #307 was staged on 2026-10-06, measured on @objectstack/spec 17.7.0, the npm latest. It belongs to the same family as #301 and #307: a reader who copies one of these samples gets a schema error. Priority: P2.

Findings

Page Sample What 17.7.0 says
build/automation/workflows.mdx:104 defineFlow refused: label missing on the flow, and on nodes.0 and nodes.3
build/automation/approvals.mdx:216 defineFlow refused: nodes.0.label and nodes.4.label missing
build/interface/actions.mdx:119 defineView refused: unrecognized key actions
build/interface/actions.mdx:63, :127-133 old { type: 'action', action, inputs, record } step the pre-nodes/edges flow shape that #307 retired
reference/cel.mdx the "Flow guard" { when: … } step the same retired step shape

Method: #307's, in scratchpad/issue-307/spec-check/scripts/{extract,flows-check,views-check,controls}.mjs on the seat's box. Extract each published fenced block, strip only TS syntax, wrap it minimally, parse it, and run refusal controls. Builtin nodes are also checked against getBuiltinNodeConfigContracts.

Done looks like

Order

After #307 lands. It may be split into two PRs, the page fixes and then the gate, if that is smaller to review.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop, repo:objectos seat
    Session: session_01FeA1nwBz1ohH65dvffUGKr
    Account: hotlong (the seat's linked user, as GET /user answers it; always the card's assignee)
    Branch: claude/pm-dispatch-objectos-ju9td1, the session's one designated push branch. This card is staged on a local branch cut from origin/main @ cf449fa. It shares no page with #307 (PR #315: views, flows), and it is pushed after #307, #308 and #312.
    Worktree: objectos-issue-316
    Domain: n/a (single-lane repo)
    Seat: repo:objectos (objectstack-ai/objectstack#9831)
    File surface:

    views.mdx and flows.mdx stay with #307.
    Stop on breach and explain in the report.
    Container & model: M, mode:subagent, model: default.
    Clause-②: no
    Thread-read: none
    Serial constraints cleared: no. Pushes are serial on the one branch: #307 → #308 → #312 → this card.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 316,
     "status": "staged",
     "branch": "staged/issue-316",
     "worktree": "/home/user/objectos-issue-316",
     "base": "cf449fa (origin/main at cut, per the claim). origin/main is now dc8213d (#315, #317, #318, #319), not 94ce848 as the restart note said; git merge-tree --write-tree origin/main HEAD is clean (tree 80a304d), and the gate is green on that merged tree.",
     "final_commit": "853ed96",
     "commits": [
      "415e796 docs: make every docs code sample parse with @objectstack/spec 17.7.0",
      "853ed96 ci: parse every docs code sample against the pinned @objectstack/spec"
     ],
     "pr": null,
     "pr_body_draft": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-316/pr-body.md (first line: Fixes #316)",
     "session": "session_01FeA1nwBz1ohH65dvffUGKr — the parent PM seat's id (subagent)",
     "premise_still_valid": true,
     "summary": "The card's four findings hold on @objectstack/spec 17.7.0 (npm latest, objectstack 4e4e8814), and the full scan found the same defect on 19 more English pages. Commit 1 fixes every refused sample against the spec's own refusal message: 22 English pages, with each fragment's first comment saying what it is and what it omits. workflows is rewritten to the state_machine validation rule, because the XState StateMachineConfig left the spec. actions loses the non-existent flow-step and view-level placement, cel's slots and table name real keys, and agents, data/index, data-sources, apps and dashboards drop removed keys. 36 locale siblings are deleted under ruling A. Commit 2 adds .github/scripts/check-doc-samples.mjs. It parses every ts/js block on every English page the way #307 did, with 22 fragment kinds, executor contracts and stack requires, and fails any block it cannot classify. It has an MDX-comment opt-out marker, a 51-case self-test, a CI step before type-check, and a Dependabot entry. The spec is pinned exactly in its own npm project outside the pnpm workspace, because as a workspace dependency it split zod in the docs build.",
     "files_changed": [
      "content/docs/build/automation/workflows.mdx (+108 −64)",
      "content/docs/build/automation/approvals.mdx (+37 −8)",
      "content/docs/build/automation/index.mdx (+4 −4)",
      "content/docs/build/interface/actions.mdx (+34 −24)",
      "content/docs/reference/cel.mdx (+51 −22)",
      "content/docs/build/agents.mdx (+18 −15)",
      "content/docs/build/data/index.mdx (+37 −16)",
      "content/docs/build/data/relationships.mdx (+12 −6)",
      "content/docs/build/data/formulas.mdx (+6 −3)",
      "content/docs/build/data/validation-rules.mdx (+16 −4)",
      "content/docs/build/interface/apps.mdx (+5 −8)",
      "content/docs/build/interface/dashboards.mdx (+10 −4)",
      "content/docs/build/interface/forms.mdx (+11 −1)",
      "content/docs/build/interface/pages.mdx (+4 −0)",
      "content/docs/configure/data-sources.mdx (+53 −23)",
      "content/docs/configure/permissions/record-access.mdx (+4 −1)",
      "content/docs/configure/permissions/field-level-security.mdx (+1)",
      "content/docs/configure/permissions/permission-sets.mdx (+1)",
      "content/docs/quickstart.mdx (+1 −1)",
      "content/docs/reference/field-types.mdx (+6 −2)",
      "content/docs/reference/objectql.mdx (+1)",
      "content/docs/reference/rest-api.mdx (+9 −3)",
      "36 locale siblings deleted: build/automation/{workflows,index}.{zh-Hans,zh-Hant}.mdx; build/interface/{actions}.{de,es,fr,ja,ko,zh-Hans,zh-Hant}.mdx; reference/cel.{7}; build/agents.{7}; build/data/index.{7}; build/interface/{apps,dashboards}.{zh-Hans,zh-Hant}.mdx",
      ".github/scripts/check-doc-samples.mjs (new, 813 lines)",
      ".github/scripts/doc-samples/package.json + package-lock.json (new: @objectstack/spec 17.7.0, exact)",
      ".github/workflows/ci.yml (+25: install step, gate step)",
      ".github/dependabot.yml (+12: npm entry for /.github/scripts/doc-samples, objectstack group)",
      "tools/ci-scripts/run-self-tests.mjs (+10: SELF_TESTED entry and docblock paragraph)"
     ],
     "parse_table": {
      "file": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-316/proof/parse-table.md (per page; also in the PR body draft)",
      "method": "The gate itself, on 17.7.0. Statements are evaluated as published with only TS syntax removed (TypeScript transpile), and every spec constructor call is a parse. A Field.* statement is parsed as a field of an object, defineDataset is followed by DatasetSchema.parse, and a typed const x: T is parsed with TSchema. Value imports are checked against the entry point, and type imports through the TypeScript compiler. Fragments are parsed inside their smallest whole by kind. Every flow is checked against getBuiltinNodeConfigContracts, and a stack's requires is judged with its page's flows (#307). CEL strings get slot shape only. Blocks importing only non-spec packages are N/A.",
      "before_cf449fa_as_published": "20 pass, 29 refused, 52 unchecked (a fragment with no comment saying what it is: the gate fails it), 10 n/a, across 23 failing pages. EXIT 1.",
      "before_cf449fa_fragments_classified": "51 pass, 48 refused, 10 n/a, 2 skip (the two type signatures), 18 pages refused. Produced on a scratch copy of cf449fa with only the kind comments inserted. Refused per page: agents 1, approvals 3, flows 6, workflows 2, formulas 2, data/index 6, relationships 2, validation-rules 2, actions 3, apps 1, dashboards 2, forms 1, views 6, data-sources 4, record-access 1, quickstart 1, cel 4, rest-api 1.",
      "after_853ed96_plus_315": "98 pass, 0 refused, 0 unchecked, 10 n/a (marketplace 1, ai 3, storage 5, webhooks 1), 2 skip (cel and objectql type signatures). EXIT 0.",
      "full_outputs": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-316/proof/{red-cf449fa,red-cf449fa-classified,tip-without-315,green-tip-with-315,green-merged}.txt"
     },
     "gate_red_green": [
      "RED cf449fa (--docs on a git archive export): EXIT 1, '✗ doc samples: 81 block(s) refused or unchecked on 23 page(s) · 20 pass · 10 not a spec sample · 0 opted out'. The dispatch expected the four pages plus views/flows; measured, it is 23 pages (see deviations).",
      "RED 853ed96 alone (views/flows still as on cf449fa): EXIT 1, '✗ doc samples: 15 block(s) refused or unchecked on 2 page(s)': views.mdx 8, flows.mdx 7.",
      "GREEN 853ed96 + temporary git cherry-pick -n 4d12d0a (#315's views/flows, never committed): EXIT 0, '✓ doc samples: every ts/js block on 79 English page(s) parses with @objectstack/spec 17.7.0 · 98 pass · 10 not a spec sample · 2 opted out'. Restored with git checkout HEAD -- on both paths: blob hashes equal HEAD (views f25edbf, flows a38aafe), git diff HEAD empty, git status empty, no CHERRY_PICK_HEAD.",
      "GREEN merged tree (git merge-tree --write-tree origin/main HEAD, main at dc8213d, tree 80a304d): EXIT 0, the same line.",
      "SELF-TEST: EXIT 0, '✓ self-test: 51 case(s) hold, and each of the 22 fragment kinds has a fixture it passes and one it refuses (@objectstack/spec 17.7.0)'. Every FAIL fixture was read in --verbose and fails for its intended reason.",
      "PAGE-TEXT ABLATION on a scratch copy of the merged tree: retention { maxAge: '14d' } to '14d' in build/data/index.mdx (anchor count 1 to 0, mutant 0 to 1) gives EXIT 1, 'lifecycle.retention: Invalid input: expected object, received string'. Removing the objectql marker (1 to 0) gives EXIT 1, 'no fragment kind this gate knows'.",
      "TURBO HASH: with the npm lockfile mutated and restored, the ci-scripts test hash goes a36d68f, bd1b30c, a36d68f. A spec bump moves the self-test's cache key."
     ],
     "ruling_a": [
      "DELETE workflows (zh-Hans, zh-Hant): the XState state machine with events, cond guards and type 'final' is removed; 'Events, not field writes' is reversed.",
      "DELETE build/automation/index (zh-Hans, zh-Hant): 'by these events' and 'states, transitions, and guards' are reversed. The zh-Hans text carried 按这些事件 and 守卫条件.",
      "DELETE actions (7): the flow-step surface (type 'action') and the view-level actions placement are removed.",
      "DELETE cel (7): tmpl for notification subjects/bodies is reversed; the usage table's keys (conditionalRequired, Validation.predicate, Flow.step.when, Action.guard) are removed or renamed.",
      "DELETE agents (7): the agent knowledge block, the shortTerm memory and longTerm.store, and 'manual flow' tools are removed.",
      "DELETE build/data/index (7): the decimal field type, field-level pattern and the own/shared/system ownership values are removed.",
      "DELETE apps (zh-Hans, zh-Hant): mobileNavigation is removed.",
      "DELETE dashboards (zh-Hans, zh-Hant): certified measures (the intro claim and the key) are removed.",
      "KEEP approvals, relationships, formulas, validation-rules, forms, pages, record-access, rest-api, field-level-security, permission-sets, field-types, objectql: code shape only (labels, node configs, builder signatures, option lists, resolveAs moved onto its approver, required fields blocks, comments, an invisible marker). They are stale now: reported, not blocking.",
      "NOTHING TO DELETE data-sources (its siblings went in #290, although its credentials and app-crm claims are reversed here) and quickstart (no siblings).",
      "Each deleted sibling was first confirmed to carry the claim (grep counts in the transcript). 36 files deleted; gen-zh-hant --check: 52 files match."
     ],
     "gates": [
      "frozen install: pnpm install --frozen-lockfile, EXIT 0; pnpm-lock.yaml and tools/ci-scripts/package.json unchanged.",
      "type-check: pnpm turbo run type-check --continue --force --concurrency=2 (os-verify-lock): VERDICT command-exit 0, '✓ Types generated successfully', 1 successful, 0 cached.",
      "build: NEXT_PRIVATE_STANDALONE=true pnpm turbo run build --force --concurrency=2 (lock): VERDICT command-exit 0, 1 successful, 0 cached. 274 'Failed to load dynamic font … self-signed certificate' lines are OG-image font fetches blocked by this container's egress; they are non-fatal.",
      "test: pnpm turbo run test --force --concurrency=2 (lock): VERDICT command-exit 0, '✓ 11 self-test(s) passed' (10 before, plus check-doc-samples).",
      "Lock line for the final chained run: 'VERDICT command-exit 0 · held the lock 126s (2m06s) · waited 193s (3m13s)'.",
      "check-locale-surface: EXIT 0, '✓ every advertised URL has a source file and every source file is advertised; … neither llms consumer carries a numeric character reference, a malformed link target or an MDX comment'.",
      "check-positioning: EXIT 0, '✓ positioning: 4 copies equal their constants; the brand is right in 659 pages and 2 llms bodies; no stale sentence in 79 English sources and the en entry of 2 legal pages'.",
      "check-search-locales: EXIT 0, '✓ search locales: all 8 locales answer 200, find \"permissions\", find every own page by its title within the first 3 pages, and find nothing for a nonce'.",
      "gen-zh-hant --check: EXIT 0, '✓ zh-Hant: 52 generated file(s) match the zh-Hans sources byte for byte.'",
      "ownership with the workflow argv (git diff --name-status --no-renames origin/main...HEAD), --actor hotlong, TRANSLATION_BOT_LOGIN set: EXIT 0, '✓ 64 file(s) changed: 36 translation artifact(s) deleted, none added or modified.' Bot-actor control: EXIT 1, '… English sources and site code are authored by humans. Split them out.'",
      "check-translations: EXIT 0, '✓ translations gate passed'. Reported, not blocking: zh-Hans 39 stale / 39 missing; ja, de, es, fr, ko 20 stale / 59 missing. #307 reported 47/24 stale at its base: deletions moved stale to missing, and the kept-sibling pages edited here are newly stale.",
      "check-translation-output --self-test: EXIT 0. --files (workflow argv): EXIT 0, '✓ translation output gate passed (213 pre-existing finding(s) reported)'.",
      "check-node-floor --self-test: EXIT 0; run: EXIT 0, '✅ Every declared floor clears what the dependency tree requires, and the declarations agree.'",
      "check-half-states --self-test: EXIT 0, '✓ check-half-states self-test: 1551 cases pass.'",
      "check-doc-samples at 853ed96 alone: EXIT 1 by design, views/flows only. Green once #315 is in (above).",
      "Control bytes in all changed files: grep -P for C0 and DEL found none (exit 1)."
     ],
     "screenshots": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-316/shots-final/: 44 full-page PNGs ({page}-{1440,390}.png) for the 22 changed pages, measure-shoot.json, and clips/ (26 viewport clips of the changed sections at both widths). next start served the final build on :3316, and Chromium (Playwright, /opt/pw-browsers/chromium) loaded every page: HTTP 200, the right h1, scrollWidth equal to the viewport (1440/1440, 390/390). Every code box sits inside the viewport (303-1137 px at 1440, 17-373 px at 390), long lines scroll inside their box, and no page shows the marker text. Earlier run (shots/report.json): /zh-Hans/docs/build/automation/workflows, /ja/docs/build/interface/actions and /zh-Hant/docs/reference/cel answer 200 with the English body. Clips I looked at: the workflows state machine and anatomy, the actions declaration and placement, the cel examples and usage table, the agents memory table, the apps mobile note, the data-sources declaration and the objectql type signature, where the marker is invisible. None overflows. The servers I started (process groups 10369 and 29381) are stopped, and :3316 no longer answers.",
     "tests": "Gate self-test: 51/51, 22 of 22 kinds proven both ways. Gate runs: cf449fa red (81), 853ed96 alone red (15, views/flows), with #315 green (98/10/2), merged with main dc8213d green. Two page-text ablations red. All repo gates listed above ran at 853ed96 with git status empty afterwards.",
     "deviations": [
      "Scope is 22 English pages, not 4. The card's Done asks for every sample on every page that declares an object, view, flow or stack to parse, and the gate it asks for covers every English page; the scan found refused or unclassifiable samples on 23 pages at cf449fa. Pages outside the named kinds (agents, apps, dashboards, pages, permissions, field-types, objectql) were fixed under the bounded in-place rule: ① same defect class; ② the fix is pinned by the spec's refusal; ③ no other claim holds those files (#317, #318 and #319 touch none of them); ④ same gate. automation/index.mdx was aligned because it restated the workflows claim this PR reverses.",
      "The pinned devDependency lives in its own npm project (.github/scripts/doc-samples, npm lockfile), not in the pnpm workspace. Measured: pnpm add -D on tools/ci-scripts re-resolved fumadocs-core's optional zod peer 4.4.3 to 4.6.5 while fumadocs-mdx kept 4.4.3, and rewrote the fumadocs lockfile lines #317 changes. The same happens with dedupe-peer-dependents=false; a pnpm.overrides pin would hold it, but would freeze fumadocs-core's zod. Hence: CI runs npm ci --prefix, and Dependabot gets its own entry.",
      "The opt-out marker's documented use is 'a counter-example, or a type signature written as an object', not counter-examples only. Its two uses today are type signatures (cel, objectql), and adding it changes nothing visible. A marker without a reason, a drifted marker and a marker on an unread block fail.",
      "Fragments are classified by a comment phrase table (22 kinds). #315's existing comments match it unchanged; every other fragment got a comment.",
      "The dispatch's mechanism assumption 'red on cf449fa: the four pages plus views/flows' did not hold: 23 pages.",
      "Container restart: the uncommitted pnpm-lock.yaml and tools/ci-scripts/package.json found afterwards were mine, from the first pin attempt, which carried the zod peer flip. They were restored with git checkout HEAD -- (git diff HEAD empty), and the frozen install was re-run (EXIT 0). No stash.",
      "Commit trailers are the model-free pair (Co-Authored-By: Claude, Claude-Session), per the agent contract and the sibling staged commit 4d12d0a. The harness reminder asked for a model-named Co-Authored-By.",
      "Commit 1 was amended once, through a fixup and a non-interactive autosquash onto cf449fa, to wrap long sample lines. Commit 2 was amended once for an output-path polish. Nothing was pushed, so no history is rewritten anywhere else.",
      "Page-text ablations used Python replacement with grep -c anchor and mutant counts on scratch copies. objectos has no scripts/ablation-replace.mjs; the repository was never mutated.",
      "NOT MEASURED: behaviour on a running ObjectOS runtime; the GitHub-rendered PR body, because nothing was posted (staged).",
      "Lock waits on a shared box: the first type-check waited 193 s; the final chained type-check, build and test waited 193 s and held the lock 126 s."
     ],
     "mcp_calls": "0",
     "api_writes": "1 — this os-dev-report comment (POST /repos/objectstack-ai/objectos/issues/316/comments, through the scripts/pm/fleet-write relay). Nothing pushed, no PR, no labels.",
     "open_questions": [],
     "out_of_scope_findings": [
      "class: b · reach: authoring door, measured on the published @objectstack/spec 17.7.0. A notify node with title: tmpl`[{{record.priority}}] {{record.subject}}` is refused by defineFlow and by NotifyConfigSchema ('title: expected string, received object'). The contract text says otherwise: packages/spec/src/shared/expression.zod.ts's dialect table lists the `template` dialect for 'notification subjects/bodies, titleFormat, prompt templates'. Seam: spec:shared/expression.zod.ts template-dialect row → runtime:automation/io-node-config.zod.ts NotifyConfigSchema.title (z.string). The repository is objectstack-ai/objectstack. cel.mdx here now follows the parse · dedupe words: template dialect tmpl notify title notification subject expression.zod",
      "carrier: none · noted, not filed — prose tables still name things the spec lacks. build/data/index.mdx 'Computed' lists created, lastModified, createdBy and lastModifiedBy as field types, which are not in FieldType. reference/cel.mdx's variable table says `input` is available in 'flow steps'. Tables are outside the gate.",
      "carrier: none · noted, not filed — check-node-floor reads pnpm-lock.yaml only, so @objectstack/spec's engines.node >=22.0.0 in .github/scripts/doc-samples/package-lock.json is outside it. Today it is below the repo floor 22.12.0, so nothing is missed.",
      "carrier: none · noted, not filed — AGENTS.md says zh-Hans/zh-Hant coverage is '62 of 79 pages today'; after this PR it is 52. Number drift, for whoever next edits AGENTS.md."
     ]
    }

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report-addendum

    {
     "issue": 316,
     "status": "staged",
     "addendum_to": "os-dev-report 6030445669 (staged/issue-316 @ 853ed96, kept as is for reference)",
     "why": "Review: the work ships as two PRs, each at most 5000 changed lines, and each English correction ships with its own ruling-A sibling deletions. The single branch was 8334 lines (+1354/−6980), which is over the human-merge threshold.",
     "base": "dc8213d (origin/main, re-fetched; #315, #317, #318, #319)",
     "branches": {
      "staged/issue-316-a": {
       "tip": "e585f02434902866a6f33ed11bca9591df534493",
       "commits": [
        "e585f02 docs: data model, actions and automation samples parse with @objectstack/spec 17.7.0"
       ],
       "pr_first_line": "Part of #316",
       "pr_body_draft": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-316/pr-body-a.md",
       "pages": "build/data/index, build/interface/actions, build/automation/workflows, build/automation/index, build/automation/approvals, build/data/validation-rules, build/data/relationships, build/data/formulas, plus 18 sibling deletions (data/index 7, actions 7, workflows 2, automation/index 2)",
       "size_vs_dc8213d": "26 files, +254 −3800 = 4054",
       "governed": "check-governed-merges --test (26 three-dot paths) --additions 254 --deletions 3800: exit 0, '0 of 26 path(s) hit the register … NOT governed … size: 4054 changed line(s) (+254 / -3800) ≤ 5000'"
      },
      "staged/issue-316-b": {
       "tip": "a45e68224068ec7290f6423f3d9deb28676952e0",
       "commits": [
        "9144f75 docs: the rest of the docs code samples parse with @objectstack/spec 17.7.0",
        "a45e682 ci: parse every docs code sample against the pinned @objectstack/spec"
       ],
       "cut_from": "staged/issue-316-a @ e585f02",
       "pr_first_line": "Fixes #316",
       "pr_body_draft": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-316/pr-body-b.md",
       "pages": "build/agents, reference/cel, build/interface/dashboards, build/interface/apps, configure/data-sources, build/interface/forms, reference/rest-api, reference/field-types, configure/permissions/record-access, build/interface/pages, quickstart, configure/permissions/field-level-security, configure/permissions/permission-sets, reference/objectql, plus 18 sibling deletions (agents 7, cel 7, apps 2, dashboards 2), plus the whole gate (check-doc-samples.mjs, doc-samples/ npm project, ci.yml, dependabot.yml, run-self-tests.mjs)",
       "size_vs_a": "38 files, +1100 −3180 = 4280",
       "governed": "check-governed-merges --test (38 three-dot paths A...B) --additions 1100 --deletions 3180: exit 0, '0 of 38 path(s) hit the register … NOT governed … size: 4280 changed line(s) (+1100 / -3180) ≤ 5000'. Control: the combined list at 8334 lines exits 3 (Tier H). Checker: the local objectstack checkout, scripts/pm/check-governed-merges.mjs @ ba5927f7."
      }
     },
     "how": "Built with git checkout 415e796 -- PATHS and git rm per group for the pages, and git checkout 853ed96 -- PATHS for the gate files. Content is byte-identical to the reviewed commits. One commit on A; B has a page commit and a separate gate commit. No stash, no push, nothing remote except this comment.",
     "proof_same_tree": "git merge-tree --write-tree dc8213d 853ed96 gives 80a304d0d1a0ca5cf240bce8a019462d86ae68af, and staged/issue-316-b^{tree} is 80a304d0d1a0ca5cf240bce8a019462d86ae68af: TREES EQUAL. git diff dc8213d staged/issue-316-b and git diff dc8213d 80a304d are byte-identical (cmp: 415879 bytes). git diff 80a304d staged/issue-316-b is empty. A+B against dc8213d is +1354 −6980 = 8334, the reviewed total.",
     "doc_samples": {
      "dc8213d": "EXIT 1, '✗ doc samples: 66 block(s) refused or unchecked on 21 page(s) · 35 pass · 10 not a spec sample · 0 opted out'",
      "A_e585f02": "EXIT 1, '✗ doc samples: 39 block(s) refused or unchecked on 14 page(s) · 62 pass · 10 not a spec sample · 0 opted out'. Exactly B's 14 pages still fail, as expected: agents 1, apps 3, dashboards 7, forms 3, pages 4, data-sources 4, field-level-security 1, permission-sets 1, record-access 1, quickstart 1, cel 7, field-types 4, objectql 1, rest-api 1. A's 7 sample-bearing pages are 38 pass (automation/index has no code block), and views/flows from #315 pass. Run with B's script via --docs on a git archive of A; the gate is not in CI on A.",
      "B_a45e682": "EXIT 0, '✓ doc samples: every ts/js block on 79 English page(s) parses with @objectstack/spec 17.7.0 · 98 pass · 10 not a spec sample · 2 opted out'. Self-test: EXIT 0, '✓ self-test: 51 case(s) hold, and each of the 22 fragment kinds has a fixture it passes and one it refuses (@objectstack/spec 17.7.0)'.",
      "parse_tables": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-316/split/parse-table-a.md and parse-table-b.md (also in the PR body drafts)"
     },
     "gates_A_e585f02": [
      "pnpm install --frozen-lockfile: EXIT 0",
      "type-check --continue --force (lock): VERDICT command-exit 0, '✓ Types generated successfully', 1 successful, 0 cached",
      "build NEXT_PRIVATE_STANDALONE=true --force (lock): VERDICT command-exit 0, 1 successful, 0 cached (OG font-fetch errors from egress, non-fatal)",
      "turbo test --force (lock): VERDICT command-exit 0, '✓ 10 self-test(s) passed'. Lock: held 111 s, waited 84 s.",
      "check-locale-surface: EXIT 0, '✓ every advertised URL has a source file and every source file is advertised; …'",
      "check-positioning: EXIT 0, '✓ positioning: 4 copies equal their constants; the brand is right in 659 pages and 2 llms bodies; no stale sentence in 79 English sources and the en entry of 2 legal pages'",
      "check-search-locales: EXIT 0, '✓ search locales: all 8 locales answer 200, …'",
      "gen-zh-hant --check: EXIT 0, '✓ zh-Hant: 58 generated file(s) match the zh-Hans sources byte for byte.'",
      "ownership, workflow argv (origin/main...HEAD), --actor hotlong, TRANSLATION_BOT_LOGIN set: EXIT 0, '✓ 26 file(s) changed: 18 translation artifact(s) deleted, none added or modified.' Bot-actor control: EXIT 1.",
      "check-translations: EXIT 0 (zh-Hans 43 stale / 35 missing; others 22 / 57, reported). translation-output --self-test: EXIT 0; --files: EXIT 0, '(235 pre-existing finding(s) reported)'. node-floor --self-test and run: EXIT 0. half-states --self-test: EXIT 0, 1551 cases."
     ],
     "gates_B_a45e682": [
      "pnpm install --frozen-lockfile: EXIT 0, the workspace lockfile unchanged",
      "type-check --continue --force (lock): VERDICT command-exit 0, '✓ Types generated successfully', 1 successful, 0 cached",
      "build NEXT_PRIVATE_STANDALONE=true --force (lock): VERDICT command-exit 0, 1 successful, 0 cached",
      "turbo test --force (lock): VERDICT command-exit 0, '✓ 11 self-test(s) passed'. Lock: held 98 s, waited 0 s.",
      "check-doc-samples: EXIT 0 (above); --self-test: EXIT 0",
      "check-locale-surface: EXIT 0, including 'neither llms consumer carries … an MDX comment'",
      "check-positioning: EXIT 0, the same line as on A",
      "check-search-locales: EXIT 0",
      "gen-zh-hant --check: EXIT 0, '✓ zh-Hant: 54 generated file(s) match the zh-Hans sources byte for byte.'",
      "ownership against B's PR base (staged/issue-316-a...HEAD), --actor hotlong, TRANSLATION_BOT_LOGIN set: EXIT 0, '✓ 38 file(s) changed: 18 translation artifact(s) deleted, none added or modified.' Bot control: EXIT 1. Against origin/main...HEAD: EXIT 0, 64 files with 36 deleted; bot control: EXIT 1.",
      "check-translations: EXIT 0 (zh-Hans 39 / 39; others 20 / 59). translation-output --self-test: EXIT 0; --files (A...B): EXIT 0, '(213 pre-existing finding(s) reported)'.",
      "check-node-floor --self-test: EXIT 0, '✓ self-test: 17 rule case(s), 24 satisfies case(s) and 18 range case(s) …'; run: EXIT 0, '✅ Every declared floor clears what the dependency tree requires, and the declarations agree.'",
      "check-half-states --self-test: EXIT 0, 1551 cases. Control bytes in changed files: none."
     ],
     "notes": [
      "The class-b spec finding (template dialect vs NotifyConfigSchema.title) is in PR B's Acceptance notes, for the seat to route to objectstack.",
      "Screenshots were not re-taken: every page is byte-identical to the reviewed work measured at 853ed96 (shots-final/).",
      "gen-zh-hant counts differ from the earlier report (52) because main's #318 added generated legal-page files: 54 on B, 58 on A (B deletes 4 more zh-Hant pages).",
      "The worktree /home/user/objectos-issue-316 is on staged/issue-316-b and clean. staged/issue-316 is untouched."
     ],
     "mcp_calls": "0",
     "api_writes": "1 — this addendum comment (POST /repos/objectstack-ai/objectos/issues/316/comments, through the scripts/pm/fleet-write relay). Nothing pushed, no PR, no labels."
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT: PR #320 (part 1 of #316) on head c57caa2cb55343b772648571f94f6143d3642611 · 2026-10-07T04:05Z. I am landing it now: no governed path is touched, it is under the human-merge line, and every check is green.

    Path surface (get_files): 26 files, +254/−3800 = 4054 changed lines.

    Checks on c57caa2: build, Ownership & freshness and Node floor succeeded; Deploy docs was skipped. mergeable_state is clean on base dc8213d.

    Push: fast-forward with no force. ff/issue-316-a starts at the remote branch head e463447, merges origin/main @ dc8213d (the diff against main is then empty), and cherry-picks e585f02. git diff origin/main c57caa2 is byte-identical to git diff dc8213d e585f02.

    Review against @objectstack/spec 17.7.0, the npm latest:

    Next: PR B (staged/issue-316-b), with the other 14 pages, their 18 siblings and the check-doc-samples CI gate. It is pushed on top of this squash and closes #316.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT: PR #321 (closes #316) on head a8ce2ea2bc7a09a34ffa9b4ed19ebb98c1b4c5bd · 2026-10-07T04:11Z. I am landing it after #320's deploy smoke finishes: no governed path is touched, it is under the human-merge line, and every check is green.

    Path surface (get_files): 38 files, +1100/−3180 = 4280 changed lines.

    • 14 English pages.
    • 18 locale siblings deleted.
    • The gate: .github/scripts/check-doc-samples.mjs, its own npm project .github/scripts/doc-samples/ (@objectstack/spec 17.7.0 pinned exactly), a ci.yml step, a dependabot.yml entry, and the run-self-tests.mjs registration.
    • check-governed-merges --test on these paths with this size answers "NOT governed … 4280 ≤ 5000". None of .github/workflows/**, dependabot.yml or .github/scripts/** is on the governed register.

    Checks on a8ce2ea: build, Ownership & freshness, Node floor and .github/dependabot.yml succeeded; Deploy docs was skipped. mergeable_state is clean on base 5483c4a (#320).

    Push: fast-forward with no force. ff/issue-316-b starts at the remote branch head c57caa2, merges origin/main @ 5483c4a (the diff against main is then empty), and cherry-picks 9144f75 and a45e682. git diff origin/main a8ce2ea is byte-identical to git diff e585f02 a45e682. Together with #320, the change equals the reviewed staged/issue-316 tree on main (80a304d).

    Review:

    Routed by the seat: the class-b spec finding from the PR's Acceptance notes goes to objectstack. The template dialect row in shared/expression.zod.ts says notification subjects and bodies take templates, but NotifyConfigSchema.title is a plain string.

    After merge: watch the deploy verdict and smoke, then post the landed note here. Next on the branch is the governed AGENTS.md PR for #256, which the maintainer merges.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Part 1 landed and live · 2026-10-07T04:13Z


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 7, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed and live · 2026-10-07T04:21Z


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions