Repository navigation
[finding] os lint / os validate crash on any stack whose mapping authors connectorSource: the ledger row is live with authorWarn: true, and the liveness rule throws its integrity sentinel #21127
Description
Activity
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsTriage: first grade —
bug·priority:p1·domain:spec·area:devpath·pm:queue. Aliverow carries noauthorWarn. It lands before #20639 picks up PR #21084Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-01T08:54Z. ⛔ Not a claim, ⛔ not a dispatch.Why p1.
os validateandos lintcrash on any stack that authorsconnectorSource, measured. It came in with PR #21084 today. The release-priority rule applies, with #21106's timing: the current #20639 head (d01c3cd82d) does not carry #21084, and the next refresh does.Routing.
packages/spec/liveness/**isdomain:spec.Direction.
- The
mapping.connectorSourcerow islive, so it carries noauthorWarn. - "Nothing schedules it until stage ③" is true and author-facing. It moves to the key's describe text, where an author reads it. spec(integration): build the connector sync executor that
syncConfigandfieldMappingsdeclare (14 keys), once and on the mainstream shape #20281's stage ③ removes it. - If the ledger's existing integrity check can refuse
live+authorWarninside its current gate, it does. ⛔ No new gate. - Pin: the card's fixture validates and lints with exit 0. A
plannedrow withauthorWarnstill warns (the control). - Fold: spec: before the next changeset version, the connector-sync release notes contradict each other and the error-code ledger misses two service-automation rows (PR #21084 follow-ups) #21106 (p1, dispatched) is the same PR's other follow-up in the same lane, with the same deadline. Its holder may fold this in, and says so on this card.
Generated by Claude Code
- The
- addedarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingSomething isn't workingpriority:p1High: required for production / M2High: required for production / M2and removed
on Oct 1, 2026 objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsClaim: PM loop round 1 (p1; lands before the next Version Packages refresh) · 2026-10-01T09:48Z
Session:session_017VaLJnYwhPsanVCe9dMCJU
Account:os-bill(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-21127-connector-source-live-row
Worktree:objectstack-issue-21127
Domain:domain:spec
Seat:domain:spec#2(seat post #18549)
File surface:packages/spec/liveness/mapping.json: theprops.connectorSourcerow,livewith noauthorWarn.- The
connectorSourcedescribe text inpackages/spec/src/data/mapping.zod.ts(about:375): it carries "nothing schedules it until stage ③" where an author reads it. - The ledger's existing integrity check, only if it can refuse
live+authorWarninside its current gate. ⛔ No new gate. - The regenerated liveness and reference artefacts the edit moves.
- The pin: the card's fixture validates and lints with exit 0, and a
plannedrow withauthorWarnstill warns. - One
.changeset/21127-*.md.
⛔ Not
packages/lint/src/lint-liveness-properties.ts's louddescribe()sentinel, which stays as designed. Stop on breach and explain in the report.
Container & model:S,mode:subagent,model: opus(dispatch-gates--tier: no path-derived mandate). The at-tier contract review is owed on thepackages/spec/src/**face.
Clause-②: no (a ledger grade and describe prose; no accept set or public surface moves)
Thread-read: 5928085861
Serial constraints cleared: read at this stamp againstorigin/main665cab338f. No open PR touchesliveness/mapping.json,mapping.zod.tsor the liveness lint, and no fleetpm:dispatchedclaim names them. Fold-or-serial with #21106 (triage's offer, same PR #21084 follow-up and deadline): not folded, because fold gate ① fails (release notes and ledger rows there, a liveness grade and describe text here). The files are disjoint, so both run in parallel, each landing before #20639's next refresh. Dispatched under the maintainer's rule 「后续只派 p0 p1 卡」 (5927669243on #18549).
Generated by Claude Code
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsRe-dispatch note ·
domain:specseat 2 (session_017VaLJnYwhPsanVCe9dMCJU) · 2026-10-01T11:27Z · ⛔ Not a new claim: claim5928949500stands (same session, branch and worktree).The session's container restarted while the dev was mid-run. The work survived:
- branch
claude/issue-21127-connector-source-live-row, pushed, at7bc7c5c26(4 commits); - a clean worktree;
- the dev's gate readings and a drafted PR body.
No PR and no report existed. A fresh dev is dispatched to resume from there, not to redo the work: verify, merge current
main, re-run what the merge can move, open the draft PR, and report. The diff already reaches files beyond the claim's listed surface (packages/lint/src/authoring-rules.ts,connector.zod.ts,SYNC_ARCHITECTURE.md, a migration entry). The report names each, and the seat amends the claim at review.
Generated by Claude Code
- branch
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 21127,
"status": "done",
"branch": "claude/issue-21127-connector-source-live-row",
"pr": "#21176",
"session": "session_017VaLJnYwhPsanVCe9dMCJU",
"premise_still_valid": true,
"summary": "This resumes the previous dev's work. Its 4 commits were verified, not redone.origin/mainfde553c was merged in withos-regen-merge.shas b6d58dd: the merge was clean,registry.tsauto-merged as text andcheck:migration-registrythen confirmed it, and no regeneration commit was needed. Every gate the merge could move was re-run on b6d58dd, and draft PR #21176 was opened through the relay withos-billassigned. The fix:mapping.connectorSourcestayslivewithoutauthorWarn/authorHint, and the scheduling caveat moved into the key's.describe().check:liveness, the existing gate, now refuses aliverow withauthorWarnat any depth. The text this made false is corrected in 6 hand-written files beyond the claim surface, plus the pending20919changeset; each is named indeviations. Census on the merged head: 924 rows across 41 ledgers,authorWarnon 2plannedrows and 0liverows, so no second row has this defect. The local worktree is removed after this comment is posted.",
"tests": "All at b6d58dd, the PR head. Fixture door:os validate --jsonexit 0 (valid: true);os lint --jsonexit 0 (passed: true, 1 unrelated warningprotocol/missing-engines-range); the sentinel appears 0 times andconnectorSource0 times. The red reading at the dispatch base 665cab3 is reused (pre-fix, so the merge cannot move it): validate and lint both exit 1, and the sole error is the sentinel. Spec build exit 0.check:generatedexit 0: 'All 15 generated artifacts are up to date'. CLI closure buildturbo run build --filter=@objectstack/cli... --concurrency=2exit 0, 59/59 tasks.check:livenessexit 0: 'author warnings: 2 ledger row(s) opt into authorWarn, at any depth (planned 2); 0 on a live row.'check:strictness-ledgerexit 0. Spec:vitest run scripts/liveness src/data src/integration/connector-sync-retirement.test.ts src/migrationsexit 0, 130 files, 4269 passed, 1 todo. Spec typecheck exit 0.@objectstack/lint, whole package: vitest exit 0, 118 files, 5489 passed; typecheck exit 0.@objectstack/cliunit tier (--project unit test/lint test/validate src/commands/validate src/commands/lint): exit 0, 11 files, 125 passed. The integration door pintest/validate-lint-mapping-connector-source.test.tswas run locally, because the diff adds that integration-tier file: exit 0, 3/3. Lint pins-t 21127: 3 passed. Reverse verification, re-run on b6d58dd with the same result as at 7bc7c5c.ablation-replace.mjsputauthorWarn: trueback on the row: anchor 1 to 0, blob 49cc72e394b8 to 65665b90b21d. The door gave validate exit 1 and lint exit 1, sentinel in both;check:livenessexit 1 ('1 on a live row — FORBIDDEN'); spec pins 2 failed; lint pins 3 failed; CLI door pin 3 failed. Restored: blob == HEAD andgit diff HEADempty. The ledger is read from source, so no dist rebuild was involved. Narrowed eslint (--no-inline-config --format jsonon all 19 changed paths): exit 0. eslint linted 12 and reported 7 (.md/.mdx/.json) as 'no matching configuration'; 0 errors, 0 warnings. The config has no type-aware linting (noparserOptions.project), so the diff cannot move any untouched file's verdict. Derived gates:dispatch-gates.mjs --commands --repo objectstack-ai/objectstackgave 117; all 117 were run, 116 exit 0, 1 exit 1 (check-empty-changeset --base origin/main, red by design, see open_questions).--ran: '117 derived famil(ies) accounted for — 117 run, 0 NOT-MEASURED (a DERIVED zero …)'.check:pm-dispatch-gateswas killed by its timeout at 400s (before the merge) and at 540s, then run detached and waited out with a foregroundtail --pid: exit 0, 'dispatch-gates self-test: 1976 cases pass', 'the battery took 1431.8s on this box'.",
"mcp_calls": "0",
"api_writes": "3 — each one relayrepository_dispatch(POST /repos/objectstack-ai/objectstack/dispatches) executed as objectstack-fleet[bot]: (1) pr_create, POST /repos/objectstack-ai/objectstack/pulls (draft forced), giving #21176; read back 11986 bytes sent, 11986 stored, identical; (2) label-write --assign os-bill, POST /repos//issues/21176/assignees, read back as matching; (3) this os-dev-report comment, POST /repos//issues/21127/comments.git pushof the merge commit b6d58dd is not a REST write. The previous dev'spr_createwas a dry run and sent nothing.",
"open_questions": [
{
"question": "This PR rewrites one sentence of.changeset/20919-spec-connector-source-live.md. That changeset belongs to PR #21084, is pending and unreleased, and saidconnectorSourcerows 'keep authorWarn'. The rewrite is a deliberate correction, socheck-empty-changeset --base origin/mainstays red until a person confirms it. Confirm the correction?",
"options": [
"A — confirm the correction on PR #21176 and keep the rewritten sentence",
"B — restore the original sentence and let this PR's own changeset carry the correction"
],
"recommendation": "A. The pending note describes behaviour this PR changed. Restoring it would publish a false sentence in the same release as the fix, which the gate's own text says never to do. B leaves two contradictory notes for one key in one release."
},
{
"question": "There is a conflict between the order and os-dev.md. The order says@objectstack/linttakes its own patch changeset 'if its published files change'. os-dev.md puts comment-only changes on the non-publishing fast track. The lint diff is comments only (authoring-rules.ts), but tsup keeps comments, sodist/*.jsbytes do change. Which rule applies?",
"options": [
"A — no lint changeset (os-dev.md's comment fast track; os-dev.md wins on conflict)",
"B — add a@objectstack/lintpatch changeset saying a comment changed"
],
"recommendation": "A. No behaviour, export or type an author reaches changes. A release note for a comment would be noise in the CHANGELOG an upgrading agent greps. The seat can override this at review."
}
],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted, not filed.scripts/pm/dispatch-gates.mjs's header says the self-test battery 'runs cap-SIZED, not cap-exceeding … fits inside a quiet container's' foreground cap. Measured on this container at b6d58dd, it took 1431.8s (the tool's own line) while load was 1.06 on 4 cores.check:pm-dispatch-gatesis declared WHOLE-TREE and is derived on every card, so every dev's foreground run of it is killed at the cap (here at 400s and at 540s). This is a drift, not a defect class (a/b/c), so no card was opened. Dedupe words: check:pm-dispatch-gates battery duration, foreground cap, cap-SIZED, dispatch-gates self-test 1976 cases."
],
"deviations": [
"Files beyond the claim's listed surface. Each one is text the row fix made false; the seat amends the claim at review:packages/spec/src/integration/connector.zod.ts(the retired syncConfig prescription said 'authoring the binding warns');packages/spec/src/migrations/entries/semantic/18.connector-sync-keys-retired.ts(the upgrade entry said the same), withpackages/spec/src/migrations/registry.tsregenerated bygen:migration-registry;packages/spec/src/integration/connector-sync-retirement.test.ts(a one-line pin on that prescription text);packages/spec/docs/SYNC_ARCHITECTURE.md('authoring connectorSource still warns');packages/spec/liveness/README.md(the mapping row's note, plus a third authorWarn rule: a live row carries none);packages/lint/src/authoring-rules.ts(comments only);packages/lint/src/runtime-gate.inert-type-writes.test.ts(a comment and a pin: no authoring-rule-threw advisory at the runtime door);packages/lint/src/lint-liveness-properties.test.tsandpackages/cli/test/validate-lint-mapping-connector-source.test.ts(the pins, split across the packages that own each door).packages/lint/src/lint-liveness-properties.ts, the sentinel, is untouched.",
".changeset/20919-spec-connector-source-live.md(PR #21084's pending note) was changed: one sentence was made true.check-empty-changeset --base origin/mainis red by design; this is stated on the PR, andskip-changesetis not applied (see open_questions).",
"No@objectstack/lintchangeset (comment-only; see open_questions for the conflict between the order and os-dev.md).",
"All 117 derived gates were re-run locally on the merged head, not only the named ones.check:pm-dispatch-gatesruns longer than the foreground cap, so it was started detached (setsid, PID recorded) and waited out in the foreground withtail --pid. It exited 0 and nothing of it outlives this turn.",
"Reused readings, whose inputs the merge did not touch: the H1 red at the dispatch base (pre-fix), and the H2 red ofcheck:livenesson the unfixed ledger. The merge changed 0 files under packages/spec/liveness, packages/spec/scripts/liveness and packages/lint. Everything else was re-measured on b6d58dd.",
"The PR body footer uses AGENTS.md's session-URL form, not the harness reminder's attribution lines (AGENTS.md takes precedence). This session added no commit except git's own merge commit, which has no trailers; pre-push confirmed no model identifier and no card trailer.",
"Before the merge, turbo 2.11.5 wrote its agent block into AGENTS.md 4 times. Each was restored withgit checkout HEAD -- AGENTS.mdand never staged. After merging PR #21151 (agentGuidance: false), there were 0 writes across the 59-task build and all 117 gates. Recorded in Acceptance notes; no action needed.",
"Clause-②: nois kept. The spec accept set and public surface are unchanged. The CLI now judges stacks it used to crash on, which is the defect fix, not an accept-set change."
],
"gates": [
"pnpm --filter @objectstack/spec build :: exit 0 (os-verify-lock VERDICT command-exit 0)",
"pnpm --filter @objectstack/spec run check:generated :: exit 0 — All 15 generated artifacts are up to date",
"pnpm exec turbo run build --filter=@objectstack/cli... --concurrency=2 :: exit 0 — 59 successful, 59 total",
"os validate --json (fixture) :: exit 0 — valid: true",
"os lint --json (fixture) :: exit 0 — passed: true, errors 0",
"pnpm --filter @objectstack/spec run check:liveness :: exit 0 — 0 on a live row",
"pnpm --filter @objectstack/spec run check:strictness-ledger :: exit 0",
"pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 scripts/liveness src/data src/integration/connector-sync-retirement.test.ts src/migrations :: exit 0 — 130 files, 4269 passed, 1 todo",
"pnpm --filter @objectstack/spec typecheck :: exit 0",
"pnpm --filter @objectstack/lint exec vitest run --maxWorkers=2 && pnpm --filter @objectstack/lint typecheck :: exit 0 — 118 files, 5489 passed",
"pnpm --filter @objectstack/cli exec vitest run --maxWorkers=2 --project unit test/lint test/validate src/commands/validate src/commands/lint :: exit 0 — 11 files, 125 passed",
"pnpm --filter @objectstack/cli exec vitest run --maxWorkers=2 --project integration test/validate-lint-mapping-connector-source.test.ts :: exit 0 — 3/3",
"pnpm exec eslint --no-inline-config --format json (19 changed paths) :: exit 0 — 12 linted, 7 not configured, 0 errors, 0 warnings",
"node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack :: exit 0 — 117 command(s)",
"117 derived gates run :: 116 exit 0; node scripts/check-empty-changeset.mjs --base origin/main :: exit 1 (deliberate correction, by design)",
"node scripts/pm/dispatch-gates.mjs --ran m-ran.list --repo objectstack-ai/objectstack :: exit 0 — 117 derived famil(ies) accounted for — 117 run, 0 NOT-MEASURED",
"CI: NOT MEASURED here, reason: the PR has just opened and CI convergence belongs to the PM; the head is b6d58dd, and origin/main has since moved to 327391c (not merged)."
],
"line_budget": "none owed: no skills/**",
"files_changed": [
".changeset/20919-spec-connector-source-live.md",
".changeset/21127-connector-source-live-row.md",
"content/docs/references/data/mapping.mdx",
"content/docs/references/integration/connector.mdx",
"packages/cli/test/validate-lint-mapping-connector-source.test.ts",
"packages/lint/src/authoring-rules.ts",
"packages/lint/src/lint-liveness-properties.test.ts",
"packages/lint/src/runtime-gate.inert-type-writes.test.ts",
"packages/spec/docs/SYNC_ARCHITECTURE.md",
"packages/spec/liveness/README.md",
"packages/spec/liveness/mapping.json",
"packages/spec/scripts/liveness/check-liveness.mts",
"packages/spec/scripts/liveness/check-liveness.test.ts",
"packages/spec/src/data/mapping-connector-source.test.ts",
"packages/spec/src/data/mapping.zod.ts",
"packages/spec/src/integration/connector-sync-retirement.test.ts",
"packages/spec/src/integration/connector.zod.ts",
"packages/spec/src/migrations/entries/semantic/18.connector-sync-keys-retired.ts",
"packages/spec/src/migrations/registry.ts"
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsClaim: PM loop round 1 (amendment of claim
5928949500, same session and branch) · 2026-10-01T13:03Z
Session:session_017VaLJnYwhPsanVCe9dMCJU
Account:os-bill(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-21127-connector-source-live-row
Worktree:objectstack-issue-21127(removed by the dev after the PR opened; the branch is the identity)
Domain:domain:spec
Seat:domain:spec#2(seat post #18549)
File surface: as claim5928949500, extended by what PR #21176 carries. Each addition is text the row fix made false, or a pin at a door:packages/spec/src/integration/connector.zod.ts(the retiredsyncConfigprescription) and its one-line pinconnector-sync-retirement.test.ts;packages/spec/src/migrations/entries/semantic/18.connector-sync-keys-retired.ts, withmigrations/registry.tsregenerated;packages/spec/docs/SYNC_ARCHITECTURE.mdandpackages/spec/liveness/README.md;packages/lint/src/authoring-rules.ts(comments only) andruntime-gate.inert-type-writes.test.ts(domain:spec's lint);packages/cli/test/validate-lint-mapping-connector-source.test.ts, the CLI door pin (domain:cli, test-only);.changeset/20919-spec-connector-source-live.md: one sentence of PR feat(service-automation,core,types): the connector sync executor pulls a mapping's connectorSource through the import runner, moved beside bulkWrite #21084's pending note, as a DELIBERATE CORRECTION.
packages/lint/src/lint-liveness-properties.ts's sentinel is untouched. Stop on breach and explain in the report.
Container & model:S,mode:subagent,model: opus(unchanged).
Clause-②: no (unchanged)
Thread-read: 5932014253
Serial constraints cleared: re-read at this stamp. Of the open PRs, only Version Packages #20639 touches any of PR #21176's files (it consumes the pending note). Thedomain:clifile is a new test file only; thedomain:cliseat is not otherwise touched.
Generated by Claude Code
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsACCEPT — PR #21176 at head
b6d58dd044·domain:specseat 2 (session_017VaLJnYwhPsanVCe9dMCJU) · 2026-10-01T13:13ZReviewed against GitHub (the PR object, its file list, its diff and the head's check-runs), not against report
5932014253.-
Shape: draft, base
main, first lineFixes #21127and no other closing keyword,Clause-②: noat line start, apatchchangeset for@objectstack/spec. The PR assignee isos-bill. -
Scope: 19 files, inside claim
5928949500as amended at5932057945. Every addition is text the row fix made false, or a pin.check-governed-merges.mjs --pr 21176says NOT governed. Only Version Packages chore: version packages #20639 touches the corrected pending note, by consuming it. -
What changed:
mapping.connectorSourcestayslivewith noauthorWarn/authorHint, and the stage-③ scheduling caveat moves into the key's describe.check:liveness(the existing gate) refuses aliverow that opts intoauthorWarnat any depth.lint-liveness-properties.ts' sentinel is untouched.
-
Contract review: the at-tier record
5932185728on the PR is a PASS atb6d58dd04427, the head this lands. It answers all four of the seat's questions:- the DELIBERATE CORRECTION of
20919is confirmed sentence by sentence; - the extra files are in family, with no widening;
- no
@objectstack/lintchangeset is owed (comment-only, per os-dev's fast track); - the refusal sits inside the existing gate, and
Clause-②: noholds.
It also records one non-blocking note: the lint flattens only one level of
children, so the new gate is stricter than the lint's read. - the DELIBERATE CORRECTION of
-
The dev's two open questions: answered as A and A by the seat, within its authority, and confirmed by the review: the correction is kept, and no lint changeset is added.
-
Evidence read:
- The door: the card's fixture gives
os validate --jsonandos lint --jsonexit 1 with the sentinel at the base, and exit 0 at the head. - Ablation:
authorWarnrestored on the row turns the door,check:livenessand every pin red; restored to blob equality. - Census: 924 rows in 41 ledgers, with 0
live+authorWarnand 2planned+authorWarn(the controls). - Gates: 117 derived, 116 exit 0, and 1 red by design.
- The door: the card's fixture gives
-
Designed red:
Check Changeset, recorded at the seat's PR comment and confirmed by the same-head PASS. -
CI at
b6d58dd044: landing waits for every check except the recorded designed red. -
Deadline: Version Packages chore: version packages #20639 (
718e74c744) already carries PR feat(service-automation,core,types): the connector sync executor pulls a mapping's connectorSource through the import runner, moved beside bulkWrite #21084 with the crashing row. This lands so that chore: version packages #20639's next refresh carries the fix. The maintainer has been told not to merge chore: version packages #20639 before it. -
Findings: the
check:pm-dispatch-gatesbattery runs about 1,430s, far over the foreground cap its header claims it fits. It is a drift: Acceptance notes, not filed. Carrier: none; it goes to the seat's round report.
Generated by Claude Code
-
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsLanded · PR #21176 MERGED through the merge queue as
9bdc6d3faa(single parentfbcc05f40) ·domain:specseat 2 (session_017VaLJnYwhPsanVCe9dMCJU) · 2026-10-01T14:05Z- Verified by content, not by the merged flag, against the ACCEPTed head
b6d58dd044(at-tier PASS5932185728).- 17 of the 18 authored files have the same blob in the merge commit as at the head.
- The 18th,
packages/lint/src/lint-liveness-properties.test.ts, also moved onmainin between, through PR fix(lint): a liveness finding's fix text never comes from the ledger note, for any row class #21169 (327391c3a). The delta from this head to the merge has the samegit patch-id --stableas fix(lint): a liveness finding's fix text never comes from the ledger note, for any row class #21169's own change (d036f8155343), so this PR's hunks landed intact. - The merge commit is an ancestor of
origin/main.
- On
mainnow:mapping.connectorSourceislivewith noauthorWarn, so a stack whose mapping authorsconnectorSourcevalidates and lints again.check:livenessrefuses alive+authorWarnrow. - The designed red:
Check Changesetwas red by design on the DELIBERATE CORRECTION of20919. It was recorded at5932205970and confirmed by the same-head PASS. - Closing keywords: the body carried
Fixes #21127only. This card closedcompleted, and no other card was named. - Release: Version Packages chore: version packages #20639 still reads
718e74c744, which carries PR feat(service-automation,core,types): the connector sync executor pulls a mapping's connectorSource through the import runner, moved beside bulkWrite #21084's crashing row. Its next refresh picks up this fix. The maintainer was told not to merge chore: version packages #20639 before then. - State:
pm:dispatchedcomes off in this act.
Generated by Claude Code
- Verified by content, not by the merged flag, against the ACCEPTed head
- added 5 commits that reference this issue
on Oct 7, 2026
Filing gate: ① a defect with a named landing site and a measured reach.
packages/spec/liveness/mapping.json→props.connectorSource. Atorigin/mainit readsstatus: "live"together withauthorWarn: true, plus anauthorHint.reach:public doors,os validate --jsonandos lint --json. On adefineStackstack whosemappings[]entry authorsconnectorSource, both exit 1, and the whole error is the internal sentinellintLivenessProperties: ledger entry has unrecognised status "live" … (#11384). That is a crash, not a finding. The runtime mapping door (runRuntimeAuthoringRules({ type: 'mapping', … })) does not block, but it returns anauthoring-rule-threwadvisory carrying the same message.Mechanism (read at
origin/mainby this seat):packages/lint/src/lint-liveness-properties.tsshouldWarnadmits every row withauthorWarn === true, whatever its status.describe()then throws for any status outsideexperimental | planned | dead | live-elsewhere. The throw sits at about:265, and is deliberately loud: "a shipped-ledger integrity bug, not an authoring error".liverow carryingauthorWarnis exactly that mistake.Where it came from: 8368f1c (PR #21084,
Fixes #20919, merged 2026-10-01T07:05Z). It movedconnectorSourcefromplannedtolivewith the connector-pull executor, and kept the row'sauthorWarn: true, whose hint now reads "nothing schedules it until stage ③".Fixture (the #16094 dev's, measured): one object
fx_account, and one mapping{ name, label, sourceFormat: 'json', targetObject: 'fx_account', mode: 'upsert', fieldMapping, connectorSource: { connector: 'crm_api', action: 'request' } }. Both commands exit 1 with the sentinel. The lint module atorigin/main9c8b65aa23, run with tsx against the same ledger, throws identically, so this is not caused by the open liveness PR #21092. That PR changes neithershouldWarn'sauthorWarnarm nordescribe()'s status set.Shape of a fix (not a ruling): re-grade the ledger row. Either drop
authorWarnfrom theliverow and carry the "schedule the pull with ajob" guidance where an author reads it, or keep a warning-bearing status if the stage-③ gap is meant to warn. Either way,describe()stays loud about the inconsistency, as designed.Reader: the lane that owns
packages/spec/liveness/mapping.json(the PR #21084 / #20919 line of work); triage routes it.Duplicate check, taken in the act that filed this card: the 200 most recent issues and PRs, open and closed, titles grepped for
connectorSource|unrecognised status|mapping.*(liveness|crash)|liveness.*live.*authorWarn. The only hit is #21084 itself, the source; there is no duplicate.Found by the #16094 dev (
os-dev-report5927529740on #16094,out_of_scope_findings) when mergingmaininto PR #21092. Filed by thedomain:devxseat 2 PM (session_01JAhu8u8QfBvRjVZDox7CP9). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.Dedupe words:
connectorSource live authorWarn·describe unrecognised status live·mapping liveness sentinel throw·os validate mapping connectorSource crash