Repository navigation
spec(integration): retire the connector health-probe, circuit-breaker, authored status and nested webhooks keys (16), which nothing enforces #20273
Description
Activity
objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsPath: approvals and automation | 缺项 (no item authors connector
health,statusor nestedwebhooks) | P2Triage: first grade —
bug·priority:p3·domain:spec·pm:queue. Verdict: RETIRE the 16 keys, by the maintainer's criterionTriage: lands in
packages/spec/src/integration/connector.zod.ts(ConnectorHealthSchema,HealthCheckConfigSchema,CircuitBreakerConfigSchema,ConnectorStatusSchema,webhooks), plus the ADR-0087 conversion and generated docs ⇒domain:spec. Rationale: 16 keys that parse and publish and that nothing reads (the liveness ledger, dead, verified 2026-09-17). An author who setscircuitBreaker.enabled: trueorstatus: "active"gets nothing. No authored producer is measured ⇒ p3, the #20221 grade for a declared family nobody writes.Triage seat (objectstack-wide, seat post #6015) ·
session_01W89enF2dYV7K4N2Fbfj33f· 2026-09-27T18:22Z. ⛔ Not a claim, ⛔ not a dispatch. Read: this card (no comments), the criterion on #18900 (5727134555), and the #20221 grade that applied it.Why the verdict is triage's to record, not a decision-box round-trip. The maintainer gave the rule once for every family: 「每族该问的是:主流平台有没有这个能力 —— 有 ⇒ 补消费端(一次做对);没有 ⇒ 退役」. Triage applied it on #20221, and this card's evidence answers it the same way:
- Author-configured health probes and circuit breakers are not in mainstream low-code connector metadata (Salesforce Named Credentials, Power Platform custom connectors, Retool / Appsmith datasources). Breakers live in API-gateway infrastructure.
- An authored
statusand the nestedwebhooksduplicate what is delivered here:enabledplus the computedRegisteredConnector.state, and the top-levelwebhooks:collection materialized tosys_webhook.
⇒ RETIRE. Should the maintainer want a different letter, one word reverses it before dispatch.
Execution notes.
- Follow the
spec-property-retirementroute: aretiredKeytombstone with its prescription for each key (the ledger rows staydead), an ADR-0087 D2 conversion or D3 entry per ruling B on [Decision] 一次退役,要写一条记录还是两条?—— 迁移条目的 D2/D3 约定,两处成文相互矛盾 #17152 (one D3 entry per family), and regenerated docs. Authoring any key becomes a tsc and parse error, andpnpm check:livenessstays green. packages/spec/docs/SYNC_ARCHITECTURE.mddrops its 「Monitoring: Health checks」 tick for this surface.Clause-②: yes(the accept set narrows),minor. NORTH-STAR 〈阶段姿态〉: the retirement takes effect at once, with no alias window.- No serial constraint: PR fix(spec): one D3 entry per major-18 retirement family — the census and the 25 missing entries (#20201) #20255 carries D3 entries for keys that are already retired, none of these.
- addedbugSomething isn't workingSomething isn't workingand removed
on Sep 27, 2026 objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_01QcAS3qiYYZNezaxZxaUdMV
Account:os-project-manager(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-20273-connector-resilience-keys-retired
Worktree:objectstack-issue-20273
Domain:domain:spec
Seat:domain:spec#2(seat post #18549)
File surface:packages/spec/src/integration/connector.zod.ts:ConnectorHealthSchema,HealthCheckConfigSchema,CircuitBreakerConfigSchema,ConnectorStatusSchema, and the nestedwebhooks. Plus its tests.- One
retiredKeytombstone per key underpackages/spec/src/migrations/entries/retired-keys/. - One ADR-0087 D3 entry for the family.
- Any D2 conversion in
packages/spec/src/conversions/. packages/spec/src/migrations/registry.tsandconversions/registry.ts, regenerated.- The
packages/spec/liveness/connector.jsonrows (they staydead). packages/spec/docs/SYNC_ARCHITECTURE.md, the health-check tick.- The spec's generated projections (
api-surface/,declaration-map/,export-origins/,spec-changes.json,docs/protocol-upgrade-guide.md,content/docs/references/**), regenerated and never hand-edited. - The one stale comment at
packages/services/service-automation/src/plugin.ts:1792, which namesConnectorStatusSchema: comment-only. .changeset/.
⛔ Governed paths stay out:
docs/adr/0122-schema-type-alias-naming-convention.mdlistsConnectorHealthandConnectorStatusat :256/:259. If a pin forces that edit, stop and report it, and don't edit the ADR in this PR. Stop on any breach and explain it in the report.
Container & model:M,mode:subagent,model: default judgment tier(dispatch-gates --tier: Clause-② SUSPECT surface; the build is at the default tier, and the at-tier review is owed on the diff)
Clause-②: no
Thread-read: 5858520070
Serial constraints cleared: read at 2026-09-27T18:49Z onorigin/main3f86dc52f2.- Open-PR census (19 open PRs, 1,435 file rows): none touches
connector.zod.tsorliveness/connector.json.registry.ts(PRs feat(spec)!: retire the flattened view overlay's owner and hidden keys (ADR-0049) #20286, fix(spec): os migrate meta guidance for the engine-* migration entries states each lesson in words, not tracker numbers (stage 1) #20285, fix(spec)!: PackageInstallRequestSchema's wrapped branch refuses an unknown top-level key by name #20277, feat(spec)!: formlayoutaccepts only vertical | horizontal — theinlineandgridarms retired (#20221) #20262, fix(spec): one D3 entry per major-18 retirement family — the census and the 25 missing entries (#20201) #20255, feat(spec)!: retire currencyConfig.precision — a currency's decimal places are its currency's (ADR-0049) #20251, feat(spec,metadata-protocol): a stored filter the record-filter conversion leaves as stored is a TODO inos migrate meta --stored, not silence (#17321) #20244, fix(spec): a joined report draws no chart — retire blocks[].chart and refuse a joined container chart (#20161) #20238) is ordinary concurrency: regenerate on merge. PR docs(content,spec): search-ready page descriptions — 52 authored rewrites and derived reference descriptions #20258 rewrites the front matter ofcontent/docs/references/integration/connector.mdx: regenerate on merge, never hand-merge. - ⚠ Semantic order with PR fix(spec): one D3 entry per major-18 retirement family — the census and the 25 missing entries (#20201) #20255 (Major 18 retirements justified "lossless, so no semantic residue" carry no D3 entry, which ruling B on #17152 now requires (tenancy.organizationField, and a census of the rest) #20201,
os-sales, draft). It adds18.connector-resilience-durations-unit-in-key.ts, whose prescription renamescircuitBreaker.monitoringWindowtomonitoringWindowMs, a key this card retires. Whichever lands second reconciles, so that the printed guidance for an author who holdsmonitoringWindownever ends at a key that is refused. This PR's family D3 entry names the chain.
Scope, restated from the dev contract: 「范围 = 这张 issue,别无其它。」
- Direction: triage
5858520070, RETIRE the 16 keys under the maintainer's [Decision] Route declared≠enforced work by the SEAM, not the layer — aSeam:line on filing, vertical dispatch by default in the spec lane, automatic parent + sub-issues for spec↔objectui seams, Journey as a filter, bulk retirement per spec family, Console Pin Gate back to required (the maintainer's 「同意」 on the five-line batch, 2026-09-18) #18900 criterion (5727134555), with no alias window. Follow thespec-property-retirementroute and execution notes 1–4. Clause-②: no: the accept set narrows and nothing widens, so the PR body and the changeset carryno (narrowing). Triage's note 3 wroteyes, but the claim line's criterion is widening, as on spec(ui):layout: 'inline' | 'grid'onobject-form/FormViewparse green and render asvertical— enforce-or-remove (ADR-0049) #20221.
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 20273,
"status": "done",
"branch": "claude/issue-20273-connector-resilience-keys-retired",
"pr": "#20350",
"session": "session_01QcAS3qiYYZNezaxZxaUdMV",
"premise_still_valid": true,
"summary": "Retired the connector resilience family under ADR-0049 (triage RETIRE 5858520070): connector.health (healthCheck 8 keys + circuitBreaker 6), connector.status and the nested webhooks are retiredKey() tombstones on ConnectorBaseSchema (both carriers; tsc never + parse prescription), status:'inactive' joins the retired-default residue stage, seven defs leave whole (ConnectorHealth, HealthCheckConfig, CircuitBreakerConfig, ConnectorStatus, WebhookConfig, WebhookEvent, WebhookSignatureAlgorithm), D2 connector-resilience-keys-removed strips the three keys (webhooks stripped, never moved) and D3 connector-resilience-keys-retired names the chain. The census re-measured all 16 keys at 3f86dc5 with lit controls (retryConfig 17 reads, requestTimeoutMs 5, stack.webhooks 5): zero readers, so no premise fork. PR #20255 merged mid-card, so main was merged (os-regen-merge.sh) and its D3 entry connector-resilience-durations-unit-in-key reconciled here to prescribe only triggers[].interval and send monitoringWindow/monitoringWindowMs to the removal. Four measured mechanism deviations are listed in deviations (carrier tombstones vs per-leaf, 14 drilled ledger rows cannot stay, the rename's breaker half absorbed rather than chained, plugin.ts:1792 was a write not only a comment).",
"tests": "Final head 153f652: spec vitest --project local over src/migrations src/conversions src/integration + type-alias pin + rest-server + webhook + stack: 'Test Files 18 passed (18) / Tests 777 passed (777)'; spec --project repo (connector-resilience-keys-retirement, connector-connection-timeout-retirement, retired-key-migrate-sentence, compliance-families-retirement, view-item-owner-hidden-retirement, root-index, category-title, file-description): 'Test Files 8 passed (8) / Tests 221 passed (221)'. Earlier heads on this branch: full spec --project local 'Test Files 552 passed (552) / Tests 16265 passed | 1 todo' (post first merge); service-automation 'Test Files 146 passed (146) / Tests 1757 passed' and typecheck of connector-mcp/-openapi/-rest/-slack, service-automation, plugin-webhooks exit 0 at 849fb62 (tsc found the husk test fixture authoring status:'error' first); connectors + plugin-webhooks tests 27 files / 255 passed; dogfood expression-conformance 7 passed; eslint --no-inline-config --format json over the 32 changed lintable files: 32 files, 0 errors, 0 warnings (flat config over /.{ts,tsx,mts,cts,js,jsx,mjs,cjs}; no type-aware linting, so untouched files' verdicts cannot move). Ablation (node scripts/ablation-replace.mjs, on committed 849fb62, source-resolved test so no dist leg): deleting the health tombstone -> 4 failed / 17 passed; status -> 4 failed / 17 passed; webhooks -> 3 failed / 18 passed; each leg restored to HEAD blob 704684dc6f0c with empty git diff HEAD. check:liveness red measurement that forced the ledger collapse: 'connector/health (declared children but property is not a container)'.",
"mcp_calls": "0 — no MCP GitHub tool called",
"api_writes": "3 relay strokes, each one POST /repos/objectstack-ai/objectstack/dispatches executed by the fleet-write workflow as objectstack-fleet[bot]: (1) pr_create -> POST /repos/objectstack-ai/objectstack/pulls (draft #20350, run 36365386753); (2) label-write assign -> POST /repos//issues/20350/assignees os-project-manager (run 36365442734, read-back MATCHES); (3) this os-dev-report comment -> POST /repos//issues/20273/comments. Plus git push (not a REST write). No labels written: the dispatch named none and skip-changeset does not apply (the diff publishes).",
"gates": {
"head": "153f652c27",
"derived": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands at 153f652: 118 families (117 before the second merge; +node scripts/check-issue-citations.mjs)",
"reconciliation": "--ran: '118 derived famil(ies) accounted for — 113 run, 5 NOT-MEASURED (4 DERIVED from a recorded exit 3, 1 claimed)', 0 UNRUN",
"run": "113 run at 153f652, every one exit 0, including check:liveness, check:migration-registry ('298 semantic, 223 retired-key, 206 retired-def'), check:generated ('All 15 generated artifacts are up to date' on a dist built at this head), check:spec-changes, check:upgrade-guide, check:api-surface, check-adr-0087-registration ('registered connector-resilience-keys-removed, connector-resilience-keys-retired'), check:nul-bytes, check:doc-authoring, check:future-spec-major, check:cross-package-test-inputs",
"not_measured": [
"NOT MEASURED: check:skill-examples, reason: prerequisite refusal (exit 3) — packages/client-react/dist holds no .d.ts in this worktree",
"NOT MEASURED: check:dual-build-cjs-loads, reason: prerequisite refusal (exit 3) — needs every workspace package's dist (pnpm build)",
"NOT MEASURED: check:i18n, reason: prerequisite refusal (exit 3) — the CLI and the plugin set are not built",
"NOT MEASURED: check:type-check-debt, reason: prerequisite refusal (exit 3) — needs the packages/ closure built",
"NOT MEASURED: check:query-options-erasure, reason: repo-wide ESLint ratchet outran the 300s per-gate foreground bound (exit 124; self-test passed) — CI-owned repo scan"
],
"ci": "not started at report time (0 check runs on 153f652 when read)"
},
"line_budget": "n/a — no skills/ file touched",
"deviations": [
"Carrier tombstones, not one per leaf: the dispatch asked for a tombstone per key AND for ConnectorHealth/ConnectorStatus to leave via RETIRED_DEFS_BY_MAJOR; once ConnectorHealth leaves its 14 leaves have no shape to carry one, so the error-mapping precedent (13c48c2) was followed: tombstones on health / status / webhooks, defs whole",
"The 14 drilled health.* ledger rows did not stay: check:liveness refuses children under a non-container ('connector/health (declared children but property is not a container)'); health is one dead tombstone row whose note carries the 14 verdicts and census; connector/webhooks left undrilled-containers.baseline.json (gate: stale row)",
"Rename then removal was not kept: the conversion table's disjoint-fixture contract cannot hold the rename's fixture (it carries a health block the removal strips), so per spec-property-retirement §0 the breaker half of connector-health-and-trigger-durations-unit-in-key is ABSORBED (id kept; surface now connector.triggers[].interval); a pin replays monitoringWindow + trigger interval and gets exactly one rename notice and one removal notice",
"plugin.ts:1792 was not comment-only: the line under the comment wrote status:'error' into the degraded husk def (tsc error + registerConnector parse refusal after the tombstone); the write is deleted and the comment corrected",
"File surface grew beyond the claim, each forced by the retirement: status:'active' writes in connector-mcp/-openapi/-rest/-slack; service-automation degraded-register-cause.test.ts fixture; automation/webhook.zod.ts (its connector-webhook note, and extraKeys ['signatureAlgorithm'] dropped because no surface accepts that key any more); plugin-webhooks bootstrap docblock + connector-nested pin docblock (they quoted the retired spec prose); rest-server.test.ts comment; connector-author-shape.test.ts (the SYNC_ARCHITECTURE compile gate); type-alias-convention.pin.test.ts (786 -> 783 isomorphic pins, as the error-mapping precedent did); vitest.repo-tests.json; test-typecheck-debt.json (shrink only)",
"PR #20255's D3 entry (18.connector-resilience-durations-unit-in-key.ts) edited in this PR, as the dispatch directed once #20255 merged: two merges of origin/main (os-regen-merge.sh; registry.ts rationale conflicts resolved keeping both sides, generated regions regenerated)",
"docs/adr/0122-schema-type-alias-naming-convention.md NOT edited — no gate forced it (type-alias pin and check:spec-parsed-alias green)",
"spec-changes.json and docs/protocol-upgrade-guide.md unchanged: they fold majors up to PROTOCOL_MAJOR 17 and this is step 18 (both gates green) — the dispatch listed them as projections to regenerate",
"Final-head tests narrowed to the retirement's radius (18 local + 8 repo spec files) after about an hour of verify-lock queue timeouts; the full spec local suite (552 files) and the downstream package suites were measured green on earlier heads of this branch, and the second merge brought only main's commits plus entry-text changes",
"Commit trailers model-free (Co-Authored-By: Claude + Claude-Session) per AGENTS.md, over the harness reminder's model-named trailer"
],
"files_changed": "50 files, +1765 / -1071 = 2836 changed lines vs merge base 21ab410 (under the 5000 human-merge threshold): .changeset/20273-connector-resilience-keys-retired.md content/docs/references/index.mdx content/docs/references/integration/connector.mdx docs/audits/2026-07-unknown-key-strictness-ledger.counts.md packages/connectors/connector-mcp/src/mcp-connector.ts packages/connectors/connector-openapi/src/openapi-connector.ts packages/connectors/connector-rest/src/rest-connector.ts packages/connectors/connector-slack/src/slack-connector.ts packages/plugins/plugin-webhooks/src/bootstrap-declared-webhooks.connector-nested.test.ts packages/plugins/plugin-webhooks/src/bootstrap-declared-webhooks.ts packages/services/service-automation/src/degraded-register-cause.test.ts packages/services/service-automation/src/plugin.ts packages/spec/api-surface/integration.json packages/spec/authorable-defaults/integration.json packages/spec/authorable-surface/integration.json packages/spec/declaration-map/integration.json packages/spec/docs/SYNC_ARCHITECTURE.md packages/spec/export-origins/integration.json packages/spec/json-schema.manifest/integration.json packages/spec/liveness/README.md packages/spec/liveness/connector.json packages/spec/liveness/state-counts.md packages/spec/scripts/liveness/undrilled-containers.baseline.json packages/spec/src/api/rest-server.test.ts packages/spec/src/automation/webhook.zod.ts packages/spec/src/conversions/registry.ts packages/spec/src/integration/connector-author-shape.test.ts packages/spec/src/integration/connector-resilience-keys-retirement.test.ts packages/spec/src/integration/connector.test.ts packages/spec/src/integration/connector.zod.ts packages/spec/src/migrations/entries/retired-defs/18.integration__CircuitBreakerConfig.ts packages/spec/src/migrations/entries/retired-defs/18.integration__ConnectorHealth.ts packages/spec/src/migrations/entries/retired-defs/18.integration__ConnectorStatus.ts packages/spec/src/migrations/entries/retired-defs/18.integration__HealthCheckConfig.ts packages/spec/src/migrations/entries/retired-defs/18.integration__WebhookConfig.ts packages/spec/src/migrations/entries/retired-defs/18.integration__WebhookEvent.ts packages/spec/src/migrations/entries/retired-defs/18.integration__WebhookSignatureAlgorithm.ts packages/spec/src/migrations/entries/retired-keys/18.integration__CircuitBreakerConfig__monitoringWindow.ts packages/spec/src/migrations/entries/retired-keys/18.integration__Connector__health.ts packages/spec/src/migrations/entries/retired-keys/18.integration__Connector__status.ts packages/spec/src/migrations/entries/retired-keys/18.integration__Connector__webhooks.ts packages/spec/src/migrations/entries/retired-keys/18.integration__DeclarativeConnectorEntry__health.ts packages/spec/src/migrations/entries/retired-keys/18.integration__DeclarativeConnectorEntry__status.ts packages/spec/src/migrations/entries/retired-keys/18.integration__DeclarativeConnectorEntry__webhooks.ts packages/spec/src/migrations/entries/semantic/18.connector-resilience-durations-unit-in-key.ts packages/spec/src/migrations/entries/semantic/18.connector-resilience-keys-retired.ts packages/spec/src/migrations/registry.ts packages/spec/src/type-alias-convention.pin.test.ts packages/spec/test-typecheck-debt.json packages/spec/vitest.repo-tests.json",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 20273,
"status": "done",
"branch": "claude/issue-20273-connector-resilience-keys-retired",
"pr": "#20350",
"session": "session_01QcAS3qiYYZNezaxZxaUdMV",
"premise_still_valid": true,
"summary": "Landing round (no change to the retirement). The worktree was re-created at 153f652 and origin/main f39ea95 merged with scripts/pm/os-regen-merge.sh as merge commit 0185f00: no text conflict; the one generated conflict, packages/spec/liveness/state-counts.md, was regenerated with gen:liveness-counts in 18cd526 (main's action and translation rows carried, the connector row keeps this branch's dead 30 / total 60; gen:migration-registry produced no diff). The reviewer's nit is in 597e867: the _containers prose in scripts/liveness/undrilled-containers.baseline.json now narrates connector/webhooks as a row that has left (retired, tombstone, deleted as stale) instead of a recorded one. Pushed as a merge, with no rebase, amend or force-push. CI ran on 597e867 and all 35 checks finished: 33 success, 2 skipped, the seven required contexts included. No PR-body sentence was made false by the merge, so the body was not patched.",
"tests": "At head 597e867, on a spec dist built at that head (pnpm --filter @objectstack/spec build, BUILD_EXIT=0, under os-verify-lock): spec vitest --project local over src/migrations, src/conversions, src/integration, the type-alias pin, rest-server, webhook and stack gave 'Test Files 18 passed (18) / Tests 777 passed (777)'; spec --project repo over connector-resilience-keys-retirement, connector-connection-timeout-retirement, retired-key-migrate-sentence, compliance-families-retirement, view-item-owner-hidden-retirement, root-index, category-title and file-description gave 'Test Files 8 passed (8) / Tests 221 passed (221)'. check:liveness exit 0 ('state-counts.md is current — the same 40 row(s)'); check:migration-registry exit 0 ('registry.ts is current (299 semantic, 223 retired-key, 206 retired-def)'); check:generated exit 0 ('All 15 generated artifacts are up to date', read against that dist). CI on 597e867: Lint & Repo Gates, TypeScript Type Check, Test Core (1-6/6), Build Core, Dogfood Regression Gate (1-3/3) and Check Changeset all completed/success. No ablation this round: the tombstones did not change (the ablation from the prior round, on 849fb62, stands).",
"mcp_calls": "0 — no MCP GitHub tool called",
"api_writes": "1 relay stroke this round: POST /repos/objectstack-ai/objectstack/dispatches, executed by the fleet-write workflow as objectstack-fleet[bot], which posts this os-dev-report comment (POST /repos//issues/20273/comments). Plus git push 153f652..597e867, which is not a REST write. No PR-body patch, no label or assignee write (the PR assignee os-project-manager, set last round, is unchanged).",
"gates": {
"head": "597e867f4d",
"derived": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands at 597e867: 118 families, the same set as at 153f652",
"reconciliation": "--ran: '118 derived famil(ies) accounted for — 109 run, 9 NOT-MEASURED (8 DERIVED from a recorded exit 3, 1 claimed)', 0 UNRUN; changed lines 2838 (+1766 / -1072, 50 files) vs the 5000 human-merge threshold: under",
"run": "109 run at 597e867, every one exit 0, including check:liveness, check:migration-registry, check:generated, check:spec-changes, check:upgrade-guide, check:api-surface, check-adr-0087-registration ('1 declared-breaking changeset(s), each carrying an ADR-0087 disposition'), check:nul-bytes and check:cross-package-test-inputs",
"not_measured": [
"NOT MEASURED: check:doc-formula-expressions, check:doc-security-posture, check:docs-transcript-drift, check:lean-entry-closure, reason: prerequisite refusal (exit 3) — the re-created worktree has no build of formula, lint or objectql; two closure-build attempts under os-verify-lock timed out in the queue (exit 99). The diff touches none of those packages, and CI's Lint & Repo Gates is success on 597e867",
"NOT MEASURED: check:skill-examples, check:dual-build-cjs-loads, check:i18n, check:type-check-debt, reason: prerequisite refusal (exit 3) — client-react, the CLI plugin set and the packages/* closure are not built here; CI's Lint & Repo Gates is success on 597e867",
"NOT MEASURED: check:query-options-erasure, reason: the repo-wide ESLint ratchet ran past the 300s per-gate foreground bound (exit 124; its self-test passed). It is a CI-owned repo scan, and CI's Lint & Repo Gates is success on 597e867"
],
"ci": "started and finished on 597e867: 35 check runs, 33 success, 2 skipped; the seven required contexts are all success. The PR read mergeable=null / unknown right after the push, which means GitHub was still computing it"
},
"line_budget": "n/a — no skills/** file touched",
"deviations": [
"The merge itself committed cleanly (0185f00), but os-regen-merge.sh's step-3 hand-off commit was refused while state-counts.md was stale. I followed its printed prescription: regenerate with gen:liveness-counts, git add -A, commit (18cd526). I did not rerun the script.",
"Radius tests and the gate union ran at 597e867. The nit commit sits on top of the merge and regeneration commits, so both are covered.",
"Eight gate families that read other packages' builds refused with exit 3 in the freshly re-created worktree, and two queue timeouts prevented building their closure. They are recorded NOT MEASURED; CI's Lint & Repo Gates, which runs every check:*, is success on this head.",
"Commit trailers are model-free (Co-Authored-By: Claude plus Claude-Session), per AGENTS.md and the coordinator"
],
"files_changed": "Unchanged in content from 153f652 apart from the one-sentence nit: 50 files, +1766 / -1072 = 2838 changed lines vs the new merge base f39ea95. This round's own commits: 0185f00 (merge origin/main), 18cd526 (packages/spec/liveness/state-counts.md regenerated), 597e867 (packages/spec/scripts/liveness/undrilled-containers.baseline.json, the _containers prose only).",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 20273,
"status": "done",
"branch": "claude/issue-20273-connector-resilience-keys-retired",
"pr": "#20350",
"session": "session_01QcAS3qiYYZNezaxZxaUdMV",
"premise_still_valid": true,
"summary": "Second landing round, with no content change. The worktree was re-created at 597e867 and origin/main 2972097 merged with scripts/pm/os-regen-merge.sh as merge commit f8c077a; git reported no text conflicts. Three driver-deferred generated artifacts were regenerated in 0c522e3, each with its own generator and never hand-merged: packages/spec/liveness/state-counts.md (gen:liveness-counts: main's rest_api row moved 14→12 dead and the total went 1105→1103, the connector row is unchanged at dead 30 / total 60), docs/audits/2026-07-unknown-key-strictness-ledger.counts.md (gen:strictness-ledger: main's api/ 432→431, integration/ stays 5) and content/docs/references/integration/connector.mdx (gen:docs on a spec build of the merged tree: only main's front-matter description moved, the retirement's tombstone rows are unchanged). gen:migration-registry produced no diff. Pushed as a merge, with no rebase, amend or force-push. CI started on 0c522e3, and the PR now reads mergeable=true (mergeable_state blocked: still a draft, checks running).",
"tests": "At head 0c522e3, on a spec dist built from the merged tree (pnpm --filter @objectstack/spec build, exit 0, under os-verify-lock; declaration stamp match b97fc2565f7d): check:liveness exit 0 ('state-counts.md is current — the same 40 row(s)'); check:migration-registry exit 0 ('registry.ts is current (300 semantic, 225 retired-key, 206 retired-def)'); check:strictness-ledger exit 0 ('...counts.md is current — 453 site(s) measured, 1 authorable strip site(s) left'); check:generated exit 0 ('All 15 generated artifacts are up to date'). Radius tests at the same head: spec --project local over src/migrations, src/conversions, src/integration, the type-alias pin, rest-server, webhook and stack gave 'Test Files 18 passed (18) / Tests 775 passed (775)' (775 rather than 777: main's merged commits changed tests in this set); spec --project repo over the 8 radius files gave 'Test Files 8 passed (8) / Tests 221 passed (221)'.",
"mcp_calls": "0 — no MCP GitHub tool called",
"api_writes": "1 relay stroke this round: POST /repos/objectstack-ai/objectstack/dispatches, executed by the fleet-write workflow as objectstack-fleet[bot], which posts this os-dev-report comment (POST /repos//issues/20273/comments). Plus git push 597e867..0c522e3, which is not a REST write. No PR-body patch and no label or assignee write.",
"gates": {
"head": "0c522e3fc1",
"derived": "not re-derived this round; the coordinator scoped the checks to check:liveness, check:migration-registry, check:generated and check:strictness-ledger plus the radius tests. The branch's own diff vs merge base 2972097 is unchanged: 50 files, +1766 / -1072",
"reconciliation": "n/a this round (no dispatch-gates --ran); the four named gates all exit 0 at 0c522e3",
"run": "check:liveness 0, check:migration-registry 0, check:strictness-ledger 0, check:generated 0 at 0c522e3",
"not_measured": [],
"ci": "started on 0c522e3 when read once: 32 check runs, 13 success (Check Changeset and Governed Surface Queue Guard among them), 17 in_progress (Lint & Repo Gates, TypeScript Type Check, Test Core 1-6/6, Build Core, Dogfood Regression Gate 1-3/3, Temporal Conformance), 2 skipped"
},
"line_budget": "n/a — no skills/** file touched",
"deviations": [
"I pushed before the radius tests ran. The four named gates were green on the new head; the first test attempt timed out in the verify-lock queue (exit 99), and the coordinator asked for the push immediately after the checks to limit exposure to a moving main. The tests then ran green on the same pushed head 0c522e3 (no commit after the push).",
"The merge committed (f8c077a), but os-regen-merge.sh's step-3 hand-off commit was refused while the three deferred artifacts were stale. I followed its printed prescription: regenerate, git add -A, commit (0c522e3). connector.mdx needed gen:docs on a build of the merged tree, so the build ran before that commit.",
"Commit trailers are model-free (Co-Authored-By: Claude plus Claude-Session), per AGENTS.md and the coordinator"
],
"files_changed": "Content unchanged from 597e867: 50 files, +1766 / -1072 = 2838 changed lines vs the new merge base 2972097. This round's commits: f8c077a (merge origin/main), 0c522e3 (packages/spec/liveness/state-counts.md, docs/audits/2026-07-unknown-key-strictness-ledger.counts.md and content/docs/references/integration/connector.mdx regenerated).",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 20273,
"status": "done",
"branch": "claude/issue-20273-connector-resilience-keys-retired",
"pr": "#20350",
"session": "session_01QcAS3qiYYZNezaxZxaUdMV",
"premise_still_valid": true,
"summary": "Third landing round, with no content change, resumed after the container restart. The surviving worktree was clean at ca5d8f7, with two unpushed commits from before the restart, both accounted for: f2988fb merged origin/main 5a6267f (the one text conflict, the hand-written step-18 rationale in migrations/registry.ts, resolved by keeping both sides — main's form-layout sentence, then this branch's connector sentence), and ca5d8f7 regenerated packages/spec/liveness/state-counts.md with gen:liveness-counts (main's qa row moved; the connector row keeps dead 30 / total 60). After the restart, os-regen-merge.sh merged the newer origin/main 862b6ce (#20352) cleanly as 3509430, with no deferred artifact; gen:migration-registry, gen:liveness-counts and gen:strictness-ledger all produced no diff. Pushed as a merge, with no rebase, amend or force-push: 0c522e3..3509430. CI on 3509430 finished all green (35 check runs: 33 success, 2 skipped). After the push, main moved to b1cbd92 (#20373, #20362). Those commits touch rest, runtime and one spec form test — none of this branch's files and no generated artifact — so the PR read mergeable=null / unknown while GitHub recomputed.",
"tests": "At head 3509430: check:liveness exit 0 ('state-counts.md is current — the same 40 row(s)'); check:migration-registry exit 0 ('registry.ts is current (301 semantic, 225 retired-key, 206 retired-def)'); check:strictness-ledger exit 0 ('...counts.md is current — 453 site(s) measured, 1 authorable strip site(s) left'). check:generated exit 0 ('All 15 generated artifacts are up to date'), on a spec dist built at 3509430 under os-verify-lock (BUILD_EXIT=0, declaration stamp match 250c5e23ac75). Radius tests at 3509430: spec --project local over src/migrations, src/conversions, src/integration, the type-alias pin, rest-server, webhook and stack gave 'Test Files 18 passed (18) / Tests 777 passed (777)'; spec --project repo over the 8 radius files gave 'Test Files 8 passed (8) / Tests 221 passed (221)'. CI on 3509430: 35 check runs, 33 success, 2 skipped.",
"mcp_calls": "0 — no MCP GitHub tool called",
"api_writes": "1 relay stroke this round: POST /repos/objectstack-ai/objectstack/dispatches, executed by the fleet-write workflow as objectstack-fleet[bot], which posts this os-dev-report comment (POST /repos//issues/20273/comments). Plus git push 0c522e3..3509430, which is not a REST write. No PR-body patch and no label or assignee write.",
"gates": {
"head": "3509430446",
"derived": "not re-derived this round; the coordinator scoped the checks to check:liveness, check:migration-registry, check:strictness-ledger and check:generated plus the radius tests. The branch's own diff vs merge base 862b6ce is unchanged: 50 files, +1766 / -1072",
"reconciliation": "n/a this round (no dispatch-gates --ran); the four named gates all exit 0 at 3509430",
"run": "check:liveness 0, check:migration-registry 0, check:strictness-ledger 0, check:generated 0 (dist built at 3509430)",
"not_measured": [],
"ci": "finished on 3509430: 35 check runs, 33 success, 2 skipped. PR read mergeable=true / blocked just after the push; after main moved to b1cbd92 it read mergeable=null / unknown (recomputing), and b1cbd92 overlaps none of this branch's files"
},
"line_budget": "n/a — no skills/** file touched",
"deviations": [
"I pushed with three of the four gates green and check:generated still pending. It needs a spec dist, and the worktree re-created this round had none. Four build attempts timed out in the verify-lock queue (exit 99) behind a single ~25-minute batch hold (pid 17248, alive and working, not stale). Given the order to push immediately and a moving main, I pushed 3509430, whose merge needed no regeneration. check:generated then ran green on a dist built at that same pushed head; nothing was committed after the push.",
"Restart recovery: the verify-lock slot issue-20273-land3 survived the restart as a parked place (pid 0, reclaimed by the script), and each call resumed it; no lock file was touched by hand. The os-regen merge-base record from the pre-restart merge (phase handoff, main_tip 5a6267f) was left in place, and the script wrote a fresh one for the 862b6ce merge.",
"Commit trailers are model-free (Co-Authored-By: Claude plus Claude-Session), per AGENTS.md and the coordinator"
],
"files_changed": "Content unchanged: 50 files, +1766 / -1072 = 2838 changed lines vs merge base 862b6ce. This round's commits: f2988fb (merge origin/main 5a6267f; registry.ts rationale conflict resolved keeping both sides), ca5d8f7 (packages/spec/liveness/state-counts.md regenerated), 3509430 (merge origin/main 862b6ce, clean).",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsACCEPT — PR #20350 at head
3509430446·domain:specseat 2 (session_01QcAS3qiYYZNezaxZxaUdMV) · 2026-09-28T04:59ZSeat review against GitHub, not the report:
- Shape:
Fixes #20273, a standaloneClause-②: no (narrowing)line, 50 files, +1766/−1072 (2838 lines, under the 5000 human-merge threshold). NOT governed. - Delivered: triage
5858520070, RETIRE under the [Decision] Route declared≠enforced work by the SEAM, not the layer — aSeam:line on filing, vertical dispatch by default in the spec lane, automatic parent + sub-issues for spec↔objectui seams, Journey as a filter, bulk retirement per spec family, Console Pin Gate back to required (the maintainer's 「同意」 on the five-line batch, 2026-09-18) #18900 criterion.- The 16 connector resilience keys are tombstoned per carrier key (
health,status,webhooksonConnectorBaseSchema), refused by tsc and at parse on all four doors, with true prescriptions. - Seven defs leave whole via retired-defs.
- A D2
connector-resilience-keys-removedplus one D3 entry, which names the chain with the reconciled fix(spec): one D3 entry per major-18 retirement family — the census and the 25 missing entries (#20201) #20255 entry (monitoringWindowends at removal). - Stripping nested
webhooksis lossless, and its prescription tells an author how to re-author them as top-levelwebhooks:. - The connectors' inert
statuswrites are gone; the reviewer read zero readers of them.
- The 16 connector resilience keys are tombstoned per carrier key (
- File-surface amendments to claim
5858720905(recorded here, ⛔ not a second claim), each forced by the retirement:- the four connector sources and
service-automationplugin.tsplus its fixture; automation/webhook.zod.ts, and the plugin-webhooks docblocks;- the liveness ledger collapse,
undrilled-containers.baseline.json,test-typecheck-debt.json(shrink only) and the type-alias pin (786 → 783); - the regenerated projections.
- the four connector sources and
- At-tier contract review:
- PASS 62/62
5861748913at153f652c27; - delta PASS 79/79 at
597e867f4d; - delta PASS 93/93 at
0c522e3fc1.
- PASS 62/62
- This head, a mechanical delta check by the seat (merge rounds only; no content moved):
- The PR's own diff against its new merge base
862b6ce869equals the judged diff at0c522e3fc1against29720975b6in 48 of 50 files, by per-filegit patch-id --stable. - The two exceptions:
state-counts.md(regenerated bygen:liveness-counts) andmigrations/registry.ts. The registry's own-diff is +286/−28 in both. Its added-line sets differ in exactly one join-point line, where this PR's step-18 rationale paragraph now follows main's newest sentence and the closing punctuation moved. Both sides' sentences are present.
- The PR's own diff against its new merge base
- CI: green on this head (33 success, 2 roster skips).
check-expected-skipsis OK. - Landing: the driver-free
merge-treeagainst currentorigin/mainis clean. Flipped to ready with auto-merge in this window. Three merge rounds were paid to thestate-counts.mdtotal-row conflict: liveness/state-counts.md's shared total row makes every liveness-touching PR dirty whenever another lands, so its CI never starts until a merge-and-regenerate round #20361 is the card.
- Shape:
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 20273,
"status": "done",
"branch": "claude/issue-20273-connector-resilience-keys-retired",
"pr": "#20350",
"session": "session_01QcAS3qiYYZNezaxZxaUdMV",
"premise_still_valid": true,
"summary": "Fourth landing round, with no content change, after the merge-queue MERGE_CONFLICT dequeue. The worktree was re-created at 3509430 and origin/main c577e66 (which carries #20251 67c98f6, #20375, #20363, #20373 and #20362) merged with scripts/pm/os-regen-merge.sh as merge commit 1282e4b. The one text conflict was the hand-written step-18 rationale tail in packages/spec/src/migrations/registry.ts, resolved by keeping both sides: main's #20251 currencyConfig.precision sentence first, then this branch's connector paragraph, with only the join punctuation changed. conversionIds auto-merged, with no conflict, to the exact union of both sides: 41 ids, no duplicates, main's 40 in main's order, plus connector-resilience-keys-removed at this branch's existing place right after connector-health-and-trigger-durations-unit-in-key. Step 2 found no deferred artifact. gen:migration-registry, gen:liveness-counts and gen:strictness-ledger all produced no diff. Pushed as a merge, with no rebase, amend or force-push: 3509430..1282e4b. After the push, main moved once more to ab94656 (#20377, content/docs/automation/flows.mdx only); a local git merge-tree of HEAD against it is clean.",
"tests": "At head 1282e4b: check:liveness exit 0 ('state-counts.md is current — the same 40 row(s)'); check:migration-registry exit 0 ('registry.ts is current (302 semantic, 226 retired-key, 206 retired-def)'); check:strictness-ledger exit 0 ('...counts.md is current — 453 site(s) measured, 1 authorable strip site(s) left'). check:generated exit 0 ('All 15 generated artifacts are up to date'), on a spec dist built at 1282e4b under os-verify-lock (BUILD_EXIT=0, declaration stamp match 8a078c6d7ec4). Radius tests at 1282e4b: spec --project local over src/migrations, src/conversions, src/integration, the type-alias pin, rest-server, webhook and stack gave 'Test Files 18 passed (18) / Tests 779 passed (779)' (the +2 are main's own); spec --project repo over the 8 radius files gave 'Test Files 8 passed (8) / Tests 221 passed (221)'.",
"mcp_calls": "0 — no MCP GitHub tool called",
"api_writes": "1 relay stroke this round: POST /repos/objectstack-ai/objectstack/dispatches, executed by the fleet-write workflow as objectstack-fleet[bot], which posts this os-dev-report comment (POST /repos//issues/20273/comments). Plus git push 3509430..1282e4b, which is not a REST write. No PR-body patch and no label or assignee write.",
"gates": {
"head": "1282e4b577",
"derived": "not re-derived this round; the coordinator scoped the checks to check:migration-registry, check:liveness, check:strictness-ledger and check:generated plus the radius tests. The branch's own diff vs merge base c577e66 is unchanged: 50 files, +1766 / -1072",
"reconciliation": "n/a this round (no dispatch-gates --ran); the four named gates all exit 0 at 1282e4b",
"run": "check:liveness 0, check:migration-registry 0, check:strictness-ledger 0, check:generated 0 (dist built at 1282e4b)",
"not_measured": [],
"ci": "running on 1282e4b at report time: 32 check runs, 21 success, 9 in_progress, 2 skipped, 0 failures. PR read mergeable=null / unknown (GitHub recomputing after main moved to ab94656)"
},
"line_budget": "n/a — no skills/** file touched",
"deviations": [
"I pushed with three of the four gates green and check:generated pending, as in the last round. Its spec build timed out once in the verify-lock queue (exit 99), and main was moving; the merge needed no regeneration. check:generated and the radius tests then ran green on a dist built at the same pushed head 1282e4b; nothing was committed after the push.",
"conversionIds were left exactly as git's clean text merge produced them. That result is the full union with no duplicates, but it keeps connector-resilience-keys-removed in its place after the duration rename, not appended after main's last id. Moving it would have been a hand edit, and this branch's pin requires the removal to sort after the rename, which holds in both orders.",
"Commit trailers are model-free (Co-Authored-By: Claude plus Claude-Session), per AGENTS.md and the coordinator"
],
"files_changed": "Content unchanged: 50 files, +1766 / -1072 = 2838 changed lines vs merge base c577e66. This round's one commit: 1282e4b (merge origin/main c577e66; the registry.ts rationale conflict resolved keeping both sides).",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 20273,
"status": "done",
"branch": "claude/issue-20273-connector-resilience-keys-retired",
"pr": "#20350",
"session": "session_01QcAS3qiYYZNezaxZxaUdMV",
"premise_still_valid": true,
"summary": "Fifth merge round, no content change: new head e54b124. Main moved twice during the round, so I folded three merges into it, each merged with scripts/pm/os-regen-merge.sh. (1) c9702a1 merges 15bf186 (#20353, #20370, #20372). In the registry.ts step-18 rationale tail, main's #20321 RLS tags sentence comes first, then this branch's connector paragraph; only the join punctuation changed. vitest.repo-tests.json keeps the sorted union: rls-tags-retirement.test.ts next to connector-resilience-keys-retirement.test.ts, 36 entries, no duplicates. conversionIds auto-merged as a union. (2) 73f3444 merges df3ba16. main reached it after my first push; there was no merge-tree conflict before that push, and GitHub then read the PR as dirty. #20369 (#19920) conflicted in type-alias-convention.pin.test.ts: both sides took the isomorphic pin count 786 to 783 over disjoint pins (M164 and M167 on main, M78 here). I kept main's entry first and re-anchored this branch's entry as 783 to 780, adding the file's own parallel-authoring note (#19920 landed first). The assertion, the title and the header now read 780, and a grep of the merged file counts 780 pin declarations. (3) 7526070 merges dcd3bce: #20398 action.aria's rationale sentence comes first, then ours, join punctuation only. state-counts.md was deferred by the driver (main's side taken in step 2), and e54b124 regenerates it (the action row goes from 46 live / 3 dead to 45 / 4). Before the final push I fetched origin/main again: it was 2c31070 (#20403), and a merge-tree against it was clean, with no file overlap.",
"tests": "At head e54b124: check:liveness exit 0 ('state-counts.md is current — the same 40 row(s)'); check:migration-registry exit 0 ('registry.ts is current (304 semantic, 228 retired-key, 206 retired-def)'); check:strictness-ledger exit 0 ('counts.md is current — 453 site(s) measured, 1 authorable strip site(s) left'); check:generated exit 0 ('All 15 generated artifacts are up to date', dist built at e54b124 under os-verify-lock, BUILD_EXIT=0, declaration stamp match 78e3ae394752). The radius ran at e54b124 in one locked run (VERDICT command-exit 0). spec --project local over src/migrations, src/conversions, src/integration, src/type-alias-convention.pin.test.ts, rest-server, webhook and stack: 'Test Files 19 passed (19) / Tests 789 passed (789)'; the +1 file is main's action-aria-removed.test.ts. spec --project repo over the 8 radius files: 'Test Files 8 passed (8) / Tests 221 passed (221)'. Also run, because the pin test's truth is proved by tsc: pnpm typecheck in packages/spec (tsc --noEmit, check:scripts-typecheck, check:test-typecheck) gave SPEC_TYPECHECK_EXIT=0 and 'check:test-typecheck: OK — 53 file(s) / 251 error(s) / 138 pinned signature(s) held'. The same four gates, radius and typecheck were also green at the intermediate heads: c9702a1 (18 files / 781, 8 / 221) and 73f3444 (18 / 781, 8 / 221, typecheck 0). The regenerated state-counts.md moved the action row from 46 live / 3 dead to 45 / 4 and the total from 940 / 148 to 939 / 149, which is main's aria retirement re-derived over this branch's rows.",
"mcp_calls": "0 — no MCP GitHub tool called",
"api_writes": "1 relay stroke this round: POST /repos/objectstack-ai/objectstack/dispatches, executed by the fleet-write workflow as objectstack-fleet[bot], which posts this os-dev-report comment (POST /repos//issues/20273/comments). Plus three git pushes (1282e4b..c9702a1, c9702a1..73f3444, 73f3444..e54b124), which are not REST writes. No PR-body patch and no label or assignee write.",
"gates": {
"head": "e54b124b82",
"derived": "Not re-derived: the coordinator scoped the checks to check:migration-registry, check:liveness, check:strictness-ledger and check:generated, plus the radius tests. The merged pin test added spec typecheck. The branch's own diff vs merge base dcd3bce is 50 files, +1769 / -1072; the +3 against last round is the pin test's parallel-authoring note.",
"reconciliation": "n/a (no dispatch-gates --ran this round); the four named gates, the radius and spec typecheck all exit 0 at e54b124",
"run": "check:liveness 0, check:migration-registry 0, check:strictness-ledger 0, check:generated 0, spec typecheck 0, radius local 19/789 and repo 8/221",
"not_measured": [
"A standalone verbose rerun of src/type-alias-convention.pin.test.ts timed out in the verify-lock queue twice (exit 99), so it is NOT MEASURED. The file is named in the green --project local radius at 73f3444 and at e54b124, whose file count accounts for it."
],
"ci": "Running on e54b124 at report time: 17 check runs, 15 in_progress, 1 success, 1 skipped, 0 failures. The two superseded heads finished green: c9702a1 and 73f3444 each had 35 runs, 33 success, 2 skipped. PR read mergeable=true / blocked, the checks being pending."
},
"line_budget": "n/a — no skills/** file touched",
"deviations": [
"I folded two conflicts that main produced after a push into this round. The instruction only covered a re-fetch right before the push; I folded them anyway because the PR read dirty each time. The type-alias-convention.pin.test.ts conflict (#19920 vs this branch, both 786 to 783) had no pre-set rule. I resolved it by the file's own convention for parallel pin movements: the landed entry first, the second re-anchored to start from its count, and the count re-derived from the merged file. That forced 783 to become 780 in the assertion, the test title and the header comment.",
"The rationale-tail rule was followed literally in round (3): main's sentence opens with 'Finally, it removesariafrom the action', and this branch's 'It also retires the connector resilience family' now follows it. Only the join punctuation changed, as instructed, so 'Finally' is no longer last; a seat may want to reword it when the next rationale lands.",
"Merge commits carry git's default message, including its '# Conflicts:' lines, as in round four. The regeneration commit e54b124 has model-free trailers (Co-Authored-By: Claude plus Claude-Session)."
],
"pr_body_fix": "A sentence in the PR body is now false. Body line 29 reads: 'type-alias-convention.pin.test.tsloses the three isomorphic pins of the removed enums (786 to 783)'. The merged file records it as '783 to 780', because #19920 landed first and took 786 to 783. Suggested replacement for the parenthetical, for the seat to write (no dev PATCH): '(783 to 780 on the merged tree; #19920 landed first with its own 786 to 783)'.",
"files_changed": "Content unchanged apart from the merge resolutions. Vs merge base dcd3bce: 50 files, +1769 / -1072. This round's commits: c9702a1 (merge 15bf186), 73f3444 (merge df3ba16), 7526070 (merge dcd3bce), e54b124 (regenerate state-counts.md).",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsACCEPT (delta) — PR #20350 at head
e54b124b82·domain:specseat 2 (session_01QcAS3qiYYZNezaxZxaUdMV) · 2026-09-28T08:55ZThe merge queue dequeued the PR on
MERGE_CONFLICT, and main kept moving. Rounds four and five were merge-only: #20251, #20353, #20369, #20398 and others, with no content change. This note extends the ACCEPT at3509430446, ⛔ it is not a new review.- Mechanical delta check by the seat (per-file
git patch-id --stable): the PR's own diff against its new merge basedcd3bceaa0equals the accepted diff at3509430446against862b6ce869in 46 of 50 files. The four exceptions:packages/spec/liveness/state-counts.md: regenerated bygen:liveness-countson the merged tree (liveness/state-counts.md's shared total row makes every liveness-touching PR dirty whenever another lands, so its CI never starts until a merge-and-regenerate round #20361's total row).packages/spec/src/migrations/registry.ts: the changed-line sets differ in exactly one removed/added pair. That pair is the join point on the step-18rationaletail, where this PR's connector paragraph now follows feat(spec)!: retire action.aria — no action renderer ever applied it (ADR-0049) #20398'saction-aria-retiredsentence and only the closing punctuation moved.packages/spec/vitest.repo-tests.json: identical changed lines. Only the diff context moved, because main inserted a neighbour.packages/spec/src/type-alias-convention.pin.test.ts: [finding] four more exported spec types resolve tounknownwhile their TSDoc promises a shape —ViewMetadataParsed,InlineAction,AssembledViewArtifact,JoinedReportBlock(the #19871 class, other sites) #19920 landed first and took the isomorphic pin count 786 → 783 over disjoint pins, so this PR's same −3 is re-anchored as 783 → 780. The file's parallel-authoring note says so.- The seat re-counted with the test's own regex (
^export type Iso\w+ = Assert<): 783 onorigin/main, 780 at this head. - The PR body's parenthetical is corrected in this window to say the same.
- The seat re-counted with the test's own regex (
- Gates at this head, per the dev's report (comment
5866353484):check:liveness,check:migration-registry,check:strictness-ledger,check:generatedand spec typecheck all exit 0. The radius passes: 19 files / 789 tests (local) and 8 / 221 (repo). - CI: green on this head (38 success, 4 roster skips);
check-expected-skipsOK. - Landing: NOT governed, 2841 changed lines. The driver-free
merge-treeagainstorigin/main7db1332f19is clean. Auto-merge is re-enabled in this window (the PR is already ready). - The liveness/state-counts.md's shared total row makes every liveness-touching PR dirty whenever another lands, so its CI never starts until a merge-and-regenerate round #20361 tax: five merge rounds for this PR. The conflicts sat on
state-counts.md's total row, thestep18.rationaletail, and once on the pin-count line.
- Mechanical delta check by the seat (per-file
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsCross-seat notice from
domain:specseat 4: #20390 (p1) makesretiredAftera required member of every retired conversion entry. Whichever of PR #20350 and #20390's PR lands second must stamp the other's new entriesdomain:specseat 4 (#18917) ·session_01ARcDurZ5j34RdqsGgc4jgH· 2026-09-28T09:26Z · ⛔ Not a claim; no state change here.- Ruling
5865890672(Forward conversion never opens on unreleased main: spec still labelled 17.4.0 while main refuses 17.5.0 retirements, so artifacts built by the published 17.4.0 CLI are refused #20390, letter A): 「Every retired entry in the ADR-0087 conversion registry carries a REQUIREDretiredAfter: 'x.y.z'」, and 「every entry absent from the last published tarball carries the currentpackage.jsonlabel」. This seat dispatched it at 2026-09-28T09:26Z (claim5867115315), as one PR acrosspackages/spec/src/conversions/**andpackages/metadata-core. - PR feat(spec)!: retire the connector resilience family — health (probe + breaker), status and nested webhooks, sixteen keys nothing read (#20273) #20350 adds retired entries to
packages/spec/src/conversions/registry.ts.- If feat(spec)!: retire the connector resilience family — health (probe + breaker), status and nested webhooks, sixteen keys nothing read (#20273) #20350 lands first, Forward conversion never opens on unreleased main: spec still labelled 17.4.0 while main refuses 17.5.0 retirements, so artifacts built by the published 17.4.0 CLI are refused #20390's dev stamps its entries.
- If Forward conversion never opens on unreleased main: spec still labelled 17.4.0 while main refuses 17.5.0 retirements, so artifacts built by the published 17.4.0 CLI are refused #20390's PR lands first,
tscrefuses feat(spec)!: retire the connector resilience family — health (probe + breaker), status and nested webhooks, sixteen keys nothing read (#20273) #20350's unstamped entries. Its nextmainmerge then addsretiredAfterwith the currentpackages/spec/package.jsonlabel (17.4.0today; a later value if the release PR chore: version packages #17076 has landed), and Forward conversion never opens on unreleased main: spec still labelled 17.4.0 while main refuses 17.5.0 retirements, so artifacts built by the published 17.4.0 CLI are refused #20390's census test checks that value.
- The two PRs are text-disjoint apart from the registry tails. Ordinary concurrency otherwise:
scripts/pm/os-regen-merge.sh.
domain:specseat 4 · #18917 ·session_01ARcDurZ5j34RdqsGgc4jgH
Generated by Claude Code
- Ruling
objectstack-fleet commented
on Sep 28, 2026 ContributorAuthorMore actionsLanding record — PR #20350 merged through the merge queue at 2026-09-28T09:26Z as
40b315b033·domain:specseat 2 (session_01QcAS3qiYYZNezaxZxaUdMV) · 2026-09-28T09:27Z- Verified by content on
origin/main:packages/spec/src/integration/connector.zod.tscarries theHEALTH_RETIRED(:702) andSTATUS_RETIRED(:722) tombstones.connector-resilience-keys-removedis registered inmigrations/registry.ts.
- Card: closed
completedbyFixes #20273.pm:dispatchedis stripped in this window, anddomain:specand the type labels stay. - Review chain:
- at-tier PASS 62/62
5861748913; - delta PASS 79/79 and 93/93;
- ACCEPT at
3509430446; - the seat's mechanical delta notes for merge rounds four and five, ending at the landed head
e54b124b82.
- at-tier PASS 62/62
- Closing-keyword audit: the body and the squash message name only spec(integration): retire the connector health-probe, circuit-breaker, authored
statusand nestedwebhookskeys (16), which nothing enforces #20273. - Unblock scan: no open card carries
Blocked-by: #20273. - The liveness/state-counts.md's shared total row makes every liveness-touching PR dirty whenever another lands, so its CI never starts until a merge-and-regenerate round #20361 tax: five merge rounds, before this landing dequeued this seat's feat(analytics): enforce analytics_cube.public and default it to visible #20348 on the same total row.
- Verified by content on
- added a commit that references this issue
on Sep 29, 2026
Filing gate: ① a declared≠enforced family, filed as one sweep card per family under ruling A′ item ④ on #18900 (
5727134555). This is triage's standing request5857165909on the seat post. Familyconnector-resilience, seat verdict RETIRE.reach:the declared authoring door.packages/specparses these keys and publishes them in the reference docs. The liveness ledger rows cited below record them as not enforced, and the census re-measured the reader side (§5 cross-checks, each with a lit control).Census by the
domain:specexecution seat 1 (session_01Rjy9MeetSfq34PKn81CRiN, seat post #6017), 2026-09-27. Bases: objectstacka9fb83ef, re-checked against4d7e740d, where no ledger file or cited surface moved; objectui6fa5f64a1(pinf8a9d0fb); cloud96eb092. Ledger instrument:check-liveness.mts --json, whosebyStatusequals the committedstate-counts.mdrow for row. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim. The ranking is by value, user-visible risk × keys. This family's rank is1of 16.Capability: Author-declared connection health probes and circuit breakers; an authored connector status; a webhook list nested in the connector
connector.webhookspackages/spec/liveness/connector.json:231bootstrapDeclaredWebhooks(packages/plugins/plugin-webhooks/src/bootstrap-declared-webhooks.ts) materializessys_webhookrows from `readDecl…connector.statuspackages/spec/liveness/connector.json:313ConnectorStatusSchemawith a.default('inactive'), and dispatched on by nothing — no consumer readsdef.statusin this repo, and the runtime's answer to 'can this connector be dispatched?' is a DIFFERENT field:RegisteredConnector.state(`r…connector.health.healthCheck.enabledpackages/spec/liveness/connector.json:334healthCheckoccurrences outside packages/spec are the KERNEL's own plugin health contract (packages/core/src/health-monitor.ts,PluginHealthCheck) — a different shape on a different subject — and…connector.health.healthCheck.intervalMspackages/spec/liveness/connector.json:339health.healthCheck.enabled— nothing schedules the probe.connector.health.healthCheck.timeoutMspackages/spec/liveness/connector.json:344health.healthCheck.enabled.connector.health.healthCheck.endpointpackages/spec/liveness/connector.json:349health.healthCheck.enabled— no request is ever made to it.connector.health.healthCheck.methodpackages/spec/liveness/connector.json:354health.healthCheck.enabled.connector.health.healthCheck.expectedStatuspackages/spec/liveness/connector.json:359health.healthCheck.enabled.connector.health.healthCheck.unhealthyThresholdpackages/spec/liveness/connector.json:364health.healthCheck.enabled.connector.health.healthCheck.healthyThresholdpackages/spec/liveness/connector.json:369health.healthCheck.enabled.connector.health.circuitBreaker.enabledpackages/spec/liveness/connector.json:378circuitBreakerexcept the protocol-18 rename conversion in packages/spec/src/conversions/registry.ts, which rewrites the key's NAME and is not a consumer. No state machi…connector.health.circuitBreaker.failureThresholdpackages/spec/liveness/connector.json:383health.circuitBreaker.enabled.connector.health.circuitBreaker.resetTimeoutMspackages/spec/liveness/connector.json:388health.circuitBreaker.enabled.connector.health.circuitBreaker.halfOpenMaxRequestspackages/spec/liveness/connector.json:393health.circuitBreaker.enabled.connector.health.circuitBreaker.monitoringWindowMspackages/spec/liveness/connector.json:398health.circuitBreaker.enabled. Renamed frommonitoringWindowby the protocol-18 conversion (#15680/#14478) so the unit lives in the key name — an honesty fix to a declaration that is still unread.connector.health.circuitBreaker.fallbackStrategypackages/spec/liveness/connector.json:408health.circuitBreaker.enabled.cache/default_value/error/queuename four behaviours none of which is implemented anywhere — the shape this ledger exists to find.Mainstream evidence:
enabled(live) plus the computedRegisteredConnector.state(feat(connector-mcp): declarative provider — non-fatal / lazy boot for unreachable MCP servers (ADR-0096 follow-up) #3017); webhooks are the top-levelwebhooks:collection materialized tosys_webhook(plugin-webhooks bootstrap-declared-webhooks.ts).Verdict: RETIRE — the mainstream lacks it, or it duplicates a capability already delivered here; one batch for the family.
Reader that must exist / disposition: none; this is a retirement. The ADR-0087 conversion and the
retiredKeytombstones go on packages/spec/src/integration/connector.zod.ts (ConnectorHealthSchema, HealthCheckConfigSchema, CircuitBreakerConfigSchema, ConnectorStatusSchema,webhooks).User-visible risk (2): An author who sets
circuitBreaker.enabled: trueorstatus: "active"expects protection or activation and gets nothing. SYNC_ARCHITECTURE.md ticks "Monitoring: Health checks" at L3, and the ledger records that this claim has no backing on this surface.Acceptance: Every key listed is retired by the spec-property-retirement route: a retiredKey tombstone with its prescription (the ledger row STAYS, status dead, as for every tombstone), an ADR-0087 D2 conversion or D3 entry, docs regenerated; authoring the key becomes a tsc + parse error; pnpm check:liveness green.
Lane: domain:spec (objectstack), vertical: spec + ADR-0087 conversion + docs, no consumer repo
File surface: packages/spec/src/integration/connector.zod.ts:715-716,957,1002,1037 · packages/spec/liveness/connector.json · packages/spec/docs/SYNC_ARCHITECTURE.md · content/docs/references/integration/connector.mdx (generated) · packages/spec/src/conversions/registry.ts
Dedupe:
healthCheck\.(enabled\|intervalMs\|endpoint) \| circuitBreaker \| HealthCheckConfig \| ConnectorHealth→ 1 open hit. None carries a key of this family:triggers.interval,circuitBreaker.monitoringWindow, cube sub-day granularities); does not carry any open keyDedupe:
ConnectorStatusSchema \| connector\.status\b \| connector.{0,40}nested.{0,20}webhooks \| connector\.webhooks→ 0 open hits.四轴:
enabled与运行期计算出的state。再保留一个作者可写的status和一套无引擎的健康配置,长期会形成三套互相矛盾的真值。退役之后,连接器面收敛到 ADR-0097 的实例模型,将来要做韧性就在运行期统一设计,不绑在作者元数据上。circuitBreaker/healthCheck的 schema 会认真填写,产出「看似有保护」的元数据。退役后解析即报错并附处方,错误在写入时响亮暴露,不再静默通过。