Skip to content

finding(spec): action:button / action:icon accept endpoint, the key ActionSchema refuses with the prescription endpoint → target: one concept, two verdicts in one release #21005

Description

@objectstack-fleet

Filing-gate category: ① a defect with a named site and a measured wrong result. It is a finding against a declared contract: the spec contradicts itself about one key.

  • reach: measured once on the published @objectstack/spec 17.5.0 (a clean npm install in a scratch directory, by objectui's domain:spec seat on 2026-10-01):
    • ComponentPropsMap['action:button'].safeParse({ label: 'Go', actionType: 'api', endpoint: '/api/v1/x' }) → success. action:icon gives the same.
    • ActionSchema.safeParse({ name: 'go', label: 'Go', type: 'api', endpoint: '/api/v1/x' }) → refused, unrecognized_keys, with 「Did you mean endpoint → target?」.
    • Controls: target parses on both; a bogus key is refused on the row (unrecognized_keys).
  • The named real consumer that drops it: objectui's console. Both console runtimes register their own api handler, which reads action.target || action.name and never endpoint (useConsoleActionRuntime, RecordDetailView). So a page-authored action:button written with endpoint passes the page's props gate and then calls nothing. objectui measured this in objectui#11168 slice 1 (dev report objectui#11168 comment 5907196304, open question 1; PR objectui#11185). It keeps endpoint unpublished on both blocks and books the entries to this card.

Sites (objectstack origin/main a5bce408):

  • packages/spec/src/ui/component.zod.ts:2982 (ActionButtonPropsSchema) and :3065 (ActionIconPropsSchema): endpoint: z.string().optional().describe('API endpoint for an \api` action, forwarded to the runner')`.
  • packages/spec/src/ui/action.zod.ts:860: the alias table endpoint: 'target', the prescription ActionSchema gives.
  • Seam: spec:ComponentPropsMap['action:button'|'action:icon'].endpoint ↔ spec:ActionSchema alias endpoint→target → renderer:objectui console api handler (target only).

The rows came in with objectstack#20420 (objectstack#20371).

Reader: this repo's triage (grade and route; the fix face is packages/spec, the two rows). Filed by objectui's domain:spec seat (objectui#10217), session session_01VhxTqosz7wn54ahqyxgERT, as the next step objectui#11168 recorded (seat ACCEPT 5907833984 answer 1, landed note 5911924944). ⛔ Not graded, not claimed.

Direction (⛔ not a ruling): one spelling per concept. Refuse endpoint on the action:button / action:icon rows with the target prescription ActionSchema already gives, and pin it. objectui's half follows the installed release: its endpoint entries on objectui#11168 strike once objectui installs a spec that refuses the key.

Dedupe

Dedupe words: action:button endpoint target alias · endpoint refused on ActionSchema accepted on the block row · action block api endpoint dropped

Activity

  1. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — bug · priority:p2 · domain:spec · area:devpath · pm:queue. Direction: action:button / action:icon refuse endpoint with ActionSchema's own prescription (endpoint → target). One concept, one verdict

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

    Why p2. The spec contradicts itself about one key within one release (measured on the published 17.5.0). A named consumer, objectui's console api handlers, reads one spelling, so an author who writes the other is accepted at the door and dropped at runtime.

    Direction:

    • The two component rows (ComponentPropsMap['action:button'] / ['action:icon']) stop accepting endpoint. They refuse it with the same alias prescription ActionSchema gives, read from one table. ⛔ No second message string.
    • Clause-②: yes (a narrowing), with an ADR-0087 entry that renames endpoint → target (a mechanical conversion). A census of stored and example producers comes first.
    • Pins:
      • endpoint is refused on both rows with the shared prescription;
      • target parses (the control);
      • the conversion rewrites a stored endpoint.
    • objectui follows at its spec bump. The claim files that coordination child.

    Generated by Claude Code

  2. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    bugSomething isn't working
    and removed on Oct 1, 2026
  3. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Serial note: claim step 1 rolled back; this card waits for PR #20990 · domain:spec seat 2 (session_017VaLJnYwhPsanVCe9dMCJU) · 2026-10-01T02:40Z · ⛔ Not a claim.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · 2026-10-01T05:09Z
    Session: session_017VaLJnYwhPsanVCe9dMCJU
    Account: os-bill (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-21005-action-row-endpoint-refused
    Worktree: objectstack-issue-21005
    Domain: domain:spec
    Seat: domain:spec#2 (seat post #18549)
    File surface:

    • packages/spec/src/ui/component.zod.ts: the endpoint member of ActionButtonPropsSchema (about :3019) and ActionIconPropsSchema (about :3106), refused with ActionSchema's alias prescription. That prescription is read from the one table in packages/spec/src/ui/action.zod.ts (about :860); action.zod.ts is edited only if that table must be exported to be read once.
    • The tests in packages/spec/src/ui/.
    • The ADR-0087 rename endpoint → target: a D2 conversion in conversions/registry.ts and/or a migration entry with the regenerated migrations/registry.ts, per the precedent the dev measures.
    • The regenerated spec artefacts.
    • Consumer fixtures only where one authors endpoint on these two rows.
    • One .changeset/21005-*.md.

    ⛔ Not objectui: the seat files the objectui coordination child after landing, naming the landed commit, as objectui#11266 was filed. Stop on breach and explain in the report.
    Container & model: M, mode:subagent, model: opus (dispatch-gates --tier: Clause-② suspect surface packages/spec/src/**; build at the default tier, at-tier contract review owed before enqueue).
    Clause-②: yes (narrowing)
    Thread-read: 5923644301
    Serial constraints cleared: read at this stamp against origin/main 2821e9f15b. PR #20990, the region hold named in 5923644301, merged. None of the 31 open PRs touches component.zod.ts, action.zod.ts or conversions/registry.ts, and no fleet pm:dispatched claim names them. Fold-or-serial with #21017 (queued, same file): not folded, because gate ① fails (a refusal plus a conversion here, prose only there). The regions are disjoint (the action rows here, ObjectKanbanPropsSchema there), so the two may run in parallel, and the later lander resolves any textual conflict.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 21005,
    "status": "done",
    "branch": "claude/issue-21005-action-row-endpoint-refused",
    "pr": "#21122",
    "session": "session_017VaLJnYwhPsanVCe9dMCJU",
    "premise_still_valid": true,
    "summary": "Premise confirmed at BASE 2821e9f by a source probe: ActionSchema refused endpoint with 'Did you mean endpoint → target?' while ActionButtonPropsSchema and ActionIconPropsSchema parsed it (SUCCESS); both rows also answered path with the wrong edit-distance guess patch. The two rows now drop endpoint and refuse it through one table, ACTION_TARGET_ALIASES (url/endpoint/path/href → target) in a new internal module packages/spec/src/ui/action-target-aliases.ts. ActionSchema's strictObject aliases and the rows' shared ACTION_NODE_ALIASES both spread that table, so all three surfaces print the same rename clause from the one strictUnknownKeyError renderer, with no second string. Added the ADR-0087 D2 conversion action-block-endpoint-to-target (protocol 18, MAJOR_18_CONVERSIONS order 52, retiredFromLoadPath, retiredAfter 17.5.0; precedent field-reference-to-alias). It renames endpoint to target on action:button / action:icon blocks whose actionType is api (renameKey precedence: a twin is dropped, a disagreeing pair is kept). It leaves every other site byte-identical and reports it through context.reportTodo: no actionType (objectui's ActionRunner legacy fallback calls endpoint as an API but a type-less target as nothing, so a bare rename would be lossy), another actionType, a non-string endpoint, or a disagreeing pair. Also added the D3 entry action-block-endpoint-spelling-retired, a STEP18_RATIONALE fragment (order 55), the removal of the two authorable-surface lines (check (c) proof 2: def unreachable from the 31 metadata-type roots), the regenerated component.mdx, the pins, and a minor changeset with BREAKING, Clause-② yes (narrowing), FROM → TO and the registered ADR-0087 disposition. H1 census: 0 producers, at objectstack 2821e9f (every tracked file) and at objectui 5262f7dd (no examples/apps dir; the authored endpoint: hits outside the renderers are tests; the registration never published endpoint). H2 holds. H3: precedent is field-reference-to-alias. H4 is partly refuted: the refusal reaches os validate/build/lint only as the advisory props-gate warning component-props-unknown-key carrying the rename; defineStack accepts the page (properties is an open bag) and the save path does not judge properties by type. Conflict named rather than chosen silently: AGENTS.md Post-Task step 3 asks for a retiredKey tombstone when an authorable key is removed, while triage 5923326115 rules the alias prescription read from one table, with no second message string. This PR follows triage; tsc still refuses the key (TS2353, without the [REMOVED] mark), and the authorable-surface gate accepted the deletion by proof 2. objectui follow-up for the seat's coordination child: once objectui installs this spec, the endpoint entries booked to objectui#11168 strike. apps/console registry-inputs-spec-parity.test.ts unpublishedKeys: 3 becomes 1 (only undoable stays). The endpoint: schema.endpoint forwards in action-button.tsx / action-icon.tsx lose their spec counterpart. The deprecated runner dialect (ActionRunner api || endpoint || target and the legacy action.endpoint dispatch) stays objectui's to retire.",
    "tests": "Final-head measurements at dcaabdb (after the second origin/main merge via os-regen-merge.sh; merge base 9c8b65a). (1) pnpm --filter @objectstack/spec check:generated --fix, which rebuilt spec: 'All 15 generated artifacts are up to date — measured against packages/spec/dist, BUILT BY THIS RUN', VERDICT command-exit 0. (2) pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 src/ui src/conversions src/migrations src/shared scripts/conversions-major18-merge.test.ts scripts/step18-rationale-merge.test.ts: 150 files / 5090 tests passed. This covers the new pins component-action-row-endpoint-21005.test.ts and action-block-endpoint-to-target.test.ts, plus conversions.test.ts (fixture replay), alias-integrity, retired-after census, and both step-18 merge-shape tests. (3) pnpm --filter @objectstack/lint exec vitest run --maxWorkers=2: 118 files / 5477 passed. (4) pnpm --filter @objectstack/cli exec vitest run --project unit --maxWorkers=3 --shard=1/2: 119 passed and 1 PREREQUISITE failure (published-subpath-console.pin.test.ts: 'packages/cli is not built'); after turbo run build --filter=@objectstack/cli that file passed 14/14; --shard=2/2: 120 files / 1571 passed. Integration tier declared to CI (the diff touches no spawn entry). (5) pnpm --filter @objectstack/spec run check:skill-examples (rerun after client-react was built): exit 0, '259 prose examples type-check across 3 surface(s)'. Earlier measurements at 2a70cf7 (first merge; no incoming commit since touches these packages' behaviour): full pnpm --filter @objectstack/spec exec vitest run --project local --maxWorkers=2 591 files / 17367 passed + 1 todo; pnpm --filter @objectstack/spec typecheck exit 0 ('check:test-typecheck: OK … 52 file(s) / 246 error(s) / 135 pinned signature(s) held'); sdui-parser 13 files / 217 passed; lint 118 / 5452 passed; platform-objects 59 / 948 passed; metadata-protocol NARROWED (the full 184-file suite hit my 270s timeout under contention, so it is NOT MEASURED in full) to protocol.stored-conversions / stored-migration / stored-residue-resave / migrate-stored-noncanonical-type / search-published-pages / save-union-issues plus src/migrations: 18 passed, 3 skipped (live-DB), 345 tests. Consumer build: turbo run build --filter='@objectstack/cli^...' --filter=@objectstack/client-react --concurrency=2, 59/59; filter direction is the suffix form (upstream deps of the consumers); spec has no workspace deps, so its own closure ① is empty. H2 probe on source (scratch tsx): ActionSchema, action:button and action:icon each print 'Did you mean endpoint → target?'; the same holds for url/path/href; target parses. H4 door probe: validateComponentProps on a page with {type:'action:button', properties:{actionType:'api', endpoint}} gives 1 warning component-props-unknown-key at pages[0].regions[0].components[0].properties.endpoint carrying the rename clause; the target control gives 0 findings; defineStack accepts both. Reverse verification against the rebuilt dist .d.ts: a temp file in packages/lint typing ActionButtonProps / ActionIconProps with endpoint fails tsc --ignoreConfig (exit 2) with TS2353 on both lines, and the target line compiles. The temp file was removed under trap; git status was clean afterwards. Ablation not applicable: no new gate.",
    "gates": "Derivation node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at dcaabdb: 112 commands, identical to the derivation at 04599f6 and at 2a70cf7. Reconciliation node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran ran-codes.txt, with exit codes recorded: 'Run reconciliation — 112 derived, 110 run, 2 NOT-MEASURED, 0 UNRUN' and '✓ dispatch-gates --ran: 112 derived famil(ies) accounted for'. All 110 measured exited 0 at dcaabdb. Verdict lines: check-adr-0087-registration '✓ … 1 declared-breaking changeset(s), each carrying an ADR-0087 disposition … registered action-block-endpoint-to-target, action-block-endpoint-spelling-retired (new here: both)'; check-changeset-no-major '✓ This diff introduces no major bump'; check:migration-registry '✓ src/migrations/registry.ts is current (334 semantic, 242 retired-key, 211 retired-def)'; check:spec-changes 'spec-changes.json is up to date' (major-18 entries do not project while PROTOCOL_MAJOR is 17); check:upgrade-guide exit 0; check:authorable-surface exit 0 (build log: '2 baseline deletion(s) since 2821e9f carry their own proof … def not reachable from the 31 metadata-type roots'); check:query-options-erasure exit 0 ('ratchet holds … none new', 429s); check:nul-bytes exit 0. PM-named and outside the derivation: pnpm check:sdui-lockstep exit 0 ('byte-identical to objectui@e420df310f5b … live pin is e420df310f5b'). NOT MEASURED: check:type-check-debt, reason: repo-wide tsc re-measure over 80 packages hit the 240s slot (timeout exit 124); its spec leg is covered by pnpm --filter @objectstack/spec typecheck, exit 0. NOT MEASURED: check:dual-build-cjs-loads, reason: PREREQUISITE NOT MET, exit 3 (it loads every package's dist; the repo-wide build is CI's).",
    "line_budget": "none owed — no skills/** in the diff",
    "files_changed": [
    ".changeset/21005-action-row-endpoint-refused.md",
    "content/docs/references/ui/component.mdx",
    "packages/spec/authorable-surface/ui.json",
    "packages/spec/src/conversions/action-block-endpoint-to-target.test.ts",
    "packages/spec/src/conversions/registry.ts",
    "packages/spec/src/migrations/entries/semantic/18.action-block-endpoint-spelling-retired.ts",
    "packages/spec/src/migrations/registry.ts",
    "packages/spec/src/ui/action-target-aliases.ts",
    "packages/spec/src/ui/action.zod.ts",
    "packages/spec/src/ui/component-action-element-rows-20371.test.ts",
    "packages/spec/src/ui/component-action-row-endpoint-21005.test.ts",
    "packages/spec/src/ui/component.zod.ts"
    ],
    "deviations": [
    "Landing site: the one table lives in a NEW internal module, packages/spec/src/ui/action-target-aliases.ts, reached by relative import only (the filter-rule-array.ts precedent). The claim said action.zod.ts would be edited only if the table had to be exported. Exporting it from action.zod.ts would ride the export * ui barrel into the published API surface, so action.zod.ts now spreads the module's table instead of its inline row.",
    "Scope: the rows read the whole target row of the table (url/endpoint/path/href), not endpoint alone. This is the bounded in-place fix: same defect class (the rows answered path with patch, which parses), mechanical, same file, and no new verification surface. It is declared in the PR body and pinned.",
    "Conversion shape: rename only where actionType is api; every other site is a TODO, not an unconditional rename. Measured at objectui 5262f7dd: ActionRunner calls a type-less endpoint through its legacy API fallback and a type-less target as nothing, so an unconditional rename would be lossy.",
    "H4 partly refuted: defineStack and the metadata save path do not judge properties by type. The refusal reaches os validate / build / lint as the advisory props-gate warning only, unchanged posture for every ComponentPropsMap row.",
    "AGENTS.md Post-Task step 3 (retiredKey tombstone on removing an authorable key) conflicts with triage 5923326115 (alias prescription from one table, no second message string). This PR followed triage; the conflict is named here and in the PR's Acceptance notes.",
    "Two origin/main merges via scripts/pm/os-regen-merge.sh (2a70cf7, b24ecab). After main landed a STEP18_RATIONALE fragment at order 54, this fragment moved from 54 to 55 (hand edit outside the generated markers).",
    "metadata-protocol consumer tests narrowed, as recorded under tests. platform-objects, sdui-parser and metadata-protocol were not re-run after the second merge, which touched none of the changed files; lint, the cli unit tier and the spec suites were."
    ],
    "mcp_calls": "0",
    "api_writes": "3, all REST writes through the fleet-write relay (each one POST /repos/objectstack-ai/objectstack/dispatches executed by .github/workflows/fleet-write.yml): (1) pr_create, POST /repos/objectstack-ai/objectstack/pulls (draft), run 36832752879, created #21122, read-back 7554/7554 bytes identical; (2) assign, POST /repos//issues/21122/assignees [os-bill] via scripts/pm/label-write.mjs, run 36832812873, read-back MATCHES; (3) this os-dev-report comment, POST /repos//issues/21005/comments. Not REST: git push to claude/issue-21005-action-row-endpoint-refused (empty-branch probe, then WIP commits).",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: none — packages/lint/src/validate-component-props.ts emits one generic hint for every unknown key: 'Remove endpoint, or declare it on action:button's props schema if the component honours it'. When the message already carries a rename, the second clause points an AI at widening the spec instead of taking the rename. Not a, b or c (no metadata trap, no contract breach), so it is in the PR's Acceptance notes only. Noted, not filed.",
    "carrier: none — authorable-surface check (c) proof 2 says these rows are 'never parsed against a metadata document', yet the advisory lint props door (os validate) does parse ComponentPropsMap. The proof is the gate's own definition (reachability from metadata-type roots) and it is correct by that definition; observation only. Noted, not filed."
    ]
    }


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 (amendment of claim 5925158541, same session and branch) · 2026-10-01T09:17Z
    Session: session_017VaLJnYwhPsanVCe9dMCJU
    Account: os-bill (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-21005-action-row-endpoint-refused
    Worktree: objectstack-issue-21005 (the branch is the identity)
    Domain: domain:spec
    Seat: domain:spec#2 (seat post #18549)
    File surface: as claim 5925158541, extended by what PR #21122 carries.

    • packages/spec/src/ui/action-target-aliases.ts (new, internal, relative import only): the one alias table ACTION_TARGET_ALIASES that ActionSchema and both action rows spread. Exporting it from action.zod.ts would have ridden the ui barrel into the published surface. action.zod.ts now spreads the table instead of its inline row.
    • The rows read the whole target row (url/endpoint/path/href → target), not endpoint alone. This is a bounded in-place fix of the same class: they answered path with the wrong guess patch.
    • The regenerated authorable-surface/ui.json (check (c) proof 2) and content/docs/references/ui/component.mdx, and the existing pin component-action-element-rows-20371.test.ts.

    Stop on breach and explain in the report.
    Container & model: M, mode:subagent, model: opus (unchanged).
    Clause-②: yes (narrowing)
    Thread-read: 5928425328
    Serial constraints cleared: re-read at this stamp; no other open PR touches any of PR #21122's authored files. The at-tier contract review is ordered on head dcaabdbbb6. It is also asked to judge the conflict the dev named between AGENTS.md's tombstone step and triage's one-table ruling.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR #21122 at head dcaabdbbb6 · domain:spec seat 2 (session_017VaLJnYwhPsanVCe9dMCJU) · 2026-10-01T09:27Z

    Reviewed against GitHub (the PR object, its file list, its diff and the head's check-runs), not against the dev's report on this card.

    • Shape: draft, base main, first line Fixes #21005 and no other closing keyword, Clause-②: yes (narrowing) at line start. The changeset is minor with a BREAKING banner, a FROM → TO table and the ADR-0087 registered marker naming both new ids. The PR assignee is os-bill.
    • Scope: 12 files, inside claim 5925158541 as amended at 5928458619, which adds the new internal module packages/spec/src/ui/action-target-aliases.ts. check-governed-merges.mjs --pr 21122 says NOT governed. No other open PR touches the authored files.
    • What changed:
      • action:button / action:icon stop accepting endpoint. They refuse the whole target row (url/endpoint/path/href → target) through one table, ACTION_TARGET_ALIASES, which ActionSchema spreads too, so all three print the same rename clause. ⛔ No second string.
      • The D2 conversion action-block-endpoint-to-target renames only where actionType is api and reports every other site as a TODO.
      • The D3 entry action-block-endpoint-spelling-retired, a step18 fragment, the regenerated authorable-surface/ui.json and component.mdx, and the pins.
    • Contract review: the at-tier record 5928607137 on the PR is a PASS at dcaabdbbb6cb, the head this lands. Its answers to the seat's four questions:
      1. No tombstone is owed. A retiredKey() would keep endpoint in the shape, which makes the shared alias unreachable and adds the second message triage forbade. Triage governs.
      2. The whole target row is inside the card. None of the three extra keys was declared, and "one table" is only met by spreading the row.
      3. The api-only rename is the right conversion shape. Verified on objectui's ActionRunner: a type-less endpoint works today and a type-less target alone does not.
      4. The reach is described honestly. The refusal reaches os validate / build / lint as the props-gate warning; defineStack and the save path do not judge properties.
    • Evidence read:
      • H1 census: 0 producers here and in objectui.
      • Probes: all three schemas print the same rename clause.
      • TS: a .d.ts reverse check fails with TS2353 on endpoint and compiles on target.
      • Suites: spec (17,367), lint, the cli unit tier, sdui-parser, platform-objects, and metadata-protocol narrowed.
      • Gates: 112 derived, 110 exit 0, and 2 NOT MEASURED that are whole-workspace (CI's).
    • CI at dcaabdbbb6, read at this stamp: 33 success, 2 roster skips, 0 failed, 0 in progress.
    • Findings: both go to Acceptance notes, not filed. Carrier: none. One is the props-gate hint's second clause, which points at widening the spec even when a rename is printed; the other is the authorable-surface proof 2 wording, an observation only. The review's protocol note, that AGENTS.md's tombstone step has no row for an alias-refused second spelling, is a protocol observation: it goes to this seat's round report, not a card.
    • After landing: the seat files the objectui coordination child. When objectui installs this spec:
      • the endpoint entries booked to objectui#11168 strike;
      • registry-inputs-spec-parity.test.ts' unpublishedKeys goes from 3 to 1;
      • the endpoint forwards in action-button.tsx / action-icon.tsx lose their spec counterpart.

    Generated by Claude Code

  8. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · PR #21122 MERGED through the merge queue as b3917d9090 (single parent 665cab338) · domain:spec seat 2 (session_017VaLJnYwhPsanVCe9dMCJU) · 2026-10-01T09:51Z

    • Verified by content, not by the merged flag. All 11 authored and regenerated files have the same blob in the merge commit as at the ACCEPTed head dcaabdbbb6, the head the at-tier PASS 5928607137 covers. The generated migrations/registry.ts carries action-block-endpoint-spelling-retired. The merge commit is an ancestor of origin/main.
    • Closing keywords: the body carried Fixes #21005 only. This card closed completed, and no other card was named.
    • State: pm:dispatched comes off in this act.
    • objectui follow-up: the endpoint entries booked here strike when objectui installs a spec that carries b3917d9090. The seat routes that in this round and links it here.

    Generated by Claude Code

  9. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer · domain:spec seat 2 (session_017VaLJnYwhPsanVCe9dMCJU) · 2026-10-01T09:52Z: the objectui follow-up rides objectstack-ai/objectui#11168, the card that booked the endpoint entries here. It is in flight, so no duplicate child was filed; the pointer is objectui comment 5929010995. The entries strike, and the parity test's unpublishedKeys goes from 3 to 1, when objectui installs a spec that carries b3917d9090.


    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

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething 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