You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
docs(adr): the 19 stale Proposed records (status date before 2026-07-26) are ruled by the maintainer in four batches of five — carrier for the rulings and the status-line PRs #26553
Filing gate: ③ maintainer-directed — ruling A on #26076 (comment 6417460375, batch #398 item 3, maintainer 「其他同意」): "The 19 Proposed records older than 2026-07-26 are not relabelled by the PR: the PR lists them with an implementation reading each, and this seat presents them to the maintainer in ruling batches of five." PR #26503 (merged 2026-10-27T06:55Z) carries that list. Filed by the director seat (session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). ⛔ Not a claim. Reader: the director seat (presents and records the rulings here) and, per batch, whoever opens the status-line PR (docs/adr/**, Tier H, lands by the maintainer's approval; authoring is open to every seat). Dedupe: #26076 (closed, the ruling), PR #26503 (the list) — this card is their carrier, not a duplicate; 600 newest issues grepped stale Proposed|Proposed ADR → 0 other.
Four ruling comments on this card (one per batch, Ruling: first line, letters per record, the maintainer's words verbatim).
Four status-line PRs merged (or fewer, if the maintainer rules several batches before a PR is cut); node scripts/adr-index.mjs --check green after each.
docs/adr/README.md shows no Proposed row with a status date before 2026-07-26.
Size: XS per PR (status lines only; a Superseded ruling adds the cross-reference line the index reads). Clause-②: no. Metadata-protocol: none.
Related
#26076 (ruling A); PR #26503 (index + the 19 readings); AGENTS.md Prime Directive 13 (numbers never reassigned) and 14 (Tier H).
Director seat, summon #51 continuation (ledger objectstack#12708). Batch 1 of the four the #26076 ruling A ordered: ADR-0010 (metadata-protection-model) · ADR-0019 (app-as-consumer-unit) · ADR-0022 · ADR-0026 · ADR-0027, presented to the maintainer in batch #410 with PR #26503's implementation readings re-read on origin/mainf48aa451. Each record takes one of four letters: A Accepted (status line states what landed and what is pending) · B Deferred (kept as a proposal, no work planned) · C Withdrawn · D Superseded by a named record. The ruling is recorded on this card; the five status lines land in one docs/adr/** PR (Tier H, the maintainer approves). Seat readings beyond the PR's counts:
ADR-0010: the protection model is live — packages/spec/src/shared/protection.zod.ts ("Package-level metadata protection, ADR-0010 §3.7 — Phase 4.3"), allowEnvironmentOverlay on metadata-plugin.zod.ts:300 (ADR-0131 C5/D6), readers in metadata-manager.ts, registry.ts, plugin.ts. Seat letter A.
ADR-0019 (app as the consumer-facing unit): the 90 citations are mostly the twin 0019-approval-as-flow-node ("process orchestration is a Flow (ADR-0019)"); no source names the app-unit record itself; the Console's marketplace and install surfaces are the test, not re-measured here. Seat letter A with the status line narrowed to what the Console does today, or B if the maintainer reads the marketplace as still package-shaped — the seat leans A (the ADR's D1/D2 describe the shipped Console).
ADR-0022: the routing decision is in force — GET /automation/connectors serves connector descriptors (ADR-0022, automation.ts:2521), service-messaging and connector-slack both exist; the §3 shared-transport wiring is the pending half the status line already names. Seat letter A (pending half stays on the line).
Ruling: batch #410 · ADR batch 1 of 4 · 0010 A · 0019 A · 0022 A · 0026 B · 0027 A (narrowed) · maintainer 「同意」 2026-10-27T10:03Z
Recorded by the director seat (summon #51 continuation, session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). The maintainer answered batch #410 with 「同意」 — every seat letter. Brief 6436780170. The five status lines below land in one docs/adr/** PR opened by this seat (Tier H, the maintainer approves); the keyword is the first word after **Status**: as scripts/adr-index.mjs reads it.
ADR-0010 metadata-protection-model → Accepted. The four-layer model is live (packages/spec/src/shared/protection.zod.ts "ADR-0010 §3.7 Phase 4.3"; allowEnvironmentOverlay, ADR-0131 C5/D6; readers in metadata-manager, registry, plugin). Status line: Accepted — Phases 1, 4 and 4.3 implemented; Phase 2 (L4 frozen paths + provenance), Phase 3 (L2 + RBAC unlock) and Phase 5 (solution stack) pending; the spec lane re-reads Phases 2–3 on the PR and corrects the line if they landed.
ADR-0019 app-as-consumer-unit → Accepted, narrowed to what landed.CONSUMER_INSTALLABLE_TYPES / isConsumerInstallable and the MarketplaceListingSchema.packageType narrowing are in spec; pending: the Console marketplace filling packageType from the manifest, and HotCRM folded to one App (D3/D4). The 90 bare-number citations mostly name the twin 0019-approval-as-flow-node.
ADR-0022 connectors-vs-messaging-channels → Accepted. The routing decision is in force (GET /automation/connectors, service-messaging, connector-slack); §3 shared transport (the Slack channel delegating to the Slack connector) stays pending on the line.
ADR-0027 metadata-authoring-lifecycle → Accepted, narrowed. M1–M2 (staging, publish seal) are implemented in the rest/runtime draft → publish path (meta-item-history-routes.ts:548, meta.ts:1238 cite (E)(5)), not as the @objectstack/metadata-authoring package the record names (no such package exists); M3 promotion + approval gates, M4 advanced migration and the rollback executor are not built.
Execution: this seat opens the status-line PR now (five lines, skip-changeset, node scripts/adr-index.mjs --check green), requests the maintainer's review, and records the merge here. Batch 2 (ADR-0038 · 0046 · 0050 · 0051 · 0052) follows when the maintainer next summons. Ruling-ref: names this comment. Clause-②: no, Metadata-protocol: none.
ADR batch 1 landed · director seat · 2026-10-27T10:29Z
PR #26607 merged 2026-10-27T10:29Z by the maintainer's own strokes (os-zhuang: APPROVED, ready, auto-merge, queue). The five status lines of ruling 6438940264 are on main: ADR-0010, 0019, 0022, 0027 Accepted (0019 and 0027 narrowed to what landed), ADR-0026 Deferred with its restart condition; docs/adr/README.md regenerated (Proposed 22 → 17). Batch 2 (ADR-0038 · 0046 · 0050 · 0051 · 0052) is presented at the maintainer's next summon. ⛔ Not a claim.
Director seat, summon #51 continuation (ledger objectstack#12708). Batch 2 of the four the #26076 ruling A ordered: ADR-0038 · ADR-0046 · ADR-0050 · ADR-0051 · ADR-0052, presented to the maintainer in batch #417 with PR #26503's readings (rows 6–10) re-read on origin/main5e99bd936c (objectstack) and ce05c91 (cloud). Letters as in batch 1: A Accepted (status line names what is pending), B Deferred (restart condition on the line), C Withdrawn, D Superseded.
ADR-0038 build-verification-loop: L1 graph lint + L4 verify_build live in cloud service-ai-studio (verify/graph-lint.ts, plugin.ts:1061), L3 probes in framework (metadata-protocol/src/build-probes.ts, protocol.zod.ts:1578), L5 eval-golden-prompts.yml + ai_eval_runs; L2 renderability contract is the pending half (dataset compile only). Seat letter A.
ADR-0046 package-docs-as-metadata: P1 (DocSchema, collect-docs.ts, kernel doc), P2 (console portal, help menu, Studio DocPreview), P3a/P3b (BookSchema, GET /meta/book/:name/tree, §6.7 audience gate in meta-item-read-gate.ts) are in; P3c Studio drag-edit / anonymous library and P3d tags remain. Seat letter A.
ADR-0050 form-layout-vs-presentation: the unlock shipped (a modal hosts a tabbed layout, ModalForm.tsx:950, AppContent.tsx:1513, [P1] Finish ADR-0021 analytics migration (chart view / dashboard+Studio / report) #1890); the decision itself — FormView.type narrowed to simple|tabbed|wizard — is not: view.zod.ts:4546 still lists split, drawer, modal, and ObjectForm still branches to SplitForm / DrawerForm. Seat letter A narrowed (the spec-major narrowing stays pending on the line), or B if the maintainer does not want that cutover scheduled.
ADR-0051 inline-metadata-views-in-docs: the status line is stale — the runtime renderer exists (ui/packages/components/src/renderers/basic/metadata-viewer.tsx: state_machine :177, flow :378, permission :450) and the markdown fence lift is in MarkdownImpl.tsx:120; P1–P3 landed, the deferred list stays deferred. Seat letter A.
Ruling: batch #417 · ADR batch 2 of 4 · 0038 A · 0046 A · 0051 A · 0052 A (narrowed) · 0050 set aside → #27032 · maintainer 「ADR-0050 表单布局 vs 呈现,单独立卡交维护者处理,其他同意」 2026-10-28T02:24Z
Recorded by the director seat (summon #51 continuation, session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). Brief 6458849517. The maintainer accepted the seat's letter on four records and took ADR-0050 for their own ruling on a separate card. The four status lines below land in one docs/adr/** PR opened by this seat (Tier H, the maintainer approves); the keyword is the first word after **Status**: as scripts/adr-index.mjs reads it; ADR-0050's line is untouched in that PR.
ADR-0038 build-verification-loop → Accepted. L1 graph lint and L4 verify_build live in cloud service-ai-studio (verify/graph-lint.ts, plugin.ts:1061), L3 runtime probes in the framework (metadata-protocol/src/build-probes.ts, RuntimeBuildIssue, probe report in protocol.zod.ts:1578), L5 golden-prompt evals (eval-golden-prompts.yml, ai_eval_runs). Pending on the line: L2 renderability contract (dataset compile only).
ADR-0046 package-docs-as-metadata → Accepted. P1 (DocSchema, collect-docs.ts, kernel doc), P2 (console portal, help menu, Studio doc editor), P3a/P3b (BookSchema, GET /meta/book/:name/tree, §6.7 audience gate in meta-item-read-gate.ts) implemented. Pending: P3c (Studio drag-edit, anonymous apps/docs library) and P3d (taxonomy, book search, tags).
ADR-0051 inline-metadata-views-in-docs → Accepted. P1–P3 implemented: the metadata fence lifts to element:metadata_viewer (plugin-markdown/src/MarkdownImpl.tsx:120), the viewer renders state_machine / flow / permission (metadata-viewer.tsx:177/:378/:450), publish lint with liveness checks (collect-docs.ts lintMetadataEmbeds). The old "no runtime rendering" sentence leaves the line; object embeds and the general objectui fence stay deferred.
ADR-0052 audit-is-not-the-activity-feed → Accepted, narrowed. §5b (trackHistory + milestone templates, object.zod.ts:2868), P0b (sys_attachment, sys_notification no longer registered by plugin-audit — audit-plugin.ts:274), P1 (sys_comment canonical, reactions, service-feed retired) implemented. Pending on the line: P2 domain event spine — audit-writers.ts:254 still dual-writes sys_audit_log and sys_activity; sys_activity / sys_comment still live in plugin-audit.
Execution: this seat opens the status-line PR now (four lines + regenerated docs/adr/README.md, skip-changeset, node scripts/adr-index.mjs --check green), requests the maintainer's review through the relay, and records the merge here. Batch 3 (ADR-0063 · 0064 · 0071 · 0072 · 0073) follows when the maintainer next summons. Ruling-ref: names this comment. Clause-②: no, Metadata-protocol: none.
Director seat, summon #51 continuation (ledger objectstack#12708). Batch 3 of the four the #26076 ruling A ordered: ADR-0063 · ADR-0064 · ADR-0071 · ADR-0072 · ADR-0073, presented to the maintainer in batch #418 with PR #26503's readings (rows 11–15) re-read on origin/main3230bdbf76 (objectstack) and ce2ed26 (cloud). Letters as before: A Accepted (status line names what is pending), B Deferred, C Withdrawn, D Superseded. Batch 2's docs PR #27034 is approved and in the merge queue; its contract-review corrections are held as a follow-up commit.
ADR-0063 two kernel agents: skill.surface enum in packages/spec/src/ai/skill.zod.ts:327; the agent type is allowRuntimeCreate: false (metadata-plugin.zod.ts:1330, tenant agents withdrawn); cloud service-ai has ASK_AGENT_NAME = 'ask' with data_chat and metadata_assistant → build aliases (agents/agent-aliases.ts), the platform-ownership gate on the runtime catalog (agent-runtime.ts:566/:633) and decline-and-redirect to the Builder (:354); objectui binds the surface (AiChatPage.tsx). Seat letter A.
ADR-0064 tool scoping: tools resolve as the union of surface-compatible skills' tools, legacy agent.tools[] fall-through removed (agent-runtime.ts:827/:865); incompatible affinity is a load error (:990–1001, §3); schema_reader is the surface:'both' read-only skill (§2); no new schema. Seat letter A.
ADR-0071 multi-hop joins: the record's own header already says "implemented & live — header pending formal update"; dataset.zod.ts:590–604 enforces the 3-hop to-one cap citing the ADR, dataset-compiler.ts and both strategies cite it, and the Studio include-path editor exists (DatasetDefaultInspector.tsx, useDatasetFields.ts, P2). Seat letter A.
ADR-0072 reference scope: Slice 0/1 shipped (flow scope resolution, picker, scope-aware validation — FlowReferenceField.tsx:559, flow-node-refs.ts, flow-expr-problems.ts); Slice 2 object-output drilling is in (resolveObjectName from config.objectName, FlowReferenceField.tsx:369); Slice 3 lazy tree, Slice 4 guided fetch, Slice 5 beyond flow and D6 outputSchema.objectName (not in flow.zod.ts) are pending. Seat letter A narrowed.
Ruling: batch #418 · ADR batch 3 of 4 · 0063 A · 0064 A · 0071 A · 0072 A (narrowed) · 0073 A (narrowed) · maintainer 「同意」 2026-10-28T03:40Z
Recorded by the director seat (summon #51 continuation, session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). The maintainer answered batch #418 with 「同意」 — every seat letter. Brief 6460032147. The five status lines below land in one docs/adr/** PR opened by this seat together with the batch 2 contract-review corrections (ADR-0038 L5 wording, ADR-0046 §5 wording, ADR-0052 §6 P0b paragraph) held since PR #27034 entered the merge queue; the PR opens right after #27034 merges (Tier H, the maintainer approves). The keyword is the first word after **Status**: as scripts/adr-index.mjs reads it.
ADR-0063 two-kernel-agents → Accepted. Framework: skill.surface enum (packages/spec/src/ai/skill.zod.ts:327), the agent type allowRuntimeCreate: false (metadata-plugin.zod.ts:1330, tenant agents withdrawn). Cloud service-ai: ask canonical with data_chat and metadata_assistant → build aliases (agents/agent-aliases.ts), the platform-ownership gate on the runtime catalog (agent-runtime.ts:566/:633), decline-and-redirect to the Builder (:354); objectui binds the surface. Nothing pending on the line.
ADR-0064 tool-scoping-to-agent → Accepted. Tools resolve as the union of surface-compatible skills' tools with the legacy agent.tools[] fall-through removed (agent-runtime.ts:827/:865); incompatible affinity is a load error (:990–1001); schema_reader is the surface:'both' read-only skill; no new schema. Nothing pending.
ADR-0071 dataset-semantic-layer-depth → Accepted. Multi-hop to-one joins with the 3-hop cap (dataset.zod.ts:590–604), compiler and both strategies, plus the Studio include-path editor (DatasetDefaultInspector.tsx, useDatasetFields.ts); the record's own "header pending formal update" is now done. Nothing pending.
ADR-0072 reference-scope-and-resolvability → Accepted, narrowed. Slice 0/1 (flow scope resolution, picker, scope-aware validation) and Slice 2 object-output drilling (FlowReferenceField.tsx:369resolveObjectName from config.objectName) implemented. Pending on the line: Slice 3 lazy reference tree, Slice 4 guided fetch (D4), Slice 5 beyond flow, D6 outputSchema.objectName; the three open questions stay.
Execution: the five lines are edited now on the seat's held branch (gates green locally); the PR follows #27034's merge. Batch 4 (ADR-0077 · 0080 · 0096 · 0025, the last) follows when the maintainer next summons. Ruling-ref: names this comment. Clause-②: no, Metadata-protocol: none.
ADR batch 2 landed · director seat · 2026-10-28T04:35Z
PR #27034 merged 2026-10-28T04:31Z by the maintainer's approval through the merge queue (main cd609a4979): ADR-0038, 0046, 0051, 0052 → Accepted per ruling 6458958232; docs/adr/README.md Accepted 112 → 116, Proposed 18 → 14. ADR-0050 waits on the maintainer's own ruling on #27032.
Contract review 6459576746 on that PR returned one verified must-fix (ADR-0038's line overstated L5) and two should-fixes; the corrections could not be pushed while the PR sat in the merge queue, so they ride PR #27081 together with ADR batch 3's five lines (ruling 6460071100): head a7fa8a05b8, two commits (e75c243a3d corrections, a7fa8a05b8 batch 3), README Accepted 116 → 121, Proposed 14 → 9, gates green; review requested from hotlong + os-zhuang through the relay. Batch 4 (ADR-0077 · 0080 · 0096 · 0025) follows at the next summon.
Director seat, summon #51 continuation (ledger objectstack#12708). Batch 4 of 4 under #26076 ruling A: ADR-0077 · ADR-0080 · ADR-0096 · ADR-0025, presented to the maintainer in batch #420 with PR #26503's readings (rows 16–19) re-read on origin/maincd609a4979. Letters as before: A Accepted (status line names what is pending), B Deferred, C Withdrawn, D Superseded. PR #27081 (batch 3 lines + batch 2 corrections) is open and awaits the maintainer's approval; this batch's lines land in a final docs PR.
ADR-0077 authoring-surface boundary: the intent → surface routing model and the record-before non-goal are cited by packages/spec/src/data/object.zod.ts and objectql/src/find-hook-result-shape.ts; the v1 code — the two os build lints flow-record-before-cannot-mutate / -cannot-veto — is not in packages/lint/src/lint-flow-patterns.ts (rule list read), and no hook-body "requires-human-review" flag exists. Seat letter A narrowed (the model stands; v1's lints and the §3 review flag pending), or B if the maintainer does not want the lints scheduled.
ADR-0080 AI-authored UI JSX source: @objectstack/sdui-parser (parse ≠ execute, codegen, public tier) shipped and is consumed by metadata-protocol, lint and objectui components; the page kind was renamed jsx → html by ADR-0081 (which "builds on" this record) and the jsx value retired at 18 (spec(conversions): eight ADR-0087 D2 conversions stay on the 18 load path after #23487 — five families each need a ruling before they can retire #23543); the save door compiles html source and derives requires (COMPILED_PAGE_KINDS, page.zod.ts:1181, "ADR-0080 §5"); amendment 2026-09-01 on the type attribute. Pending: registry-manifest prop/binding validation depth (Tier A inputs), binding-against-object-schema check; the deferred list stays. Seat letter A narrowed.
ADR-0096 execution-surface identity admission: D5's fail-closed posture is live — the principal-less hand-off "ADR-0096 D5 replaced with a refusal" (runtime/src/http-dispatcher.ts:1399/:1763); the D4 admission matrix exists (packages/qa/dogfood/test/authz-conformance.matrix.ts); the E2 exploitables were fixed on their own cards. Pending: D2 systemContext(reason) / SystemGrant (not in execution-context.zod.ts or data-engine.zod.ts), D3 identity-required signatures, D6 action-level runAs. Seat letter A narrowed.
ADR-0025 line landed · director seat · 2026-10-28T06:58Z
PR #27118 (ADR-0025 v2, ruling 6461953053) merged 2026-10-28T06:56Z (main 07d18e6927): status line Accepted (narrowed to Phase 1 + consent; M1–M3 on #27108). docs/adr/README.md Accepted 125, Proposed 5. Of the 19 records under #26076 ruling A, 18 are ruled and landed; the one left is ADR-0050, the maintainer's own ruling on #27032. This card's Done-when closes with that one.
Pointer · ADR-0050 ruled · director seat (summon #53, session_01QSeKYo7qYsX6HsAneHBMP2) · 2026-10-28T08:37Z · ⛔ not a claim
The record the maintainer set aside from batch #417 is ruled: #27032 → A′ (ruling 6464210455, maintainer 「其他同意」 2026-10-28): ADR-0050 Accepted, the cutover lands now as a (narrowing) minor (this repository has no spec-major window, AGENTS.md L1084–1090). Cutover cards: spec #27155, ui #27159 (Blocked-by: #27155).
For this card's closeout docs PR (Tier H): the ADR-0050 status line becomes **Status**: Accepted (2026-10-28, letter A′ on #27032, ruling record 6464210455) — cutover card #27155 (spec) + #27159 (renderer); the 2026-10-20 amendment stands and docs/adr/README.md moves the row from Proposed to Accepted. #27032 closes completed in this act, so the #26076 closeout no longer waits on it.
State: pm:awaiting-maintainer → pm:queue. Nothing on this card waits on the maintainer any more. All 19 records are ruled, and ADR-0050 was ruled A′ on #27032 (2026-10-28). One thing is left: on origin/main, docs/adr/0050-form-layout-vs-presentation.md still reads **Status**: Proposed, and docs/adr/README.md still lists it under Proposed (5). The closeout docs PR (Tier H, wording in the 2026-10-28 08:37Z pointer) is lane work.
Claim: PM loop round 3 · 2026-11-06T15:16Z
Session: session_01L9qibzzqHZdAVqgBAvxXKB
Account: os-tesla (the card's assignee)
Branch: claude/project-thread-uz8dqb (the card thread's designated branch; dev session session_01L9qibw3DoQ7bgioFtvcrw7)
Worktree: objectstack-issue-26553
Domain: domain:spec
Seat: domain:spec#1
File surface: docs/adr/0050-form-layout-vs-presentation.md (status line :3 only), docs/adr/README.md (regenerated by pnpm adr:index, never hand-edited), a changeset only if the gate demands one. ⛔ any other ADR body text (stop on breach)
Container & model: XS, mode:thread, model: CONTRACT_REVIEW_TIER (dispatch-gates --tier: MANDATORY from docs/adr/**, no one-line exemption), effort: xhigh (the docs/adr/** floor)
Clause-②: no
Metadata-protocol: none
Responsibility: the ADR index on origin/main still lists ADR-0050 as Proposed although the maintainer ruled it A′ on #27032 (ruling record 6464210455) and both cutover cards (#27155, #27159) closed completed. Every reader of docs/adr/README.md and every card cut from ADR-0050 reads a stale state today. The fix is the status line plus the regenerated index.
Thread-read: 6687826083
Premise: holds. On origin/main1aeeafd9, :3 reads **Status**: Proposed (2026-06-15) · **Amended** (2026-10-20, …) and the README counts Proposed 5.
Serial constraints cleared: none (no open PR names #26553 or ADR-0050)
Tier H (docs/adr/**): the seat reviews the PR, then hands it to os-zhuang. It stays draft until then.
domain:spec#1 · os-tesla · session_01L9qibw3DoQ7bgioFtvcrw7
os-dev-report
Posted 2026-11-06T15:38Z · dev session session_01L9qibw3DoQ7bgioFtvcrw7 · head ac20488
{
"issue": 26553,
"status": "done",
"branch": "claude/project-thread-uz8dqb",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30986",
"session": "session_01L9qibw3DoQ7bgioFtvcrw7",
"premise_still_valid": true,
"summary": "Closeout docs PR for ADR-0050, the last of the 19 records under this card. On origin/main 1aeeafd9 the record's line 3 still read Proposed (2026-06-15) with the 2026-10-20 amendment, and docs/adr/README.md counted Proposed 5 / Accepted 130, so the premise holds. Line 3 now opens with the ruled sentence verbatim from pointer 6464456446 (Accepted, letter A-prime on #27032, ruling record 6464210455, cutover cards #27155 and #27159, the 2026-10-20 amendment stands) and KEEPS the existing amendment text and its two links (#24692, ruling record 6281834942) after it, because the ruled sentence says the amendment stands and those links are the only trace of where it was decided. A case-insensitive grep for 'proposed' hit line 3 alone before the edit and nothing after it. docs/adr/README.md was regenerated by node scripts/adr-index.mjs, never hand-edited: the row moves to Accepted with date 2026-10-28, counts Accepted 131 / Proposed 4; adr-index --check exit 0. Draft PR #30986 opened through the relay (run 42244571901, body 6893 bytes stored byte-identical) with Fixes #26553 and the skip-changeset label; Tier H by path, left for the seat's review and the approver's hand.",
"tests": "node scripts/adr-index.mjs (wrote docs/adr/README.md, 237 lines) then node scripts/adr-index.mjs --check exit 0: 'adr-index: OK — docs/adr/README.md is current and every record parsed'. The status-line edit ran as a script asserting exactly one hit of the old line at line 3 and one hit of the new line afterwards (old hits 0, new hits 1). git diff --shortstat origin/main...HEAD: 2 files, +4/-4. No ablation: no tested behaviour changed (docs only).",
"gates": "Derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack on head ac204886 (2 paths vs merge-base 1aeeafd9; changed lines 8, under the 3000 threshold): 21 commands, each run in the foreground with stdin closed, exit code landed on disk before any pipe, all 21 exit 0 — check-adr-links (+self-test), check-closing-keyword-parity (+self-test), check-comment-mask-corpus, ci/plan-test-core-shards --self-test, lint check:doc-formula-expressions (lint closure built first under os-verify-lock.sh, VERDICT command-exit 0, 96 s held), check:adr-anchors, check:adr-index, check:adr-symbol-anchors, check:ci-filter-parity, check:closed-ceremony-text, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:pm-governed-merges, check:pm-prior-rulings, check:refd-timer-probe, check:watch-hint-literal. Reconciliation dispatch-gates --ran: '21 derived famil(ies) accounted for — 21 run, 0 NOT-MEASURED'. dispatch-gates --tier: CONTRACT_REVIEW_TIER mandatory from docs/adr/**, effort floor xhigh (this run is on that tier). check-governed-merges.mjs --test: both paths governed (Tier H). PR check-runs: in_progress at report time, read by the seat on the PR.",
"line_budget": "n/a — docs/adr/** carries no line ratchet; diff is +4/-4 (8 changed lines, generated README included), under the 3000-line human-merge threshold.",
"files_changed": ["docs/adr/0050-form-layout-vs-presentation.md (line 3 only)", "docs/adr/README.md (regenerated by pnpm adr:index: summary counts lines 20–21, ADR-0050 row line 123)"],
"neighbours": "Open PRs touching docs/adr/ on their heads vs merge-base with origin/main 1aeeafd9: #30828 (ADR-0142), #30862 (ADR-0125), #30899 (ADR-0146), #30940 (ADR-0055). None touches docs/adr/README.md. The later lander merges main and re-runs pnpm adr:index if a status line moved.",
"changeset": "none, skip-changeset declared on the create: docs/adr/** ships in no released package (no files[] under packages/ names docs/adr). Read-back on PR #30986: labels size/xs + skip-changeset present, draft true, head ac204886, base moved to acd190b2 (mergeable_state blocked = checks pending). Clause-②: no. Metadata-protocol: none.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "5 reads, 0 writes — issue_read get (1), issue_read get_comments (2), list_pull_requests (1), pull_request_read get (1, the PR read-back). No MCP write tool was called; the harness's assignee/reviewer step was skipped on purpose (the frame forbids MCP writes; pr_create carries no assignee, the seat sets it at hand-over).",
"api_writes": "0 REST proxy writes by this session. Relay: 1 fleet-write stroke (pr_create, request fw-20261106T153606Z-137441, run 42244571901, conclusion success, read-back identical). git: 1 push to claude/project-thread-uz8dqb (ac204886).",
"deviations": [
"The checkout is shallow; the clone was deepened by 400 commits (git fetch --deepen) so the six open PRs without a merge-base could be read for the neighbour check. Declared, no other effect.",
"The dev session is subscribed to the PR's activity events for CI wakes only; no polling, no sleep, report delivered before CI converged (check-runs in_progress).",
"Worktree objectstack-issue-26553 is kept until the PR's CI is read, so a main-caused red or a BEHIND state can be answered; it is removed after that."
],
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": []
}
Finding recorded, not filed · domain:spec#1 · 2026-11-06T16:11Z · ⛔ not a claim
Contract review 6688923854 on PR #30986 raised one should-fix outside that PR's file surface. In docs/adr/0050-form-layout-vs-presentation.md, Migration (:51) and Consequences / Sequencing (:59–60) still call the cutover "spec-major". Ruling A′ (6464210455) shipped it as a (narrowing) minor, @objectstack/spec 18.3.0, because this repo has no spec-major window (AGENTS.md). The status line now cites the ruling record, so the fact can be reached from the record.
Filing gate: not filed as its own card. docs/adr/** is not a shipped surface, and no PR or seat is editing ADR-0050 now, so it has no hands-on reader. The next PR that touches ADR-0050 carries a one-line dated note under Migration, in the shape of the 2026-10-20 note under Decision 2. This comment is the record.
merged 2026-11-06T17:11:10Z by the maintainer through the queue (os-zhuang ready + enqueue = the Tier H record), merge commit 0b157306e361b971e64357ea8257984fb47d0d0d, final head ac204886
origin/main
contains the merge commit (git merge-base --is-ancestor)
State: card closed as completed by Fixes #26553. In this stroke pm:dispatched was removed from the card and pm:awaiting-merge from the PR. All 19 records under #26076 ruling A are now landed. The one ADR-0050 body should-fix is recorded in 6689516087.
Activity
objectstack-fleet commentedon Oct 27, 2026
Brief-claimed-by: session_01KrKXQVvgYk2AJ4VkqMobyb · batch #410 · 2026-10-27T08:04Z
Director seat, summon #51 continuation (ledger objectstack#12708). Batch 1 of the four the #26076 ruling A ordered: ADR-0010 (metadata-protection-model) · ADR-0019 (app-as-consumer-unit) · ADR-0022 · ADR-0026 · ADR-0027, presented to the maintainer in batch #410 with PR #26503's implementation readings re-read on
origin/mainf48aa451. Each record takes one of four letters: A Accepted (status line states what landed and what is pending) · B Deferred (kept as a proposal, no work planned) · C Withdrawn · D Superseded by a named record. The ruling is recorded on this card; the five status lines land in onedocs/adr/**PR (Tier H, the maintainer approves). Seat readings beyond the PR's counts:packages/spec/src/shared/protection.zod.ts("Package-level metadata protection, ADR-0010 §3.7 — Phase 4.3"),allowEnvironmentOverlayonmetadata-plugin.zod.ts:300(ADR-0131 C5/D6), readers inmetadata-manager.ts,registry.ts,plugin.ts. Seat letter A.0019-approval-as-flow-node("process orchestration is a Flow (ADR-0019)"); no source names the app-unit record itself; the Console's marketplace and install surfaces are the test, not re-measured here. Seat letter A with the status line narrowed to what the Console does today, or B if the maintainer reads the marketplace as still package-shaped — the seat leans A (the ADR's D1/D2 describe the shipped Console).GET /automation/connectorsserves connector descriptors (ADR-0022,automation.ts:2521),service-messagingandconnector-slackboth exist; the §3 shared-transport wiring is the pending half the status line already names. Seat letter A (pending half stays on the line).packages/andui/; and the maintainer ruled on app-shell: a published library that is 66% Console product surface — retire the 67 zero-reference exports now, decide the split, and fold the second i18n table into @object-ui/i18n #25922 (6431234244) that the customisable console has no business demand for now. Seat letter B (Deferred — 「暂时」, not Withdrawn; re-proposable when a third-party UI plugin is wanted).meta-item-history-routes.ts:548,meta.ts:1238cite ADR-0027 (E)(5)); the@objectstack/metadata-authoringpackage it names does not exist (ls packages | grep authoring→ none) and promotion Dev → Staging → Prod is not built. Seat letter A narrowed (accept the draft/publish half as implemented, state the promotion half as not built), else B.Prior rulings read: [Decision] docs/adr: 143 ADRs with no index, four numbers used twice, 19 Proposed older than three months, three status-line spellings — how the registry gets put in order #26076 A (6417460375); PR docs(adr): generated README index, one status-line spelling, shared numbers cited by stem #26503 rows 1–5; ADR-0131 C5 (0010), app-shell: a published library that is 66% Console product surface — retire the 67 zero-reference exports now, decide the split, and fold the second i18n table into @object-ui/i18n #25922 Q1 B (0026); thread: none.
objectstack-fleet commentedon Oct 27, 2026
Ruling: batch #410 · ADR batch 1 of 4 · 0010 A · 0019 A · 0022 A · 0026 B · 0027 A (narrowed) · maintainer 「同意」 2026-10-27T10:03Z
Recorded by the director seat (summon #51 continuation,
session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). The maintainer answered batch #410 with 「同意」 — every seat letter. Brief 6436780170. The five status lines below land in onedocs/adr/**PR opened by this seat (Tier H, the maintainer approves); the keyword is the first word after**Status**:asscripts/adr-index.mjsreads it.packages/spec/src/shared/protection.zod.ts"ADR-0010 §3.7 Phase 4.3";allowEnvironmentOverlay, ADR-0131 C5/D6; readers in metadata-manager, registry, plugin). Status line: Accepted — Phases 1, 4 and 4.3 implemented; Phase 2 (L4 frozen paths + provenance), Phase 3 (L2 + RBAC unlock) and Phase 5 (solution stack) pending; the spec lane re-reads Phases 2–3 on the PR and corrects the line if they landed.CONSUMER_INSTALLABLE_TYPES/isConsumerInstallableand theMarketplaceListingSchema.packageTypenarrowing are in spec; pending: the Console marketplace fillingpackageTypefrom the manifest, and HotCRM folded to one App (D3/D4). The 90 bare-number citations mostly name the twin0019-approval-as-flow-node.GET /automation/connectors,service-messaging,connector-slack); §3 shared transport (the Slack channel delegating to the Slack connector) stays pending on the line.packages/orui/; the maintainer ruled on app-shell: a published library that is 66% Console product surface — retire the 67 zero-reference exports now, decide the split, and fold the second i18n table into @object-ui/i18n #25922 (6431234244) that a customisable console has no business demand for now. Restart condition on the line: a third-party UI plugin is wanted (bundled in an App, or operator-provisioned). Not Withdrawn — the maintainer's word was 「暂时」.meta-item-history-routes.ts:548,meta.ts:1238cite (E)(5)), not as the@objectstack/metadata-authoringpackage the record names (no such package exists); M3 promotion + approval gates, M4 advanced migration and the rollback executor are not built.Execution: this seat opens the status-line PR now (five lines,
skip-changeset,node scripts/adr-index.mjs --checkgreen), requests the maintainer's review, and records the merge here. Batch 2 (ADR-0038 · 0046 · 0050 · 0051 · 0052) follows when the maintainer next summons.Ruling-ref:names this comment.Clause-②: no,Metadata-protocol: none.objectstack-fleet commentedon Oct 27, 2026
ADR batch 1 landed · director seat · 2026-10-27T10:29Z
PR #26607 merged 2026-10-27T10:29Z by the maintainer's own strokes (
os-zhuang: APPROVED, ready, auto-merge, queue). The five status lines of ruling 6438940264 are onmain: ADR-0010, 0019, 0022, 0027 Accepted (0019 and 0027 narrowed to what landed), ADR-0026 Deferred with its restart condition;docs/adr/README.mdregenerated (Proposed 22 → 17). Batch 2 (ADR-0038 · 0046 · 0050 · 0051 · 0052) is presented at the maintainer's next summon. ⛔ Not a claim.objectstack-fleet commentedon Oct 28, 2026
Brief-claimed-by: session_01KrKXQVvgYk2AJ4VkqMobyb · batch #417 · 2026-10-28T02:16Z
Director seat, summon #51 continuation (ledger objectstack#12708). Batch 2 of the four the #26076 ruling A ordered: ADR-0038 · ADR-0046 · ADR-0050 · ADR-0051 · ADR-0052, presented to the maintainer in batch #417 with PR #26503's readings (rows 6–10) re-read on
origin/main5e99bd936c(objectstack) andce05c91(cloud). Letters as in batch 1: A Accepted (status line names what is pending), B Deferred (restart condition on the line), C Withdrawn, D Superseded.verify_buildlive in cloudservice-ai-studio(verify/graph-lint.ts,plugin.ts:1061), L3 probes in framework (metadata-protocol/src/build-probes.ts,protocol.zod.ts:1578), L5eval-golden-prompts.yml+ai_eval_runs; L2 renderability contract is the pending half (dataset compile only). Seat letter A.DocSchema,collect-docs.ts, kerneldoc), P2 (console portal, help menu, StudioDocPreview), P3a/P3b (BookSchema,GET /meta/book/:name/tree, §6.7 audience gate inmeta-item-read-gate.ts) are in; P3c Studio drag-edit / anonymous library and P3d tags remain. Seat letter A.ModalForm.tsx:950,AppContent.tsx:1513, [P1] Finish ADR-0021 analytics migration (chart view / dashboard+Studio / report) #1890); the decision itself —FormView.typenarrowed tosimple|tabbed|wizard— is not:view.zod.ts:4546still listssplit,drawer,modal, andObjectFormstill branches toSplitForm/DrawerForm. Seat letter A narrowed (the spec-major narrowing stays pending on the line), or B if the maintainer does not want that cutover scheduled.ui/packages/components/src/renderers/basic/metadata-viewer.tsx: state_machine :177, flow :378, permission :450) and the markdown fence lift is inMarkdownImpl.tsx:120; P1–P3 landed, the deferred list stays deferred. Seat letter A.trackHistory+ milestonesobject.zod.ts:2868), P0b (sys_attachmentandsys_notificationno longer registered by plugin-audit —audit-plugin.ts:274listsSysAuditLog, SysActivity, SysComment, SysCommentReaction), P1 (sys_commentcanonical,service-feedgone, reactions, ChatterPanel) are in; P2 event spine is not —audit-writers.ts:254still dual-writessys_audit_logandsys_activity, both objects still live in plugin-audit. Seat letter A narrowed.Prior rulings read: [Decision] docs/adr: 143 ADRs with no index, four numbers used twice, 19 Proposed older than three months, three status-line spellings — how the registry gets put in order #26076 A (6417460375); PR docs(adr): generated README index, one status-line spelling, shared numbers cited by stem #26503 rows 6–10; batch 1 ruling 6438940264; [Decision] A list view's
addRecorddefaults (enabled true, position bottom, mode inline) are not what the renderer does: enforce the spec, or make the spec say what renders (objectui#13099) #24692 B′ (0050 amendment, 6281834942); app-shell: a published library that is 66% Console product surface — retire the 67 zero-reference exports now, decide the split, and fold the second i18n table into @object-ui/i18n #25922 Q1 B; thread: none.objectstack-fleet commentedon Oct 28, 2026
Ruling: batch #417 · ADR batch 2 of 4 · 0038 A · 0046 A · 0051 A · 0052 A (narrowed) · 0050 set aside → #27032 · maintainer 「ADR-0050 表单布局 vs 呈现,单独立卡交维护者处理,其他同意」 2026-10-28T02:24Z
Recorded by the director seat (summon #51 continuation,
session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). Brief 6458849517. The maintainer accepted the seat's letter on four records and took ADR-0050 for their own ruling on a separate card. The four status lines below land in onedocs/adr/**PR opened by this seat (Tier H, the maintainer approves); the keyword is the first word after**Status**:asscripts/adr-index.mjsreads it; ADR-0050's line is untouched in that PR.verify_buildlive in cloudservice-ai-studio(verify/graph-lint.ts,plugin.ts:1061), L3 runtime probes in the framework (metadata-protocol/src/build-probes.ts,RuntimeBuildIssue, probe report inprotocol.zod.ts:1578), L5 golden-prompt evals (eval-golden-prompts.yml,ai_eval_runs). Pending on the line: L2 renderability contract (dataset compile only).DocSchema,collect-docs.ts, kerneldoc), P2 (console portal, help menu, Studio doc editor), P3a/P3b (BookSchema,GET /meta/book/:name/tree, §6.7 audience gate inmeta-item-read-gate.ts) implemented. Pending: P3c (Studio drag-edit, anonymousapps/docslibrary) and P3d (taxonomy, book search, tags).FormView.typeto layout only, defer it, or withdraw the record (set aside from ADR batch 2 on #26553) #27032 (needs-user-decision+pm:awaiting-maintainer, as [Decision] Where the shared Company Core ontology lives: an app package in the objectstack monorepo, its own repository, platform-objects sys_* objects, or no shared core? #26582). Not presented again by this seat. Its status line stays Proposed (amended 2026-10-20) until that ruling.metadatafence lifts toelement:metadata_viewer(plugin-markdown/src/MarkdownImpl.tsx:120), the viewer rendersstate_machine/flow/permission(metadata-viewer.tsx:177/:378/:450), publish lint with liveness checks (collect-docs.ts lintMetadataEmbeds). The old "no runtime rendering" sentence leaves the line;objectembeds and the generalobjectuifence stay deferred.trackHistory+ milestone templates,object.zod.ts:2868), P0b (sys_attachment,sys_notificationno longer registered by plugin-audit —audit-plugin.ts:274), P1 (sys_commentcanonical, reactions,service-feedretired) implemented. Pending on the line: P2 domain event spine —audit-writers.ts:254still dual-writessys_audit_logandsys_activity;sys_activity/sys_commentstill live in plugin-audit.Execution: this seat opens the status-line PR now (four lines + regenerated
docs/adr/README.md,skip-changeset,node scripts/adr-index.mjs --checkgreen), requests the maintainer's review through the relay, and records the merge here. Batch 3 (ADR-0063 · 0064 · 0071 · 0072 · 0073) follows when the maintainer next summons.Ruling-ref:names this comment.Clause-②: no,Metadata-protocol: none.docs(adr): ADR batch 2 of the stale Proposed records — 0038, 0046, 00…
objectstack-fleet commentedon Oct 28, 2026
Brief-claimed-by: session_01KrKXQVvgYk2AJ4VkqMobyb · batch #418 · 2026-10-28T03:37Z
Director seat, summon #51 continuation (ledger objectstack#12708). Batch 3 of the four the #26076 ruling A ordered: ADR-0063 · ADR-0064 · ADR-0071 · ADR-0072 · ADR-0073, presented to the maintainer in batch #418 with PR #26503's readings (rows 11–15) re-read on
origin/main3230bdbf76(objectstack) andce2ed26(cloud). Letters as before: A Accepted (status line names what is pending), B Deferred, C Withdrawn, D Superseded. Batch 2's docs PR #27034 is approved and in the merge queue; its contract-review corrections are held as a follow-up commit.skill.surfaceenum inpackages/spec/src/ai/skill.zod.ts:327; theagenttype isallowRuntimeCreate: false(metadata-plugin.zod.ts:1330, tenant agents withdrawn); cloudservice-aihasASK_AGENT_NAME = 'ask'withdata_chatandmetadata_assistant → buildaliases (agents/agent-aliases.ts), the platform-ownership gate on the runtime catalog (agent-runtime.ts:566/:633) and decline-and-redirect to the Builder (:354); objectui binds the surface (AiChatPage.tsx). Seat letter A.agent.tools[]fall-through removed (agent-runtime.ts:827/:865); incompatible affinity is a load error (:990–1001, §3);schema_readeris thesurface:'both'read-only skill (§2); no new schema. Seat letter A.dataset.zod.ts:590–604enforces the 3-hop to-one cap citing the ADR,dataset-compiler.tsand both strategies cite it, and the Studio include-path editor exists (DatasetDefaultInspector.tsx,useDatasetFields.ts, P2). Seat letter A.FlowReferenceField.tsx:559,flow-node-refs.ts,flow-expr-problems.ts); Slice 2 object-output drilling is in (resolveObjectNamefromconfig.objectName,FlowReferenceField.tsx:369); Slice 3 lazy tree, Slice 4 guided fetch, Slice 5 beyond flow and D6outputSchema.objectName(not inflow.zod.ts) are pending. Seat letter A narrowed.lint-flow-patterns.tsflow-runas-unscoped) and the two amendments (The #1888 user-less fail-open is wider than the lint that guards it — record-change flows fired by a system write run UNSCOPED, unlinted #3760 refusalUnscopedRunDataAccessError; Security: a runAs system flow writes identity-assignment rows (sys_user_position, sys_invitation) past the delegated-administration gate #25251 identity-assignment carve-out); M2 (theautomationprincipal,runAs:'automation') is not built by design —execution.zod.ts:419stillz.enum(['system','user']), no automation role — gated on the first real consumer. Seat letter A narrowed.Prior rulings read: [Decision] docs/adr: 143 ADRs with no index, four numbers used twice, 19 Proposed older than three months, three status-line spellings — how the registry gets put in order #26076 A (6417460375); PR docs(adr): generated README index, one status-line spelling, shared numbers cited by stem #26503 rows 11–15; batch 1 ruling 6438940264, batch 2 ruling 6458958232; Security: a runAs system flow writes identity-assignment rows (sys_user_position, sys_invitation) past the delegated-administration gate #25251 B (6354966423, 0073 amendment); thread: none.
objectstack-fleet commentedon Oct 28, 2026
Ruling: batch #418 · ADR batch 3 of 4 · 0063 A · 0064 A · 0071 A · 0072 A (narrowed) · 0073 A (narrowed) · maintainer 「同意」 2026-10-28T03:40Z
Recorded by the director seat (summon #51 continuation,
session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). The maintainer answered batch #418 with 「同意」 — every seat letter. Brief 6460032147. The five status lines below land in onedocs/adr/**PR opened by this seat together with the batch 2 contract-review corrections (ADR-0038 L5 wording, ADR-0046 §5 wording, ADR-0052 §6 P0b paragraph) held since PR #27034 entered the merge queue; the PR opens right after #27034 merges (Tier H, the maintainer approves). The keyword is the first word after**Status**:asscripts/adr-index.mjsreads it.skill.surfaceenum (packages/spec/src/ai/skill.zod.ts:327), theagenttypeallowRuntimeCreate: false(metadata-plugin.zod.ts:1330, tenant agents withdrawn). Cloudservice-ai:askcanonical withdata_chatandmetadata_assistant → buildaliases (agents/agent-aliases.ts), the platform-ownership gate on the runtime catalog (agent-runtime.ts:566/:633), decline-and-redirect to the Builder (:354); objectui binds the surface. Nothing pending on the line.agent.tools[]fall-through removed (agent-runtime.ts:827/:865); incompatible affinity is a load error (:990–1001);schema_readeris thesurface:'both'read-only skill; no new schema. Nothing pending.dataset.zod.ts:590–604), compiler and both strategies, plus the Studio include-path editor (DatasetDefaultInspector.tsx,useDatasetFields.ts); the record's own "header pending formal update" is now done. Nothing pending.FlowReferenceField.tsx:369resolveObjectNamefromconfig.objectName) implemented. Pending on the line: Slice 3 lazy reference tree, Slice 4 guided fetch (D4), Slice 5 beyond flow, D6outputSchema.objectName; the three open questions stay.lint-flow-patterns.tsflow-runas-unscoped), and the two amendments (The #1888 user-less fail-open is wider than the lint that guards it — record-change flows fired by a system write run UNSCOPED, unlinted #3760 refusalUnscopedRunDataAccessError; Security: a runAs system flow writes identity-assignment rows (sys_user_position, sys_invitation) past the delegated-administration gate #25251 identity-assignment carve-out). Pending on the line: M2 — theautomationprincipal andrunAs:'automation'(execution.zod.ts:419still['system','user']), gated on the first real consumer, not a date.Execution: the five lines are edited now on the seat's held branch (gates green locally); the PR follows #27034's merge. Batch 4 (ADR-0077 · 0080 · 0096 · 0025, the last) follows when the maintainer next summons.
Ruling-ref:names this comment.Clause-②: no,Metadata-protocol: none.objectstack-fleet commentedon Oct 28, 2026
ADR batch 2 landed · director seat · 2026-10-28T04:35Z
PR #27034 merged 2026-10-28T04:31Z by the maintainer's approval through the merge queue (main
cd609a4979): ADR-0038, 0046, 0051, 0052 → Accepted per ruling 6458958232;docs/adr/README.mdAccepted 112 → 116, Proposed 18 → 14. ADR-0050 waits on the maintainer's own ruling on #27032.Contract review 6459576746 on that PR returned one verified must-fix (ADR-0038's line overstated L5) and two should-fixes; the corrections could not be pushed while the PR sat in the merge queue, so they ride PR #27081 together with ADR batch 3's five lines (ruling 6460071100): head
a7fa8a05b8, two commits (e75c243a3dcorrections,a7fa8a05b8batch 3), README Accepted 116 → 121, Proposed 14 → 9, gates green; review requested fromhotlong+os-zhuangthrough the relay. Batch 4 (ADR-0077 · 0080 · 0096 · 0025) follows at the next summon.objectstack-fleet commentedon Oct 28, 2026
Brief-claimed-by: session_01KrKXQVvgYk2AJ4VkqMobyb · batch #420 · 2026-10-28T04:40Z
Director seat, summon #51 continuation (ledger objectstack#12708). Batch 4 of 4 under #26076 ruling A: ADR-0077 · ADR-0080 · ADR-0096 · ADR-0025, presented to the maintainer in batch #420 with PR #26503's readings (rows 16–19) re-read on
origin/maincd609a4979. Letters as before: A Accepted (status line names what is pending), B Deferred, C Withdrawn, D Superseded. PR #27081 (batch 3 lines + batch 2 corrections) is open and awaits the maintainer's approval; this batch's lines land in a final docs PR.record-beforenon-goal are cited bypackages/spec/src/data/object.zod.tsandobjectql/src/find-hook-result-shape.ts; the v1 code — the twoos buildlintsflow-record-before-cannot-mutate/-cannot-veto— is not inpackages/lint/src/lint-flow-patterns.ts(rule list read), and no hook-body "requires-human-review" flag exists. Seat letter A narrowed (the model stands; v1's lints and the §3 review flag pending), or B if the maintainer does not want the lints scheduled.@objectstack/sdui-parser(parse ≠ execute, codegen, public tier) shipped and is consumed bymetadata-protocol,lintand objectui components; the page kind was renamedjsx → htmlby ADR-0081 (which "builds on" this record) and thejsxvalue retired at 18 (spec(conversions): eight ADR-0087 D2 conversions stay on the 18 load path after #23487 — five families each need a ruling before they can retire #23543); the save door compileshtmlsource and derivesrequires(COMPILED_PAGE_KINDS,page.zod.ts:1181, "ADR-0080 §5"); amendment 2026-09-01 on thetypeattribute. Pending: registry-manifest prop/binding validation depth (Tier Ainputs), binding-against-object-schema check; the deferred list stays. Seat letter A narrowed.runtime/src/http-dispatcher.ts:1399/:1763); the D4 admission matrix exists (packages/qa/dogfood/test/authz-conformance.matrix.ts); the E2 exploitables were fixed on their own cards. Pending: D2systemContext(reason)/SystemGrant(not inexecution-context.zod.tsordata-engine.zod.ts), D3 identity-required signatures, D6 action-levelrunAs. Seat letter A narrowed..osplugin,os plugin build/sign/publishunderpackages/cli/src/commands/plugin/); install-time consent for package installs landed, and the consent → enforcer binding landed 2026-10-25 (runtime/src/security/artifact-granted-permissions.ts, option A phase 1, consumer ofEnvironmentArtifactSchema.grantedPermissions), so the line's "registered-only and enforces nothing" is stale in part. Pending: Phase 2 (os plugin install, the.ospluginloader,sys_plugin*registry — none exists), Phases 3–5. Seat letter A narrowed.Prior rulings read: [Decision] docs/adr: 143 ADRs with no index, four numbers used twice, 19 Proposed older than three months, three status-line spellings — how the registry gets put in order #26076 A (6417460375); PR docs(adr): generated README index, one status-line spelling, shared numbers cited by stem #26503 rows 16–19; batch rulings 6438940264 / 6458958232 / 6460071100; spec(conversions): eight ADR-0087 D2 conversions stay on the 18 load path after #23487 — five families each need a ruling before they can retire #23543 F5-jsx A (0080); ADR-0081 (0080); thread: none.
4 remaining items
objectstack-fleet commentedon Oct 28, 2026
ADR-0025 line landed · director seat · 2026-10-28T06:58Z
PR #27118 (ADR-0025 v2, ruling 6461953053) merged 2026-10-28T06:56Z (main
07d18e6927): status line Accepted (narrowed to Phase 1 + consent; M1–M3 on #27108).docs/adr/README.mdAccepted 125, Proposed 5. Of the 19 records under #26076 ruling A, 18 are ruled and landed; the one left is ADR-0050, the maintainer's own ruling on #27032. This card's Done-when closes with that one.objectstack-fleet commentedon Oct 28, 2026
Pointer · ADR-0050 ruled · director seat (summon #53,
session_01QSeKYo7qYsX6HsAneHBMP2) · 2026-10-28T08:37Z · ⛔ not a claimThe record the maintainer set aside from batch #417 is ruled: #27032 → A′ (ruling 6464210455, maintainer 「其他同意」 2026-10-28): ADR-0050 Accepted, the cutover lands now as a
(narrowing)minor (this repository has no spec-major window, AGENTS.md L1084–1090). Cutover cards: spec #27155, ui #27159 (Blocked-by: #27155).For this card's closeout docs PR (Tier H): the ADR-0050 status line becomes
**Status**: Accepted (2026-10-28, letter A′ on #27032, ruling record 6464210455) — cutover card #27155 (spec) + #27159 (renderer); the 2026-10-20 amendment standsanddocs/adr/README.mdmoves the row from Proposed to Accepted. #27032 closescompletedin this act, so the #26076 closeout no longer waits on it.objectstack-fleet commentedon Nov 6, 2026
coordinator#1 · hotlong · session_6eb9ec2e0e3f410b91239dab7a337b9e
2026-11-06T14:56Z
State:
pm:awaiting-maintainer→pm:queue. Nothing on this card waits on the maintainer any more. All 19 records are ruled, and ADR-0050 was ruled A′ on #27032 (2026-10-28). One thing is left: onorigin/main,docs/adr/0050-form-layout-vs-presentation.mdstill reads**Status**: Proposed, anddocs/adr/README.mdstill lists it under Proposed (5). The closeout docs PR (Tier H, wording in the 2026-10-28 08:37Z pointer) is lane work.🤖 Generated with Claude Code
objectstack-fleet commentedon Nov 6, 2026
domain:spec#1 · os-tesla · session_01L9qibzzqHZdAVqgBAvxXKB
Claim: PM loop round 3 · 2026-11-06T15:16Z
Session:
session_01L9qibzzqHZdAVqgBAvxXKBAccount:
os-tesla(the card's assignee)Branch:
claude/project-thread-uz8dqb(the card thread's designated branch; dev sessionsession_01L9qibw3DoQ7bgioFtvcrw7)Worktree:
objectstack-issue-26553Domain:
domain:specSeat:
domain:spec#1File surface:
docs/adr/0050-form-layout-vs-presentation.md(status line :3 only),docs/adr/README.md(regenerated bypnpm adr:index, never hand-edited), a changeset only if the gate demands one. ⛔ any other ADR body text (stop on breach)Container & model:
XS,mode:thread,model: CONTRACT_REVIEW_TIER(dispatch-gates --tier: MANDATORY fromdocs/adr/**, no one-line exemption),effort: xhigh(thedocs/adr/**floor)Clause-②: no
Metadata-protocol: none
Responsibility: the ADR index on
origin/mainstill lists ADR-0050 as Proposed although the maintainer ruled it A′ on #27032 (ruling record 6464210455) and both cutover cards (#27155, #27159) closed completed. Every reader ofdocs/adr/README.mdand every card cut from ADR-0050 reads a stale state today. The fix is the status line plus the regenerated index.Thread-read: 6687826083
Premise: holds. On
origin/main1aeeafd9, :3 reads**Status**: Proposed (2026-06-15) · **Amended** (2026-10-20, …)and the README counts Proposed 5.Serial constraints cleared:
none(no open PR names #26553 or ADR-0050)Tier H (
docs/adr/**): the seat reviews the PR, then hands it toos-zhuang. It stays draft until then.Order:
/mnt/project-files/spec-seat-1/r2026-11-06/dispatch-26553.md(frameFRAME.mdbeside it).objectstack-fleet commentedon Nov 6, 2026
domain:spec#1 · os-tesla · session_01L9qibw3DoQ7bgioFtvcrw7
os-dev-report
Posted 2026-11-06T15:38Z · dev session session_01L9qibw3DoQ7bgioFtvcrw7 · head ac20488
{ "issue": 26553, "status": "done", "branch": "claude/project-thread-uz8dqb", "pr": "https://github.com/objectstack-ai/objectstack/pull/30986", "session": "session_01L9qibw3DoQ7bgioFtvcrw7", "premise_still_valid": true, "summary": "Closeout docs PR for ADR-0050, the last of the 19 records under this card. On origin/main 1aeeafd9 the record's line 3 still read Proposed (2026-06-15) with the 2026-10-20 amendment, and docs/adr/README.md counted Proposed 5 / Accepted 130, so the premise holds. Line 3 now opens with the ruled sentence verbatim from pointer 6464456446 (Accepted, letter A-prime on #27032, ruling record 6464210455, cutover cards #27155 and #27159, the 2026-10-20 amendment stands) and KEEPS the existing amendment text and its two links (#24692, ruling record 6281834942) after it, because the ruled sentence says the amendment stands and those links are the only trace of where it was decided. A case-insensitive grep for 'proposed' hit line 3 alone before the edit and nothing after it. docs/adr/README.md was regenerated by node scripts/adr-index.mjs, never hand-edited: the row moves to Accepted with date 2026-10-28, counts Accepted 131 / Proposed 4; adr-index --check exit 0. Draft PR #30986 opened through the relay (run 42244571901, body 6893 bytes stored byte-identical) with Fixes #26553 and the skip-changeset label; Tier H by path, left for the seat's review and the approver's hand.", "tests": "node scripts/adr-index.mjs (wrote docs/adr/README.md, 237 lines) then node scripts/adr-index.mjs --check exit 0: 'adr-index: OK — docs/adr/README.md is current and every record parsed'. The status-line edit ran as a script asserting exactly one hit of the old line at line 3 and one hit of the new line afterwards (old hits 0, new hits 1). git diff --shortstat origin/main...HEAD: 2 files, +4/-4. No ablation: no tested behaviour changed (docs only).", "gates": "Derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack on head ac204886 (2 paths vs merge-base 1aeeafd9; changed lines 8, under the 3000 threshold): 21 commands, each run in the foreground with stdin closed, exit code landed on disk before any pipe, all 21 exit 0 — check-adr-links (+self-test), check-closing-keyword-parity (+self-test), check-comment-mask-corpus, ci/plan-test-core-shards --self-test, lint check:doc-formula-expressions (lint closure built first under os-verify-lock.sh, VERDICT command-exit 0, 96 s held), check:adr-anchors, check:adr-index, check:adr-symbol-anchors, check:ci-filter-parity, check:closed-ceremony-text, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:pm-governed-merges, check:pm-prior-rulings, check:refd-timer-probe, check:watch-hint-literal. Reconciliation dispatch-gates --ran: '21 derived famil(ies) accounted for — 21 run, 0 NOT-MEASURED'. dispatch-gates --tier: CONTRACT_REVIEW_TIER mandatory from docs/adr/**, effort floor xhigh (this run is on that tier). check-governed-merges.mjs --test: both paths governed (Tier H). PR check-runs: in_progress at report time, read by the seat on the PR.", "line_budget": "n/a — docs/adr/** carries no line ratchet; diff is +4/-4 (8 changed lines, generated README included), under the 3000-line human-merge threshold.", "files_changed": ["docs/adr/0050-form-layout-vs-presentation.md (line 3 only)", "docs/adr/README.md (regenerated by pnpm adr:index: summary counts lines 20–21, ADR-0050 row line 123)"], "neighbours": "Open PRs touching docs/adr/ on their heads vs merge-base with origin/main 1aeeafd9: #30828 (ADR-0142), #30862 (ADR-0125), #30899 (ADR-0146), #30940 (ADR-0055). None touches docs/adr/README.md. The later lander merges main and re-runs pnpm adr:index if a status line moved.", "changeset": "none, skip-changeset declared on the create: docs/adr/** ships in no released package (no files[] under packages/ names docs/adr). Read-back on PR #30986: labels size/xs + skip-changeset present, draft true, head ac204886, base moved to acd190b2 (mergeable_state blocked = checks pending). Clause-②: no. Metadata-protocol: none.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "5 reads, 0 writes — issue_read get (1), issue_read get_comments (2), list_pull_requests (1), pull_request_read get (1, the PR read-back). No MCP write tool was called; the harness's assignee/reviewer step was skipped on purpose (the frame forbids MCP writes; pr_create carries no assignee, the seat sets it at hand-over).", "api_writes": "0 REST proxy writes by this session. Relay: 1 fleet-write stroke (pr_create, request fw-20261106T153606Z-137441, run 42244571901, conclusion success, read-back identical). git: 1 push to claude/project-thread-uz8dqb (ac204886).", "deviations": [ "The checkout is shallow; the clone was deepened by 400 commits (git fetch --deepen) so the six open PRs without a merge-base could be read for the neighbour check. Declared, no other effect.", "The dev session is subscribed to the PR's activity events for CI wakes only; no polling, no sleep, report delivered before CI converged (check-runs in_progress).", "Worktree objectstack-issue-26553 is kept until the PR's CI is read, so a main-caused red or a BEHIND state can be answered; it is removed after that." ], "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }objectstack-fleet commentedon Nov 6, 2026
domain:spec#1 · os-tesla · session_01L9qibzzqHZdAVqgBAvxXKB
ACCEPT → PR #30986 comment 6688960398 (head
ac204886, contract review PASS 6688923854, CI green, clean). Tier H (docs/adr/**):pm:awaiting-merge+ review requested from os-zhuang / hotlong. The seat lands after an authorized APPROVED review.objectstack-fleet commentedon Nov 6, 2026
domain:spec#1 · os-tesla · session_01L9qibzzqHZdAVqgBAvxXKB
Finding recorded, not filed ·
domain:spec#1· 2026-11-06T16:11Z · ⛔ not a claimContract review 6688923854 on PR #30986 raised one should-fix outside that PR's file surface. In
docs/adr/0050-form-layout-vs-presentation.md, Migration (:51) and Consequences / Sequencing (:59–60) still call the cutover "spec-major". Ruling A′ (6464210455) shipped it as a(narrowing)minor,@objectstack/spec18.3.0, because this repo has no spec-major window (AGENTS.md). The status line now cites the ruling record, so the fact can be reached from the record.Filing gate: not filed as its own card.
docs/adr/**is not a shipped surface, and no PR or seat is editing ADR-0050 now, so it has no hands-on reader. The next PR that touches ADR-0050 carries a one-line dated note under Migration, in the shape of the 2026-10-20 note under Decision 2. This comment is the record.objectstack-fleet commentedon Nov 6, 2026
domain:spec#1 · os-tesla · session_01L9qibzzqHZdAVqgBAvxXKB
Landed ·
domain:spec#1· 2026-11-06T17:11Z0b157306e361b971e64357ea8257984fb47d0d0d, final headac204886origin/maingit merge-base --is-ancestor)State: card closed as completed by
Fixes #26553. In this strokepm:dispatchedwas removed from the card andpm:awaiting-mergefrom the PR. All 19 records under #26076 ruling A are now landed. The one ADR-0050 body should-fix is recorded in 6689516087.