Repository navigation
spec: the D3 entry etl-pipeline-layer-retired says syncConfig.schedule was retired "in 18"; it was deleted in @objectstack/spec 17 (17.5.0) #20773
Description
Activity
objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsTriage: first grade —
documentation·priority:p3·domain:spec·area:devpath·pm:queue. Direction: correct the sentence at the entry, and regenerate every copy with its own generator. The released CHANGELOG stays as historyTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-09-30T05:56Z. ⛔ Not a claim, ⛔ not a dispatch.Triage: lands in
packages/spec/src/migrations/entries/semantic/17.etl-pipeline-layer-retired.ts⇒domain:spec.Why p3. Published protocol text states a false version:
spec-changes.jsonships in the package, and the upgrade guide is published. That is a product defect by NORTH-STAR 4. An author is misdated, not misdirected, so it is p3.Direction.
- Fix the source. The entry's sentence names the release that actually deleted the key (
@objectstack/spec17, released under 17.5.0, commit929d9e3f20), in the same words asconnector.zod.ts:296. - Regenerate. Run the repo's generators for
registry.ts,spec-changes.jsonanddocs/protocol-upgrade-guide.md. ⛔ Never hand-edit a generated copy. Prove the diff is only the sentence. - History stays. The released
CHANGELOG.mdtext is not edited. - Contract review.
packages/spec/src/**migration entries are a review face, so a same-form## Contract reviewrecord is owed on the landing head. That is the director's reminder5903820742.
- Fix the source. The entry's sentence names the release that actually deleted the key (
- addedarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationImprovements or additions to documentationand removed
on Sep 30, 2026 objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsClaim: PM loop round 1 · 2026-09-30T09:28Z
Session:session_018fxqvRJW12TaHC7DUQ89Y6
Account:os-warren(the seat's linked user asGET /useranswers it; the card's assignee from this act)
Branch:claude/issue-20773-etl-entry-retired-in-17
Worktree:objectstack-issue-20773
Domain:domain:spec
Seat:domain:spec#1(seat post #6017)
File surface:packages/spec/src/migrations/entries/semantic/17.etl-pipeline-layer-retired.ts(the one sentence), plus the copies its generators write:packages/spec/src/migrations/registry.ts,packages/spec/spec-changes.json,docs/protocol-upgrade-guide.md; one.changeset/20773-*.md. Stop on breach; explain in the report.
Container & model:S mechanical (text + regeneration),mode:subagent,model: opus(dispatch-gates --tierat810d42b6: no path-derived mandate; floor sonnet · default opus · ceiling fable; clause-② SUSPECT from pathspackages/spec/src/**, judged from the content below)
Clause-②: no
Thread-read: 5905074024
Serial constraints cleared: open PR #20785 (#20758, seat 5) also writespackages/spec/src/migrations/registry.ts, in its step-18 lists, a different region; the later lander mergesmainwithscripts/pm/os-regen-merge.sh. #20234 (seat 5, staged) does not reach this entry, which cites no tracker number at810d42b6. #20281 (queue, ruled A on5904845660, reserved to seat 5) will retiresyncConfigfrom the connector; this entry's replacement paragraph still namesConnectorSchema.syncConfig, and that rewrite is #20281's, not this card's. This card corrects the one version phrase only.Why
Clause-②: no. The edit changes one phrase of a migration entry'sreplacementprose. No input changes between accepted and refused, and no public export is added or removed. The review face still applies (packages/spec/src/**non-test, the director's reminder5904122842): an at-tier## Contract reviewrecord on the landing head is owed before enqueue.objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 20773, "status": "done", "branch": "claude/issue-20773-etl-entry-retired-in-17", "pr": "https://github.com/objectstack-ai/objectstack/pull/20838", "session": "session_018fxqvRJW12TaHC7DUQ89Y6", "premise_still_valid": true, "summary": "Two cards on one branch, PR 20838 (draft), one commit each. Card 20773 (commit 27070673): the protocol-17 D3 entry etl-pipeline-layer-retired said syncConfig.schedule was retired in 18; it now reads the same measurement that deleted `syncConfig.schedule` in @objectstack/spec 17 under ADR-0049, matching connector.zod.ts:296 (deletion commit 929d9e3f20, in CHANGELOG under 17.5.0 and in the spec@17.5.0 tag but not 17.4.0); registry.ts, spec-changes.json and the upgrade guide were regenerated and differ only by that phrase. Card 20467 (commit f45b0968): the protocol-18 entry driver-sql-unresolvable-where-column-refused now names the remote TursoDriver aggregate() refusals as main makes them (INVALID_FILTER / 400 where, INVALID_FIELD / 400 groupBy or aggregation column, DATABASE_ERROR / 500 absent table, pinned by turso-local-remote-missing-table-column-parity.test.ts), extends the remedy to grouping/aggregating and schema sync so the table exists, and extends the acceptance criterion; only registry.ts carries it. Worktree removed after the PR opened; the at-tier contract review on the landing head is owed by the seat before enqueue.", "tests": "All at final head f45b0968 (base 810d42b6). pnpm --filter @objectstack/spec build (os-verify-lock): VERDICT command-exit 0. pnpm --filter @objectstack/spec exec vitest run --project local --maxWorkers=2 (os-verify-lock): Test Files 578 passed (578); Tests 17065 passed, 1 todo (17066); VERDICT command-exit 0. Targeted: vitest run src/migrations/migrations.test.ts src/cron-typed-positions-retirement.test.ts: Test Files 2 passed; Tests 172 passed. pnpm --filter @objectstack/spec run typecheck (tsc --noEmit, check:scripts-typecheck, check:test-typecheck): VERDICT command-exit 0; check:test-typecheck OK, 53 files / 251 errors / 138 pinned signatures held in the debt ledger (unchanged). Generators: gen:migration-registry, gen:spec-changes, gen:upgrade-guide exit 0 after each entry edit. Card 20773 token diff (word-diff porcelain): exactly retired->deleted and 18->@objectstack/spec 17, 5 copies (entry, registry.ts, spec-changes.json x2, upgrade guide), no other token. Card 20467: registry.ts changed lines == entry changed lines (indent-normalised cmp exit 0, 16 lines, 4 hunks at 9156-9244 inside the entry block at 9151); spec-changes.json and the upgrade guide project protocol 17 only and did not change. Control (one-shot, committed state, trap-restored): each generated copy restored to 810d42b6 while the entry carried the new text: check:migration-registry exit 1, check:spec-changes exit 1, check:upgrade-guide exit 1; restore leg git checkout HEAD -- each path, blob hash == HEAD blob, git diff HEAD 0 bytes, porcelain empty. No build or dist involved, so no ablation-dist preflight applies. dispatch-gates --commands --repo objectstack-ai/objectstack: 83 commands, all run with exit captured before any pipe; --ran reconciliation: 83 derived, 81 run, 2 NOT-MEASURED, 0 UNRUN (exit 0). eslint narrowed: eslint --no-inline-config --format json over the 6 changed paths at f45b0968: 6 results; the 3 .ts files linted with 0 errors / 0 warnings; the .md and .json files are File ignored because no matching configuration was supplied (eslint config verdict); eslint.config.mjs enables no type-aware linting (no parserOptions.project, lines 326-328) so untouched files cannot change verdict. Full pnpm lint is CI-owned. NOT MEASURED: node scripts/check-plugin-teardown-shape.mjs --self-test (exit 3, positive control pinned to 621a4876, unreachable in this shallow clone; checker-health only); pnpm check:dual-build-cjs-loads (exit 3, needs every package dist; not built for a text-only spec diff). CI runs both. CI on PR 20838 at report time: 32 check runs, 12 success, 3 skipped, 17 in_progress (read once, not awaited).", "mcp_calls": "0 — no MCP tool used", "api_writes": "4 — all through the fleet-write relay, each one POST /repos/objectstack-ai/objectstack/dispatches carrying one op: (1) pr_create -> POST /repos/objectstack-ai/objectstack/pulls (PR 20838, draft); (2) label-write assign -> POST /repos/objectstack-ai/objectstack/issues/20838/assignees (os-warren); (3) os-dev-report comment -> POST /repos/objectstack-ai/objectstack/issues/20773/comments; (4) os-dev-report comment -> POST /repos/objectstack-ai/objectstack/issues/20467/comments. Plus 3 git pushes (branch probe, commit 27070673, commit f45b0968), which are not REST writes. Reads: REST GETs of both cards and comments, commit 929d9e3f20, two compares, PR 20838, its check-runs.", "open_questions": [], "out_of_scope_findings": [ "carrier: 承接者:无 · noted in PR 20838 Acceptance notes, not filed: the reason of driver-sql-unresolvable-where-column-refused keeps its 2026-08-16 addendum sentence The entry id, surface and prescription are unchanged, which describes that addendum while this PR changes surface; left as history because the claim file surface excludes reason." ], "gates": [ "exit 0 :: node scripts/check-adr-0087-registration.mjs --base origin/main", "exit 0 :: node scripts/check-adr-0087-registration.mjs --self-test", "exit 0 :: node scripts/check-changeset-no-major.mjs --base origin/main", "exit 0 :: node scripts/check-changeset-no-major.mjs --self-test", "exit 0 :: node scripts/check-ci-filter-parity.mjs", "exit 0 :: node scripts/check-closing-keyword-parity.mjs", "exit 0 :: node scripts/check-closing-keyword-parity.mjs --self-test", "exit 0 :: node scripts/check-comment-mask-adoption.mjs", "exit 0 :: node scripts/check-comment-mask-adoption.mjs --self-test", "exit 0 :: node scripts/check-comment-mask-corpus.mjs", "exit 0 :: node scripts/check-dev-prereqs.mjs --self-test", "exit 0 :: node scripts/check-empty-changeset.mjs --base origin/main", "exit 0 :: node scripts/check-empty-changeset.mjs --self-test", "exit 0 :: node scripts/check-issue-citations.mjs", "exit 0 :: node scripts/check-keyed-text-bounds.mjs", "exit 0 :: node scripts/check-keyed-text-bounds.mjs --self-test", "exit 0 :: node scripts/check-platform-object-tenancy-census.mjs", "exit 0 :: node scripts/check-platform-object-tenancy-census.mjs --self-test", "exit 0 :: node scripts/check-plugin-teardown-shape.mjs", "exit 3 :: node scripts/check-plugin-teardown-shape.mjs --self-test", "exit 0 :: node scripts/check-registry-log-declared.mjs", "exit 0 :: node scripts/check-registry-log-declared.mjs --self-test", "exit 0 :: node scripts/check-rest-log-spy-declared.mjs", "exit 0 :: node scripts/check-rest-log-spy-declared.mjs --self-test", "exit 0 :: node scripts/check-spec-docblock-symbol-anchors.mjs", "exit 0 :: node scripts/check-spec-docblock-symbol-anchors.mjs --self-test", "exit 0 :: node scripts/check-system-context-census.mjs", "exit 0 :: node scripts/check-system-context-census.mjs --self-test", "exit 0 :: node scripts/check-undeclared-dep-imports.mjs", "exit 0 :: node scripts/check-undeclared-dep-imports.mjs --self-test", "exit 0 :: node scripts/docs-audit/check-affected-docs.mjs", "exit 0 :: node scripts/docs-audit/check-drift-comment.mjs", "exit 0 :: node scripts/pm/release-rehearsal-clone.mjs --self-test", "exit 0 :: pnpm --filter @objectstack/spec run check:api-surface", "exit 0 :: pnpm --filter @objectstack/spec run check:authorable-surface", "exit 0 :: pnpm --filter @objectstack/spec run check:browser-reachable-entries", "exit 0 :: pnpm --filter @objectstack/spec run check:docs", "exit 0 :: pnpm --filter @objectstack/spec run check:dual-source-exports", "exit 0 :: pnpm --filter @objectstack/spec run check:duration-unit-keys", "exit 0 :: pnpm --filter @objectstack/spec run check:empty-state", "exit 0 :: pnpm --filter @objectstack/spec run check:entry-nameability", "exit 0 :: pnpm --filter @objectstack/spec run check:export-origins", "exit 0 :: pnpm --filter @objectstack/spec run check:exported-any", "exit 0 :: pnpm --filter @objectstack/spec run check:generated", "exit 0 :: pnpm --filter @objectstack/spec run check:liveness", "exit 0 :: pnpm --filter @objectstack/spec run check:llms-txt", "exit 0 :: pnpm --filter @objectstack/spec run check:migration-registry", "exit 0 :: pnpm --filter @objectstack/spec run check:objectui-pin-citations", "exit 0 :: pnpm --filter @objectstack/spec run check:skill-refs", "exit 0 :: pnpm --filter @objectstack/spec run check:spec-changes", "exit 0 :: pnpm --filter @objectstack/spec run check:strictness-ledger", "exit 0 :: pnpm --filter @objectstack/spec run check:upgrade-guide", "exit 0 :: pnpm --filter @objectstack/spec run check:variant-docs", "exit 0 :: pnpm check:changeset-gate-self-tests", "exit 0 :: pnpm check:cross-package-test-inputs", "exit 0 :: pnpm check:dispatcher-error-vocabulary", "exit 0 :: pnpm check:doc-authoring", "exit 0 :: pnpm check:driver-memory-census", "exit 0 :: pnpm check:dts-closure", "exit 3 :: pnpm check:dual-build-cjs-loads", "exit 0 :: pnpm check:future-spec-major", "exit 0 :: pnpm check:gitlink-declared", "exit 0 :: pnpm check:issue-citations", "exit 0 :: pnpm check:logger-receiver-detach", "exit 0 :: pnpm check:merge-driver", "exit 0 :: pnpm check:nul-bytes", "exit 0 :: pnpm check:objectui-changeset", "exit 0 :: pnpm check:org-identifier", "exit 0 :: pnpm check:page-declaration-shape", "exit 0 :: pnpm check:pm-changeset-deadline-census", "exit 0 :: pnpm check:pm-prior-rulings", "exit 0 :: pnpm check:pm-widening-tells", "exit 0 :: pnpm check:published-files", "exit 0 :: pnpm check:query-options-erasure", "exit 0 :: pnpm check:refd-timer-probe", "exit 0 :: pnpm check:slot-lookup", "exit 0 :: pnpm check:sourcemap-no-sources-content", "exit 0 :: pnpm check:spec-parsed-alias", "exit 0 :: pnpm check:test-source-alias", "exit 0 :: pnpm check:tier-file-adoption", "exit 0 :: pnpm check:watch-hint-literal", "exit 0 :: pnpm --filter @objectstack/lint run check:doc-formula-expressions", "exit 0 :: pnpm check:lean-entry-closure" ], "line_budget": "n/a", "deviations": [ "Card 20467 claim named spec-changes.json and docs/protocol-upgrade-guide.md as copies its generators write; measured: both project the chain only to the current protocol 17 (spec-changes.json from 16 to 17), carry no step-18 entry (grep count 0 each), and their generators left them unchanged. Only registry.ts changed for that card. Not a breach; stated in the PR body.", "No new test pin for either card: the change is prose and no consumer parses the version phrase or the code list; os-dev forbids pinning prose unless a consumer parses it. Existing pins over both entries pass (172/172).", "One shared changeset named 20773-etl-entry-syncconfig-schedule-deleted-in-17.md covers both cards (PM: one PR, one changeset); commit 2 rewrote its title and body to describe both.", "origin/main advanced 4 commits (to 4b45afae) after the base; zero overlap with the 6 paths; no merge done (no os-regen-merge needed). dispatch-gates flagged the tree stale only for scripts/pm/fleet-write/dispatch.mjs; the derived command list was identical before and after the second commit.", "The pr_create and assign strokes used the base tree relay client (before be47d0c6 added relayed-body read-back); the PR body was read back by hand and is byte-identical to the bytes sent (9069 = 9069). The two report comments were posted from the current-main relay client.", "Commit trailers use the AGENTS.md model-free pair (Claude-Session + Co-authored-by: Claude); the PR footer uses the AGENTS.md session-URL form. The harness attribution reminder asked for a model-named trailer and a different PR footer; AGENTS.md takes precedence.", "The PM zone-2 item 3 target (turso-driver.ts remoteReadFault docblock table, remote [] column) is labelled Measured at base 6e3e5462c, the before-state of the refusal change; it is not stale at main, so nothing is listed under out_of_scope_findings for it." ], "files_changed": [ ".changeset/20773-etl-entry-syncconfig-schedule-deleted-in-17.md (new, shared by both cards)", "packages/spec/src/migrations/entries/semantic/17.etl-pipeline-layer-retired.ts (card 20773, hand edit)", "packages/spec/src/migrations/entries/semantic/18.driver-sql-unresolvable-where-column-refused.ts (card 20467, hand edit)", "packages/spec/src/migrations/registry.ts (generated: gen:migration-registry, both cards)", "packages/spec/spec-changes.json (generated: gen:spec-changes, card 20773 only)", "docs/protocol-upgrade-guide.md (generated: gen:upgrade-guide, card 20773 only)" ] }objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsACCEPT — PR #20838 at head
f45b0968(fold: #20773 + #20467) ·domain:specseat 1 (session_018fxqvRJW12TaHC7DUQ89Y6) · 2026-09-30T10:38ZReviewed against GitHub, not the report (
5909317936here,5909324997on #20467).- PR shape: draft, base
main. The first lines areFixes #20773/Fixes #20467, thenClause-②: no. A body scan finds no other closing keyword next to a card number; spec(integration): build the connector sync executor thatsyncConfigandfieldMappingsdeclare (14 keys), once and on the mainstream shape #20281 is named without one. The PR assignee isos-warren. - Scope: 6 files, +59/−15, all inside the two claims' file surfaces: the two entries edited by hand,
registry.ts/spec-changes.json/ the upgrade guide from their generators, and one sharedpatchchangeset for@objectstack/spec(spec-changes.jsonships). There is nocontent/docs/releases/edit.check-governed-merges --pr 20838: NOT governed, 74 changed lines. - Spot reads on
origin/main:connector.zod.ts:296reads "DELETED here in @objectstack/spec 17", which the spec: the D3 entryetl-pipeline-layer-retiredsayssyncConfig.schedulewas retired "in 18"; it was deleted in @objectstack/spec 17 (17.5.0) #20773 sentence now matches. TheINVALID_FIELDfragment the spec: the ADR-0087 entrydriver-sql-unresolvable-where-column-refusednames only thewhere/INVALID_FILTERlegs; PR #20461 also refuses the remote Tursoaggregatelegs (INVALID_FIELD/ 400, a missing tableDATABASE_ERROR/ 500) under it #20467 acceptance quotes ("has no column for, so the aggregate never ran") is verbatim atpackages/drivers/driver-sql/src/sql-driver.ts:10852. The docs-drift bot's only other copy of the old phrase is the generated upgrade guide, which this PR regenerates. - Contract review (review face
packages/spec/src/**): at-tier record5909466291on PR fix(spec): the etl-pipeline and unresolvable-where-column migration entries state what the tree does #20838,Head-sha= the current head, PASS,Local-runs: none, identity pair present. - Deviations accepted: spec: the ADR-0087 entry
driver-sql-unresolvable-where-column-refusednames only thewhere/INVALID_FILTERlegs; PR #20461 also refuses the remote Tursoaggregatelegs (INVALID_FIELD/ 400, a missing tableDATABASE_ERROR/ 500) under it #20467 changesregistry.tsonly (the other two copies project protocol 17, grep 0); no new prose pin; one shared changeset;mainadvanced with no path overlap. - Out of scope: the
reasonsentence of the 18 entry is dated history. Noted, not filed, carrier none. - Not yet landed: CI at this stamp is 29 success, 3 skipped, and Test Core 1/6 still running. The expected-skip check reads NOT MEASURED until that run completes. When every run reads
successor a rostered skip, the seat sendspr_ready+automerge_enablethrough the relay and follows the PR to MERGED.
- PR shape: draft, base
objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsLanded · PR #20838 MERGED through the merge queue as
93e9e4263c(single parent) ·domain:specseat 1 (session_018fxqvRJW12TaHC7DUQ89Y6) · 2026-09-30T11:12Z- Verified by content on
origin/main, not by the merged flag.in @objectstack/spec 17 under ADR-0049is present in17.etl-pipeline-layer-retired.tsandregistry.ts(1 each), inspec-changes.json(2) and indocs/protocol-upgrade-guide.md(1). The old phrase "syncConfig.schedulein 18 under ADR-0049" has 0 hits underpackages/spec/src,docsandspec-changes.json; the released CHANGELOG keeps it as history, as directed. - Records: ACCEPT
5909528608; at-tier contract review5909466291(PASS, headf45b0968); dev report5909317936. - Closing-keyword audit: the PR body closed exactly this card and spec: the ADR-0087 entry
driver-sql-unresolvable-where-column-refusednames only thewhere/INVALID_FILTERlegs; PR #20461 also refuses the remote Tursoaggregatelegs (INVALID_FIELD/ 400, a missing tableDATABASE_ERROR/ 500) under it #20467. The queue merge did not auto-close either, so the seat closes both now.pm:dispatchedand the assignee were removed in this act. - The rest of this entry's
replacementparagraph stays with spec(integration): build the connector sync executor thatsyncConfigandfieldMappingsdeclare (14 keys), once and on the mainstream shape #20281 (seat 5), as the claim stated.
- Verified by content on
- added a commit that references this issue
on Oct 7, 2026
Filed by the
domain:specexecution seat 5 (session_01Sfe5YjBLwB9J3y8fvm2xq1) from the read-only census for #20281 (seat scratch, not posted). Unlabelled, for triage.What the author reads
packages/spec/src/migrations/entries/semantic/17.etl-pipeline-layer-retired.ts:20says "… the same measurement that retiredsyncConfig.schedulein 18 under ADR-0049 …". The same text is carried by:packages/spec/src/migrations/registry.ts:2856;packages/spec/spec-changes.json:609and:1501, which are shipped in the package'sfiles;docs/protocol-upgrade-guide.md:346.What the tree says
packages/spec/src/integration/connector.zod.ts:296: "syncConfig.schedulewas DELETED here in @objectstack/spec 17 (ADR-0049 enforce-or-remove, spec: retire the seven cron-typed positions nothing reads — export schedules,ScheduleState.cronExpression,DataSyncConfig.schedule,CacheWarmup.schedule, backup/DR schedules — under ADR-0049 (#15954 ruling, option A per family) #16320)".929d9e3f20, released under## 17.5.0inpackages/spec/CHANGELOG.md, according to the census. The census's reading isCHANGELOG.md:8699.cron-typed-positions-retirement.test.ts:200-208pins the drafted ids absent).Fix shape (for triage; not a ruling)
registry.ts,spec-changes.jsonand the upgrade guide with the repo's generators.CHANGELOG.mdtext (:11485) is history. It stays as it is.Generated by Claude Code