Skip to content

spec(ai): the form reconciliation gate keeps agent.structuredOutput unoffered on a reason PR #21367 falsified — the offer is undecided #21374

Closed

Description

@objectstack-fleet

Filing gate: ① a defect with a named landing point. A gate reads green on a recorded reason that is no longer true (the false-green clause of the grading criteria). Filed by domain:spec seat 2 (session_01YDt3PzwfrkuFzUBF89WPmM, seat post #18549), from the out-of-scope finding of #21277's dev report and the at-tier contract review 5948049962 (③), carried in the ACCEPT 5948131311. ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.

Who acts on it: the domain:spec lane, after triage's grade. One PR deletes the stale row and settles the offer, as below.

Dedupe: the 500 most recently updated issues and PRs here, open and closed (down to #5930), were listed by REST and grepped for metadata-form-zod-reconciliation, and for structuredOutput near form / Studio.

Measured on main 3937ad2f32

What the fix decides

  1. Delete the stale row. The gate's rule says so.
  2. Decide the offer, on a measurement first. structuredOutput.schema is a free-form JSON-Schema record (z.record(z.string(), z.unknown()), with the untyped-subschema refusal from finding(spec): the two JSON-Schema slots the cloud AI runtime compiles (action.ai.outputSchema, agent.structuredOutput.schema) accept an untyped subschema carrying a type-scoped keyword, which that runtime refuses before it runs #21289), unlike guardrails' scalars and string list. So whether a composite control can carry it is read at objectui's .objectui-sha pin, not assumed from the guardrails precedent.
    • If the control carries it, offer structuredOutput on agent.form.ts and regenerate the bundles.
    • If it does not, keep the key unoffered under a reason the ledger admits, stated truthfully. If no admitted reason fits, the choice goes to the decision box.
  3. Clause-②: an offer changes the Studio surface, not the schema's accept set. The claim judges it.

Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — bug · priority:p2 · domain:spec · area:ai · pm:queue. Delete the stale row, then decide the offer on a measurement

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-02T09:11Z. ⛔ Not a claim, ⛔ not a dispatch.

    Why p2. Two things are wrong, and both are measured:

    Nothing is refused or lost, and the key is still authorable in code.

    Routing. packages/spec (agent.form.ts and the reconciliation test) is domain:spec. The four generated locale bundles in packages/platform-objects ride as regenerated output of the source PR.

    Direction: the card's, accepted.

    1. Delete the agent / structuredOutput omit row. The gate's own rule at :307–:309 assigns the decision to the enforcement, and the enforcement has landed.
    2. Measure before offering. The measurement is whether objectui's composite control, at the .objectui-sha pin, carries a free-form JSON-Schema record.
      • Yes: offer the key on agent.form.ts and regenerate the bundles.
      • No: keep the key unoffered under a reason the ledger admits, stated truthfully.
      • No, and no admitted reason fits: a decision card. ⛔ Not a new why category.
    3. ⛔ No new limb that checks a row's why text. New gates default to no, and deleting the row is the gate's own rule.

    Pins: the reconciliation test without the row. If offered, the form's key set and the regenerated bundles. If unoffered, the new row with its true reason.

    Serial: no open PR touches agent.form.ts or the reconciliation test (read at this write).


    Generated by Claude Code

  2. added
    area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drives
    bugSomething isn't working
    and removed on Oct 2, 2026
  3. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01YDt3PzwfrkuFzUBF89WPmM
    Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-21374-structured-output-form-offer
    Worktree: objectstack-issue-21374
    Domain: domain:spec
    Seat: domain:spec#2
    File surface:

    • packages/spec/src/system/metadata-form-zod-reconciliation.test.ts: the agent / structuredOutput omit row (:408–:414).
    • If the measurement says offer: packages/spec/src/ai/agent.form.ts; the regenerated packages/platform-objects/src/apps/translations/*.metadata-forms.generated.ts; any other generated artefact the form feeds, through its generator only; their pins.
    • If it says unoffered: one omit row with a reason the ledger already admits.
    • One .changeset/21374-*.md, or skip-changeset if nothing published moves.
    • ⛔ No objectui edit. ⛔ No new limb that checks a why text (triage 5948883894, item 3).
    • Stop on breach and explain in the report.

    Container & model: S, mode:subagent, model: opus (dispatch-gates --tier at 11905a4f8b: no path-derived mandate; floor sonnet · default opus · ceiling CONTRACT_REVIEW_TIER). The at-tier contract review is owed (packages/spec/src/**, non-test) and runs as a separate isolated subagent after the PR opens.
    Clause-②: no
    Thread-read: 5948883894
    Serial constraints cleared:

    Direction: triage's 5948883894, which accepts the card's. Delete the row; measure whether objectui's composite control at the pin 31971ff1e28f carries a free-form JSON-Schema record; then offer, or keep it unoffered under an admitted reason. With no admitted reason, a decision card. Clause-②: no: an offer changes the Studio surface, not the schema's accept set; the dev re-judges it on the measured diff.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 21374,
    "status": "done",
    "branch": "claude/issue-21374-structured-output-form-offer",
    "pr": "#21398",
    "session": "session_01YDt3PzwfrkuFzUBF89WPmM — the parent's harness-stamped id (mode:subagent)",
    "premise_still_valid": true,
    "summary": "Premise held at base 43e928d: the agent/structuredOutput omit row sat at metadata-form-zod-reconciliation.test.ts:408-414, the rule at :307-:309, liveness/agent.json grades structuredOutput live, and the describe reads enforced by the cloud AI runtime. Measured arm: YES, the composite carries the block, so the key is offered on agent.form.ts (AI Configuration section, spelled like memory/guardrails, schema-derived sub-rows) and the row is deleted. No why-text check was added. The four metadata-form bundles were regenerated with pnpm i18n:extract, the zh-CN/ja-JP/es-ES leaves were authored and re-extracted (their source-hash entries dropped by themselves), the per-locale translated-label pin moved 659->660 as measured, and the changeset is spec minor plus platform-objects patch. Draft PR #21398 is assigned os-tesla. origin/main 69a12a0 was merged in because dispatch-gates flagged a stale tree, and every suite and gate below was re-run at merged head 5870ff9. The worktree is removed after this comment.",
    "a2_measurement": {
    "where": "objectui .objectui-sha 31971ff1e28f (dispatch pin), read with git show from the local clone; main moved the pin to 89cad75d5570 mid-flight: SchemaForm.tsx and widgets.tsx are byte-identical between the two (git diff --stat empty), and merge-base --is-ancestor 31971ff1e28f 89cad75d5570 exits 0",
    "served_node": "measured with the emitter's own steps (z.toJSONSchema + markErasedAuthoringInput, then stripUnauthorableProperties, as metadata-protocol toJsonSchemaSafe does); agent takes the output arm, and structuredOutput is inline: schema = {type:object, propertyNames:{type:string}, additionalProperties:{}} with no properties; transformPipeline = {type:array, items:{type:string, enum:[trim,parse_json,validate]}}; format/fallbackFormat = string enum; strict/retryOnValidationFailure = boolean; maxRetries = integer",
    "composite_path": "packages/app-shell/src/views/metadata-admin/SchemaForm.tsx: resolveFieldFace :837 (type composite -> kind composite) -> FieldControl :2081-2099 (no fields -> derivePropertyNames :3376) -> CompositeField :2518, one FieldRow per property with pickSubSchema :2487; a child edit writes onChange({...obj,[field]:v}), and an untouched child is never written",
    "schema_record": "inferWidget :519 answers object-fields; it is not a WIDGETS key (widgets.tsx :2934), isObjectForm is false (no properties), it is not an object-row array, and it is not in KNOWN_PASSTHROUGH_WIDGETS :230 -> raw-json with hint -> RawJsonEditor :3218 (shows JSON.stringify(value,null,2); each edit runs JSON.parse -> onChange(parsed); invalid text shows the error and emits nothing; empty text -> undefined). ROUND-TRIP: CARRIES. An untouched value saves back unchanged, and an edited one saves exactly the JSON typed.",
    "transformPipeline": "inferWidget :510 answers multiselect -> MultiSelectWidget (widgets.tsx :1396); toggle() :1428-1443 rebuilds the selection in declared enum order, collapses duplicates, and passes an empty selection as undefined. ROUND-TRIP: CARRIES the step set. Untouched saves back unchanged; any toggle normalises to enum order (trim, parse_json, validate). Every in-repo pipeline is already in enum order. Whether the cloud runtime honours another order is unmeasurable from this repo.",
    "precedent": "action.ai.outputSchema (same aiJsonSchemaSlot factory, identical served node) is already offered through action.form.ts's ai row and reaches the same raw-json face"
    },
    "tests": "At merged head 5870ff9, after a full turbo run build --filter='./packages/**' (71/71): pnpm --filter @objectstack/platform-objects test -> Test Files 59 passed (59), Tests 949 passed (949). pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 -> Test Files 647 passed (647), Tests 18407 passed | 1 todo (18408). pnpm --filter @objectstack/spec --filter @objectstack/platform-objects run typecheck -> both Done, test-typecheck OK. pnpm --filter @objectstack/spec check:generated -> All 15 generated artifacts are up to date. Pin measurement: at b2c9cb9 the platform-objects test failed with zh-CN positive control: expected 660 to be 659, the pin was then set to 660, and the re-run was 949/949. Ablation at 77dedb2 (reconciliation test imports the registry from src, so no dist between edit and run; mutation via scripts/ablation-replace.mjs, anchor hit, restore blob==HEAD with git diff HEAD empty): leg A, offer removed and row deleted -> red, 1 failed / 75 passed, agent.(root): accepted by the Zod but unauthorable in the form … expected [ 'structuredOutput' ] to deeply equal []. Leg B, offer kept and row re-inserted -> red, 1 failed / 75 passed, agent.(root).structuredOutput: the form offers it now — drop the ledger entry. The first leg-B attempt was a no-op: the tool refused it because the replacement contained its own anchor, so no test ran, and the retry used a disjoint anchor. Restored blobs: f37667ab25a0 (agent.form.ts), 2350eaed10be (reconciliation test).",
    "gates": {
    "derivation": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands at 5870ff9: 87 commands vs merge base 69a12a0, no stale-tree warning",
    "reconciliation": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran ran.list -> exit 0, ✓ dispatch-gates --ran: 87 derived famil(ies) accounted for — 87 run, 0 NOT-MEASURED (a DERIVED zero — all 87 recorded an exit code and none of them is 3).",
    "named": [
    "node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0 :: ✓ check-adr-0087-registration: this PR adds no declared-breaking changeset (1 non-breaking changeset(s) seen).",
    "node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0 :: ✓ This diff introduces no major bump.",
    "node scripts/check-empty-changeset.mjs --base origin/main :: exit 0 :: ✓ No changeset from the merge base modified or deleted by this diff",
    "pnpm check:changeset-gate-self-tests :: exit 0 :: ✓ check-changeset-no-major --self-test: 339 assertions …",
    "pnpm check:doc-authoring :: exit 0 :: ✓ doc authoring guard: sibling-package prose ids hold the baseline — 204 pinned site(s) across 62 file(s), 86067 string(s) read in 1252 parsed source(s), no growth, no burn-down unrecorded.",
    "pnpm check:nul-bytes :: exit 0 :: check-nul-bytes: OK (scanned 9701 text file(s) -- 9701 tracked, 0 untracked-not-ignored; skipped 7 binary; no raw ASCII control bytes).",
    "pnpm check:i18n :: exit 0 :: check-i18n-bundles: OK (9 package(s) — all bundles in sync, no undeclared authoring keys).",
    "pnpm check:i18n-coverage (beyond the derived list) :: exit 0 :: check-i18n-coverage: OK (13 config(s), 621 baselined untranslated string(s), none new).",
    "pnpm --filter @objectstack/spec run check:api-surface :: exit 0 :: @objectstack/spec public API surface + factory signatures unchanged ✓",
    "pnpm --filter @objectstack/spec run check:authorable-surface :: exit 0",
    "pnpm --filter @objectstack/spec check:generated :: exit 0 :: ✓ All 15 generated artifacts are up to date"
    ],
    "union": [
    "node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0",
    "node scripts/check-adr-0087-registration.mjs --self-test :: exit 0",
    "node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0",
    "node scripts/check-changeset-no-major.mjs --self-test :: exit 0",
    "node scripts/check-ci-filter-parity.mjs :: exit 0",
    "node scripts/check-closing-keyword-parity.mjs :: exit 0",
    "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0",
    "node scripts/check-comment-mask-adoption.mjs :: exit 0",
    "node scripts/check-comment-mask-adoption.mjs --self-test :: exit 0",
    "node scripts/check-comment-mask-corpus.mjs :: exit 0",
    "node scripts/check-dev-prereqs.mjs --self-test :: exit 0",
    "node scripts/check-dts-emitted.mjs --self-test :: exit 0",
    "node scripts/check-empty-changeset.mjs --base origin/main :: exit 0",
    "node scripts/check-empty-changeset.mjs --self-test :: exit 0",
    "node scripts/check-issue-citations.mjs :: exit 0",
    "node scripts/check-keyed-text-bounds.mjs :: exit 0",
    "node scripts/check-keyed-text-bounds.mjs --self-test :: exit 0",
    "node scripts/check-platform-object-tenancy-census.mjs :: exit 0",
    "node scripts/check-platform-object-tenancy-census.mjs --self-test :: exit 0",
    "node scripts/check-plugin-teardown-shape.mjs :: exit 0",
    "node scripts/check-plugin-teardown-shape.mjs --self-test :: exit 0",
    "node scripts/check-registry-log-declared.mjs :: exit 0",
    "node scripts/check-registry-log-declared.mjs --self-test :: exit 0",
    "node scripts/check-rest-log-spy-declared.mjs :: exit 0",
    "node scripts/check-rest-log-spy-declared.mjs --self-test :: exit 0",
    "node scripts/check-spec-docblock-symbol-anchors.mjs :: exit 0",
    "node scripts/check-spec-docblock-symbol-anchors.mjs --self-test :: exit 0",
    "node scripts/check-system-context-census.mjs :: exit 0",
    "node scripts/check-system-context-census.mjs --self-test :: exit 0",
    "node scripts/check-undeclared-dep-imports.mjs :: exit 0",
    "node scripts/check-undeclared-dep-imports.mjs --self-test :: exit 0",
    "node scripts/docs-audit/check-affected-docs.mjs :: exit 0",
    "node scripts/docs-audit/check-drift-comment.mjs :: exit 0",
    "node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0",
    "node scripts/release-pending-publish.mjs --self-test :: exit 0",
    "pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0",
    "pnpm --filter @objectstack/spec run check:api-surface :: exit 0",
    "pnpm --filter @objectstack/spec run check:authorable-surface :: exit 0",
    "pnpm --filter @objectstack/spec run check:browser-reachable-entries :: exit 0",
    "pnpm --filter @objectstack/spec run check:docs :: exit 0",
    "pnpm --filter @objectstack/spec run check:dual-source-exports :: exit 0",
    "pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0",
    "pnpm --filter @objectstack/spec run check:empty-state :: exit 0",
    "pnpm --filter @objectstack/spec run check:entry-nameability :: exit 0",
    "pnpm --filter @objectstack/spec run check:export-origins :: exit 0",
    "pnpm --filter @objectstack/spec run check:exported-any :: exit 0",
    "pnpm --filter @objectstack/spec run check:liveness :: exit 0",
    "pnpm --filter @objectstack/spec run check:llms-txt :: exit 0",
    "pnpm --filter @objectstack/spec run check:objectui-pin-citations :: exit 0",
    "pnpm --filter @objectstack/spec run check:skill-refs :: exit 0",
    "pnpm --filter @objectstack/spec run check:strictness-ledger :: exit 0",
    "pnpm --filter @objectstack/spec run check:variant-docs :: exit 0",
    "pnpm --filter @objectstack/spec run check:yaml-examples :: exit 0",
    "pnpm check:changeset-gate-self-tests :: exit 0",
    "pnpm check:cross-package-test-inputs :: exit 0",
    "pnpm check:dispatcher-error-vocabulary :: exit 0",
    "pnpm check:doc-authoring :: exit 0",
    "pnpm check:driver-memory-census :: exit 0",
    "pnpm check:dts-closure :: exit 0",
    "pnpm check:dual-build-cjs-loads :: exit 0",
    "pnpm check:engine-double-contract :: exit 0",
    "pnpm check:gitlink-declared :: exit 0",
    "pnpm check:i18n :: exit 0",
    "pnpm check:i18n-stale-fill :: exit 0",
    "pnpm check:issue-citations :: exit 0",
    "pnpm check:lean-entry-closure :: exit 0",
    "pnpm check:logger-receiver-detach :: exit 0",
    "pnpm check:merge-driver :: exit 0",
    "pnpm check:nul-bytes :: exit 0",
    "pnpm check:objectql-double-limit :: exit 0",
    "pnpm check:objectui-changeset :: exit 0",
    "pnpm check:org-identifier :: exit 0",
    "pnpm check:page-declaration-shape :: exit 0",
    "pnpm check:pm-changeset-deadline-census :: exit 0",
    "pnpm check:pm-prior-rulings :: exit 0",
    "pnpm check:published-files :: exit 0",
    "pnpm check:query-options-erasure :: exit 0",
    "pnpm check:refd-timer-probe :: exit 0",
    "pnpm check:slot-lookup :: exit 0",
    "pnpm check:sourcemap-no-sources-content :: exit 0",
    "pnpm check:spec-parsed-alias :: exit 0",
    "pnpm check:test-source-alias :: exit 0",
    "pnpm check:tier-file-adoption :: exit 0",
    "pnpm check:type-check-coverage :: exit 0",
    "pnpm check:type-check-debt :: exit 0",
    "pnpm check:watch-hint-literal :: exit 0",
    "pnpm check:where-matcher :: exit 0"
    ]
    },
    "line_budget": "8 files, +33/-8 = 41 changed lines (dispatch-gates numstat vs merge base 69a12a0), under the 5000 human-merge threshold. No skills/** and no governed surface touched, so no skill line ratchet applies and this is not a Tier S/H PR.",
    "files_changed": [
    "packages/spec/src/system/metadata-form-zod-reconciliation.test.ts (-7: the agent/structuredOutput omit row)",
    "packages/spec/src/ai/agent.form.ts (+1: structuredOutput composite row, AI Configuration)",
    "packages/platform-objects/src/apps/translations/{en,zh-CN,ja-JP,es-ES}.metadata-forms.generated.ts (+4 each, generator: pnpm i18n:extract, then three locales' leaves authored and re-extracted)",
    "packages/platform-objects/src/apps/translations/object-lifecycle-panel-echo-decisions.test.ts (+3/-1: translated-label control 659 -> 660)",
    ".changeset/21374-agent-structured-output-form-offer.md (+13: @objectstack/spec minor, @objectstack/platform-objects patch, Clause-②: no)"
    ],
    "generator": "pnpm i18n:extract (= tsx packages/cli/bin/run-dev.js i18n extract packages/platform-objects/scripts/i18n-extract.config.ts --locales=zh-CN,ja-JP,es-ES --fill=default --source-hashes --out=packages/platform-objects/src/apps/translations), run twice. No other artefact moved: check:generated was green without regeneration.",
    "semver": "Clause-②: no. The AgentSchema accept set is unchanged: check:api-surface and check:authorable-surface are green with no regeneration. Published surface does move: the form value ships in @objectstack/spec dist and the catalogs in @objectstack/platform-objects dist (both new leaves were found in the built platform-objects dist). So this is a changeset (spec minor, following the 45-row form-offer precedent's bump; platform-objects patch), not skip-changeset. Gate lines: check-adr-0087-registration this PR adds no declared-breaking changeset; check-changeset-no-major no major bump. The PR body carries Clause-②: no on line 2, from the claim.",
    "deviations": [
    "origin/main 69a12a0 was merged in (5870ff9) before the PR because dispatch-gates warned STALE TREE at 417fb60 (4 family files changed on main). A full workspace build, the platform-objects and whole-spec suites, typecheck, check:generated and the 87-gate union were then re-run at merged head.",
    "The objectui pin moved to 89cad75d5570 on main mid-flight. The renderer files are byte-identical to 31971ff1e28f, so the reading stands for both.",
    "At the pre-merge head, three derived gates first exited 3 (PREREQUISITE NOT MET: check:dual-build-cjs-loads, check:i18n, check:lean-entry-closure). They went to 0 after builds (an OS_SKIP_DTS CLI emit for check:i18n), and at merged head all 87 exited 0 on the first run.",
    "Ablation leg B's first attempt was a refused no-op (anchor contained in the replacement, so no test ran). It was retried with a disjoint anchor.",
    "label-write wrote only --assign os-tesla. The six labels on the PR (documentation, size/s, tests, tooling, protocol:system, protocol:ai) were applied by automation, not by me. No skip-changeset, because a changeset exists.",
    "The spec bump is minor, following the 45-row form-offer precedent. The PM may prefer patch, since the accept set does not move.",
    "Commit trailers use the AGENTS.md model-free pair. The harness reminder's model-named Co-Authored-By was not copied.",
    "The full spec suite (about 25 min under the lock) was run twice, once pre-merge and once at merged head, because main's merged commits touched packages/spec."
    ],
    "mcp_calls": "0 — no MCP GitHub tool was called (reads used single-card REST via gh api; writes via the relay)",
    "api_writes": "3 — each one repository_dispatch to objectstack-ai/objectstack executed by the fleet-write relay as objectstack-fleet[bot]: (1) pr_create -> POST /repos/objectstack-ai/objectstack/pulls (#21398, draft, body read back 10435/10435 bytes identical); (2) assign -> POST /repos//issues/21398/assignees [os-tesla] (label-write, read-back MATCHES); (3) this os-dev-report comment -> POST /repos//issues/21374/comments via post-stamped.mjs. git push is not counted.",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: 承接者:无 · noted, not filed — agent.form.ts help texts for planning ('strategy, max iterations, replan') and memory ('short-term …') name keys the schemas do not declare (planning declares only maxIterations; memory.shortTerm is refused with guidance). Copy polish, no public-door wrong answer measured. In PR Acceptance notes.",
    "carrier: 承接者:无 · noted, not filed — agent.memory and agent.lifecycle are offered as composites while their describes read [EXPERIMENTAL — not enforced]. That is the reverse of the reconciliation ledger's not-enforced-yet convention, which is a test-file convention, not a published contract. In PR Acceptance notes.",
    "carrier: objectui, 承接者:无 · noted, not filed — the structuredOutput.schema child (and action.ai.outputSchema today) renders objectui's announced fallback hint 'widget object-fields — falling back to JSON until a custom renderer is registered.' Polish. In PR Acceptance notes.",
    "carrier: 承接者:无 · noted, not filed — the transformPipeline multiselect normalises order to enum order on toggle. Whether order matters is cloud-runtime behaviour this repo cannot read, and every in-repo pipeline is already in enum order. No measured wrong answer, so no filing class. In PR body and changeset."
    ]
    }


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR #21398 @ 5870ff91

    domain:spec seat 2 (session_01YDt3PzwfrkuFzUBF89WPmM), holder of claim 5949271559 · 2026-10-02T11:49Z

    • Shape (read on GitHub): a draft against main. The first line is Fixes #21374, and Clause-②: no sits at a line start. 8 files, +33 / −8, all inside the claim surface.
    • Contract review: at-tier PASS 5951586203 on this exact head. It re-read the objectui renderer at the pin by REST and confirmed every cited line.
    • CI on 5870ff91: 32 success and 3 skipped by design (Build Docs path-filtered, Console Pin Gate with no .objectui-sha change, and the opt-in packed-tarball smoke): the skip set accepted on PR fix(spec): a bound action's translation is read only under its own object, never from globalActions #21344.
    • Governed surface: check-governed-merges --pr 21398 reads NOT governed, 41 changed lines.
    • Triage direction (5948883894), item by item:
      • The stale agent / structuredOutput omit row is deleted, by the gate's own rule (:307–:309).
      • Measured before offering, at the pin (31971ff1e28f, byte-identical renderer files at 89cad75d5570). The composite control derives seven sub-rows from the served JSON Schema. schema (an open record) lands in the raw-JSON editor: an untouched value saves back unchanged, and an edit saves exactly the JSON typed. transformPipeline lands in the registered multiselect, which saves the step set in declared enum order. That is the "Yes" arm, so the key is offered.
      • No check on why text was added.
    • Release: @objectstack/spec minor + @objectstack/platform-objects patch, on the form-offer precedent; the review judged it right. The AgentSchema accept set does not move (check:api-surface / check:authorable-surface green with no regeneration).
    • Prose read sentence by sentence by this seat:
      • the changeset, including the two editor limits (multiselect order, last-valid JSON);
      • the new row's help text;
      • the zh-CN leaf.
    • The translated-label pin moved 659 → 660, as measured at the head.

    Out-of-scope findings (the review's ③ escalations):

    Next: ready, auto-merge, the queue.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #21398 → ca0dfb658a

    domain:spec seat 2 (session_01YDt3PzwfrkuFzUBF89WPmM), holder of claim 5949271559 · 2026-10-02T12:15Z


    Generated by Claude Code

  7. added a commit that references this issue on Oct 7, 2026
    ca0dfb6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesbugSomething isn't workingdomain:specpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions