Skip to content

docs(adr,skills): ADR-0029, ADR-0126 and the published objectstack-data indexing rule still state the overlay uniqueness key as four parts — bundle_member since 5677add93f (family closure for #23006) #23039

Closed

Description

@objectstack-fleet

Filing gate ①, class (b), family closure. An accepted record, or a shipped skill, states the current overlay uniqueness key, and since 5677add93f (PR #22954, #22877 ruling 6116165299 letter A) that statement is false. The key carries a fifth part, bundle_member. #23006 is the family's first card: it fixes ADR-0005 alone, in PR #23037. This card covers every remaining position, so no single-point cards follow. reach: named producer 5677add93f. Readers: every agent and author who reads these records, plus every customer agent that loads the published objectstack-data skill (North Star 4: skills/** ships).

Filed by domain:skills seat 2 (#19287) · os-justin · session_012dGTuJen61ECNHXYXKChoC, from the #23006 dev report's out_of_scope_findings (comment 6123800633 on #23006), which named the positions. The seat re-read each position on origin/main. ⛔ Not a claim. Lane and grade are triage's.

Positions (read on origin/main at e4a770d6b)

  1. docs/adr/0029-kernel-object-ownership-and-platform-objects-decomposition.md:669: "the overlay-uniqueness index keys on (type, name, organization_id, COALESCE(package_id, '')) (ADR-0005 amendment 2026-08-09, [docs] ADR-0005 的「Index migration」段落描述的是已不存在的机制:addSysMetadataOverlayIndex 已随 #6771 删除,段落还写着 project_id 与 partial 键 #6825)". The argument around it (two packages may each hold an active row for one (type, name)) still holds under the five-part key; only the key's spelling is stale.
  2. docs/adr/0126-packaged-metadata-customization-model.md:313: "the uniqueness index keys on (type, name, organization_id, COALESCE(package_id, '')) (ADR-0005 amendment, [docs] ADR-0005 的「Index migration」段落描述的是已不存在的机制:addSysMetadataOverlayIndex 已随 #6771 删除,段落还写着 project_id 与 partial 键 #6825; …)". Same shape.
  3. skills/objectstack-data/rules/indexing.md:165, published: "The platform does exactly this for its own overlay uniqueness: metadata-protocol's ensureOverlayIndex runs" a four-part CREATE UNIQUE INDEX … ON sys_metadata (type, name, organization_id, COALESCE(package_id, '')) WHERE state = 'active'. The sentence claims what the platform runs, and the platform no longer runs that. The file is under the per-file skills token ratchet: an edit pays for itself with a deletion, or the example is re-cut so it does not restate the platform's key.

The runtime key on the same tree: OVERLAY_INDEX_COLUMNS = ['type', 'name', 'organization_id', 'package_id', OVERLAY_MEMBER_COLUMN] with OVERLAY_MEMBER_COLUMN = 'bundle_member', and both folded through COALESCE(…, '') (packages/metadata-protocol/src/migrations/overlay-index.ts, overlayIndexKeyParts).

Not in this family (seen, not owed here)

Re-check (the enumeration pin)

git grep -n -F "COALESCE(package_id, ''))" origin/main -- docs skills content .claude AGENTS.md

Positive control on the same corpus and instrument: git grep -n -F "idx_sys_metadata_overlay_active" origin/main -- docs skills content .claude AGENTS.md → 7 hits at e4a770d6b (a zero there means the instrument broke, not that the family is closed). At e4a770d6b the pin reads 4 hits: ADR-0005:867 (fixed by PR #23037) plus the three positions above. The card is done when the pin reads 0 hits in present-tense statements; dated historical text that names the key as it was may stay, annotated.

Dedupe

MCP search_issues, closed included:

Dedupe words: overlay key bundle_member family; ADR-0029 overlay uniqueness four parts; ADR-0126 uniqueness index key; objectstack-data indexing.md ensureOverlayIndex example.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer from domain:skills seat 2 (#19287) · session_012dGTuJen61ECNHXYXKChoC · 2026-10-12T12:12Z. ⛔ Not a claim.

    The contract review of PR #23037 (6123969188, PASS) suggests one optional rider for whoever carries this card: the code comment at packages/metadata-core/src/objects/sys-metadata.object.ts:244-249. It says the declared coarse index "still prevents duplicate ACTIVE overlays". Once PR #23037 lands, that comment contradicts ADR-0005's Owner 2 sentence, which now says the index holds no canonical row unique, because it is NULL-distinct on bundle_member. The file is not governed and sits in domain:engine's package. Triage decides whether it rides here or stays an acceptance note; this card's family scope as filed is unchanged.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, documentation · priority:p3 · domain:skills · area:devpath, into pm:queue. The family closure after #23006, sequenced after PR #23037

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

  3. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 (#23039 — the overlay key's fifth part in ADR-0029, ADR-0126 and the published objectstack-data indexing rule; the family closure after #23006) · 2026-10-12T23:15Z
    Session: session_012dGTuJen61ECNHXYXKChoC
    Account: os-justin (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-23039-overlay-key-family-closure
    Worktree: objectstack-issue-23039
    Domain: domain:skills
    Seat: domain:skills#2
    File surface: docs/adr/0029-kernel-object-ownership-and-platform-objects-decomposition.md (the one key statement at :669), docs/adr/0126-packaged-metadata-customization-model.md (the one at :313), skills/objectstack-data/rules/indexing.md (the partial-index example at :155–170, re-cut so it stops restating the platform's own key; net lines ≤ 0, per-file token ratchet whole) (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: ceiling — CONTRACT_REVIEW_TIER; dispatch-gates --tier --repo objectstack-ai/objectstack on the three paths at 36b2889cdd printed 「Model tier — MANDATORY: … (derived from the file surface, not recalled)」 for the published skills/**; no exit is taken: the skill edit is a re-cut, not a one-line mechanical edit
    Clause-②: no
    Responsibility: n/a — not a defect card (class (b): an accepted record and a shipped skill state a key that 5677add93f changed)
    Thread-read: 6124879304
    Ruling-ref: none on this card. Triage's grade 6124879304 gives the direction: the two ADRs take the five-part key in the shape PR #23037 used; the skill's example is re-cut so it teaches the indexing rule without restating the platform's key; the sys-metadata.object.ts code-comment rider does not ride this Tier H PR.
    Resume-from: none
    Serial constraints cleared: PR #23037 (#23006), which this family follows, MERGED as 38d98d8d8. No open PR changes these three files (16 open PRs' file lists read). No in-flight claim names them (every open pm:dispatched claim's file surface read). The enumeration pin reads 3 hits at 36b2889cdd, exactly this card's positions (control idx_sys_metadata_overlay_active: 7 hits).
    Delivery shape: Fixes #23039; Tier H (two ADRs and a published skill), so the PR stays draft until an authorized approval.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 23039,
      "status": "done",
      "branch": "claude/issue-23039-overlay-key-family-closure",
      "pr": "http://github.com/objectstack-ai/objectstack/pull/23111",
      "session": "session_012dGTuJen61ECNHXYXKChoC",
      "premise_still_valid": true,
      "summary": "Draft PR #23111 (Tier H: docs/adr/** and skills/**), one commit 34a834a27 on origin/main 846438024, assignee os-justin, Fixes #23039, Clause-②: no. ADR-0029 D9.9 and ADR-0126 section 7.1 now spell the five-part overlay key (type, name, organization_id, COALESCE(package_id, ''), COALESCE(bundle_member, '')) with provenance pointing at ADR-0005's 2026-08-09 (#6825) and 2026-10-12 (#22877 ruling A) amendments; the arguments around both sentences are untouched and neither ADR gains a status-line entry (both cite the key, neither decides it). skills/objectstack-data/rules/indexing.md's partial-index example is re-cut to an application-shaped index (one pending job per dedup key: the coarse { fields: ['source', 'dedup_key'] } declared in metadata, the unique partial form built in a migration, plain-index fallback on a dialect that rejects the predicate) and keeps the pointer that the platform's own overlay uniqueness is built the same way, without naming its columns or ensureOverlayIndex. A patch changeset for @objectstack/skills rides along (sync-catalog copies the whole skills/ tree into dist; files[] = dist), so no skip-changeset and zero label writes. H1 confirmed on origin/main 846438024 (pin 3, control 7) and on 34a834a27 the pin reads 0 with the control at 6 — the one control hit that left is indexing.md:164, the re-cut example's own CREATE UNIQUE INDEX line. H2 confirmed from the tree (OVERLAY_INDEX_COLUMNS has five columns; package_id and bundle_member fold through COALESCE to ''). H3: both sentences are present-tense statements, so they take the key outright rather than a dated note. H4: net 0 lines, -4 tokens. H5: check:skill-docs reads SKILL.md frontmatter only, check:skill-refs reads references/** only, check:skill-examples reads marked ts fences only — none reaches the edited sql fence.",
      "tests": "Gate derivation on HEAD 34a834a27: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths) found 4 paths vs merge base 846438024 and listed 47 commands (the dispatch's 35 grew by the .changeset/** families). Each ran alone in the foreground with stdout and stderr redirected to its own log file and the exit code read from the shell status immediately after (never through a pipe), appended as 'command :: exit N', then reconciled: 'dispatch-gates --ran: 47 derived famil(ies) accounted for — 45 run, 2 NOT-MEASURED (2 DERIVED from a recorded exit 3)', wrapper exit 0. 45 exit 0, every family the dispatch named among them: check-skills-token-ratchet '54 authored bundle file(s) within their ceilings' and the row line 'skills/objectstack-data/rules/indexing.md is 2198 tokens (ceiling 3241; headroom 1043)'; check:pm-skill-id-lint '87 file(s) clean (pattern /#[0-9]{3,}/g)'; check:skill-compatibility '10 SKILL.md file(s) reconciled against 81 workspace packages'; check:skill-identifier-liveness 'Leg 1: 457 citation(s) over 53 published file(s) checked against 127687 implementation word tokens'; check:adr-anchors 'OK (68 anchored file(s), every governing ADR still referenced; … 44264 citation(s) across 5883 file(s) …)'; check-adr-links '730 relative link destination(s) under docs/adr/'; check:nul-bytes 'OK (scanned 11113 text file(s) … no raw ASCII control bytes)'; check:doc-authoring '53 published skill files clean — no internal issue-id references'; check-adr-0087-registration 'adds no declared-breaking changeset (1 non-breaking changeset(s) seen)'; check-empty-changeset '1 declaring changeset(s) added'; check:doc-formula-expressions '15 predicate(s) … judged clean' after building @objectstack/lint... under the shared verify lock (OS_VERIFY_LOCK_SLOT=issue-23039; 'VERDICT command-exit 0 · held the lock 130s · waited 0s'). NOT MEASURED (exit 3, PREREQUISITE NOT MET): check:dual-build-cjs-loads (loads about 80 packages' built entry points) and check:lean-entry-closure (loads @objectstack/objectql's built entry) — the diff touches no package source, so a full build on the shared box would measure nothing the diff can move; CI builds fresh. Extra, outside the derivation: pnpm --filter @objectstack/spec check:skill-examples exits 3 (client dists absent), NOT MEASURED, and its scan surface (ts fences carrying its marker) does not include the edited sql fence. Control-byte self-scan of the four changed files: no hits. Enumeration pin: git grep -n -F \"COALESCE(package_id, ''))\" -- docs skills content .claude AGENTS.md reads 3 on origin/main 846438024 (ADR-0029:669, ADR-0126:313, indexing.md:165) and 0 on 34a834a27; control idx_sys_metadata_overlay_active reads 7 before and 6 after (indexing.md:164 left; ADR-0005 x4 and cli.json x2 remain). No ablation: no code, no gate script, no test was changed. pnpm lint and the repo-wide farm: not run locally, CI's.",
      "mcp_calls": "0 — no MCP GitHub tool was called. Reads: gh api (single-card REST reads of issue 23039, its comments, and PR 23111 for the read-back). Writes: scripts/pm/fleet-write/dispatch.mjs (route resolved to 'dispatch', session read from the container).",
      "api_writes": "2 — two relay dispatches, each one POST /repos/objectstack-ai/objectstack/dispatches (HTTP 204) that the fleet-write runner executed as objectstack-fleet[bot]: (1) pr_create → POST /repos/objectstack-ai/objectstack/pulls (draft forced) + POST /repos/objectstack-ai/objectstack/issues/23111/assignees (os-justin), run 38323409581 success, read-back 10211 bytes sent = 10211 stored; (2) comment → POST /repos/objectstack-ai/objectstack/issues/23039/comments (this report). Plus two git pushes (the empty-branch probe, exit 0, and the one commit), which are not REST writes. Zero label writes: @objectstack/skills publishes, so skip-changeset is not applicable; the PR's labels documentation/size/s/tooling were set by labeler bots, not by this seat, and were left alone.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: the next PR that touches packages/metadata-core/src/objects/sys-metadata.object.ts (domain:engine) · the code comment at :244-249 ('it still prevents duplicate ACTIVE overlays') still contradicts ADR-0005's Owner 2 sentence after 5677add93f; triage 6124879304 ruled it off this Tier H PR · noted, not filed",
        "carrier: 承接者:无 · docs/qa/platform-checklist/areas/cli.json:1125 recreates the declared index with four columns; the card lists it outside this family (unexercised drift, the step still seeds what it needs) · noted, not filed",
        "carrier: 承接者:无 · skills/objectstack-data/rules/indexing.md:53 says unique: 'organization' materializes as (COALESCE(organization_id, '__global__'), …fields); ADR-0131 D1 forbids a nullable tenant column, so that COALESCE may now describe a shape the driver no longer needs — a read-only inference, SqlDriver.syncDeclaredIndexes not measured, so it is not a finding under the three classes · noted, not filed"
      ],
      "gates": {
        "head": "34a834a27",
        "derivation": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths) — 47 commands, merge base 846438024",
        "reconciliation": "dispatch-gates --ran: 47 derived famil(ies) accounted for — 45 run, 2 NOT-MEASURED (2 DERIVED from a recorded exit 3); exit 0",
        "exit_0": 45,
        "not_measured": [
          "pnpm check:dual-build-cjs-loads :: exit 3 (PREREQUISITE NOT MET — about 80 package dists absent; diff touches no package source)",
          "pnpm check:lean-entry-closure :: exit 3 (PREREQUISITE NOT MET — @objectstack/objectql dist absent; diff touches no package source)"
        ],
        "named_by_dispatch_all_exit_0": [
          "node scripts/check-skills-token-ratchet.mjs",
          "pnpm check:pm-skill-id-lint",
          "pnpm check:skill-compatibility",
          "pnpm check:skill-identifier-liveness",
          "pnpm check:adr-anchors",
          "node scripts/check-adr-links.mjs",
          "pnpm check:nul-bytes"
        ],
        "extra_outside_derivation": [
          "pnpm --filter @objectstack/spec check:skill-examples :: exit 3 (client dists absent; its scan surface does not include the edited sql fence)"
        ],
        "ci": "in_progress — report delivered at local-verification completion; CI convergence is the PM's wait"
      },
      "line_budget": {
        "docs/adr/0029-kernel-object-ownership-and-platform-objects-decomposition.md": {
          "before": 820,
          "after": 821,
          "delta": "+1 (budget ≤ +2)"
        },
        "docs/adr/0126-packaged-metadata-customization-model.md": {
          "before": 433,
          "after": 434,
          "delta": "+1 (budget ≤ +2)"
        },
        "skills/objectstack-data/rules/indexing.md": {
          "before_lines": 230,
          "after_lines": 230,
          "before_tokens": 2202,
          "after_tokens": 2198,
          "ceiling": 3241,
          "delta": "0 lines, -4 tokens (budget: net ≤ 0 lines, tokens not up)"
        },
        "skills/objectstack-data (whole package, 15 .md files)": {
          "before_lines": 3718,
          "after_lines": 3718,
          "before_tokens": 39143,
          "after_tokens": 39139
        }
      },
      "deviations": [
        "The derived gate list is 47 commands, not the 35 the dispatch took on three paths: the .changeset/** path adds its families; all 47 were run or recorded exit 3 — not a deviation in coverage, a note on the count.",
        "Two derived gates recorded exit 3 (PREREQUISITE NOT MET) and are declared NOT MEASURED rather than built for: both load the full built tree, which this docs-and-skill diff cannot move; this is the declared narrowing.",
        "The harness attribution reminder asked for a model-named Co-Authored-By trailer; the commit carries the model-free pair AGENTS.md requires (Claude-Session + Co-authored-by: Claude), which the pre-push hook confirmed ('no model identifier in the trailer pair').",
        "The PR labels documentation/size/s/tooling were applied by labeler bots after creation; this seat wrote no label and did not touch them."
      ],
      "files_changed": [
        "docs/adr/0029-kernel-object-ownership-and-platform-objects-decomposition.md (+4/-3)",
        "docs/adr/0126-packaged-metadata-customization-model.md (+3/-2)",
        "skills/objectstack-data/rules/indexing.md (+9/-9)",
        ".changeset/23039-indexing-partial-example-recut.md (new, @objectstack/skills patch)"
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    REWORK, round 1 (one example) — PR #23111 @ 34a834a27 · seat domain:skills#2 · session_012dGTuJen61ECNHXYXKChoC · 2026-10-13T00:00Z

    The at-tier contract review 6134927768 reads PASS on this head. The seat holds the ACCEPT for one item that review raised (its M1), because the item sits in the published skill an AI author reads.

    skills/objectstack-data/rules/indexing.md now declares the same column pair two ways:

    • line 61: { fields: ['source', 'dedup_key'], unique: 'global' } — one holder across the installation;
    • lines 160–166: the coarse, non-unique { fields: ['source', 'dedup_key'] } plus a unique partial index WHERE status = 'pending' — one pending job per key.

    Each section is right on its own. Read together, as the PR body invites ("describe one table"), they contradict: the global unique already forbids a second job with that key in any status, so the partial index would add nothing. An author who greps dedup_key meets the unique declaration first.

    Patch round sent to the same dev on the same claim:

    1. Re-cut the partial-index example to a table and columns that no other example in the file declares with a different uniqueness, for example one active subscription per account ({ fields: ['account_id'] } declared in metadata; CREATE UNIQUE INDEX … ON subscription (account_id) WHERE status = 'active' in the migration). The dev picks the final shape after reading the file.
    2. Budget against origin/main: net ≤ 0 lines, and tokens not above main's 2202.
    3. The changeset sentence and the PR body sentence that name (source, dedup_key) follow the new example. The PR body's "describe one table" claim goes.

    Nothing else in the PR changes: the two ADR sentences, the changeset level and Clause-②: no stand.

    The review's M2 is a design call for the maintainer: the ADR-0029 and ADR-0126 sentences are rewritten in place inside dated sections rather than left standing with a dated note. It goes to the maintainer in the final quick-read, after the contract review on the patched head.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 23039,
      "status": "done",
      "round": "rework 1 (scope comment 6134947626; contract review 6134927768 M1)",
      "branch": "claude/issue-23039-overlay-key-family-closure",
      "pr": "http://github.com/objectstack-ai/objectstack/pull/23111",
      "head": "9ef34a302 (9ef34a3029ca1e01c7130dedb189e931464d89aa), one commit on top of 34a834a27; merge base with origin/main unchanged at 846438024",
      "session": "session_012dGTuJen61ECNHXYXKChoC",
      "premise_still_valid": true,
      "summary": "The partial-index example in skills/objectstack-data/rules/indexing.md no longer reuses (source, dedup_key), which line 61 of the same file declares unique: 'global'. It is now one *active* subscription per account: the coarse { fields: ['account_id'] } declared in metadata and CREATE UNIQUE INDEX IF NOT EXISTS idx_subscription_account_active ON subscription (account_id) WHERE status = 'active' built in the migration. account_id and subscription appear in no other example of the file (grep over the whole file: status is used only in plain, non-unique examples and query comments; account appears only as an object name in two plain-index naming examples). The rule sentence (coarse index or none in metadata, partial form as raw SQL in a runtime migration, plain-index fallback on a dialect that rejects it) and the platform pointer without its columns are unchanged, as are both ADR sentences, the changeset level (@objectstack/skills patch) and Clause-②: no. The changeset sentence that named the pair now names the new example. origin/main moved to 21c86444e; git merge-tree --write-tree origin/main HEAD exits 0 (clean), so no merge was made, per the scope. Example before (34a834a27): 'One *pending* job per dedup key, the coarse { fields: ['source', 'dedup_key'] } declared in metadata' + 'CREATE UNIQUE INDEX IF NOT EXISTS idx_job_dedup_pending ON job (source, dedup_key) WHERE status = 'pending''. After (9ef34a302): 'One *active* subscription per account, the coarse { fields: ['account_id'] } declared in metadata' + 'CREATE UNIQUE INDEX IF NOT EXISTS idx_subscription_account_active ON subscription (account_id) WHERE status = 'active''.",
      "pr_body": "NOT patched by this seat — CONFLICT FLAGGED: the rework instruction says to update the PR body through the relay (issue_patch on 23111); the os-dev standing clause says the dev writes the PR body once at pr_create, never PATCHes it, and names the edit for the seat to write; on a conflict the standing file wins and the conflict is reported, not quietly chosen. The replacement body is ready, byte-exact, with the session-URL footer: /tmp/claude-0/-home-user/6aafb332-0dd0-5aa8-9c6c-3d8461ba74e3/scratchpad/issue-23039/rework1/pr-body.md (10846 bytes; 0 angle brackets, 0 HTML comments, 0 control bytes; the only closing keyword is line 1 'Fixes #23039'), and the relay payload for it is /tmp/claude-0/-home-user/6aafb332-0dd0-5aa8-9c6c-3d8461ba74e3/scratchpad/issue-23039/rework1/actions-issue-patch.json — dry-run exit 0, nothing sent. Send: node scripts/pm/fleet-write/dispatch.mjs --repo objectstack-ai/objectstack --actions-file PATH --json (PATH = the actions file named above), then read the body back (the relay reports sent vs stored bytes). The 16 replacements, all asserted single-match against the round-1 body: HEAD 34a834a27 → 9ef34a302 in the What-changed heading (one commit → two commits), the pin table, the readings table header and the Gates heading; the indexing.md bullet's tokens 2198 → 2200 and its example sentence 'one *pending* job per dedup key, the coarse { fields: ['source', 'dedup_key'] } …' → 'one *active* subscription per account, the coarse { fields: ['account_id'] } …'; the sentence 'The (source, dedup_key) pair is the one the file's unique: 'global' example already uses, so the declared coarse index and the partial form describe one table.' DELETED and replaced by 'The table and column are ones no other example in the file declares with a different uniqueness (rework round 1, the contract review's M1).'; readings rows 2198 → 2200 and 39139 → 39141; the ratchet line 2198/1043 → 2200/1041 and 'four tokens removed' → 'two tokens removed'; the formula gate's lock figure 130 s → 121 s; a new Acceptance note 6 describing the rework (old note 6 becomes 7) with −4 → −2 tokens; in the 维护者速读: 'token 少 4' → 'token 少 2', the example description '每个去重键至多一条 pending 作业' → '每个账户至多一条 active 订阅', and '这一个 commit' → '两个 commit'.",
      "tests": "Gate derivation on HEAD 9ef34a302: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths) — 4 paths vs merge base 846438024, 47 commands, the same set as round 1. The derivation printed a STALE TREE note (branch 8 commits behind origin/main; scripts/check-verify-stand-in-erasure.mjs, scripts/engine-double-contract.baseline.json and scripts/objectql-double-limit.baseline.json changed on main) — none of the three is among the 47 derived families and the scope forbids a merge on a clean merge-tree, so it is recorded here, not acted on; CI runs the PR against main's merge ref. Each command ran alone in the foreground with stdout and stderr redirected to its own log and the exit code read from the shell status right after (never through a pipe), then reconciled: 'dispatch-gates --ran: 47 derived famil(ies) accounted for — 45 run, 2 NOT-MEASURED (2 DERIVED from a recorded exit 3)', wrapper exit 0. 45 exit 0, including every family the rework named: check-skills-token-ratchet '54 authored bundle file(s) within their ceilings' with the row line 'skills/objectstack-data/rules/indexing.md is 2200 tokens (ceiling 3241; headroom 1041)'; check:pm-skill-id-lint '87 file(s) clean (pattern /#[0-9]{3,}/g)'; check:skill-identifier-liveness 'Leg 1: 457 citation(s) over 53 published file(s) checked against 127687 implementation word tokens (0 ledgered exemption(s))'; check:doc-authoring '53 published skill files clean — no internal issue-id references' and 'sibling-package prose ids hold the baseline'; check:nul-bytes 'OK (scanned 11113 text file(s) … no raw ASCII control bytes)'; the changeset families — check-adr-0087-registration 'adds no declared-breaking changeset (1 non-breaking changeset(s) seen)', check-changeset-no-major (+ self-test), check-empty-changeset 'No changeset from the merge base modified or deleted by this diff' (+ self-test), check:changeset-gate-self-tests, check:objectui-changeset, check:pm-changeset-deadline-census — all exit 0; check:doc-formula-expressions exit 0 after rebuilding @objectstack/lint... under the shared verify lock (OS_VERIFY_LOCK_SLOT=issue-23039; 'VERDICT command-exit 0 · held the lock 121s · waited 0s'); plus check:adr-anchors, check-adr-links, check:skill-compatibility, check:skill-frame-sync, check:published-files and the rest. NOT MEASURED (exit 3, PREREQUISITE NOT MET), as in round 1: check:dual-build-cjs-loads and check:lean-entry-closure — both load the full built tree; the diff touches no package source. Readings on 9ef34a302 vs origin/main 21c86444e (indexing.md identical on 21c86444e and 846438024): lines 230 → 230 (net 0); bytes 8805 → 8798; tokens ceil(bytes/4) 2202 → 2200 (round 1 was 2198; the new example costs 8 bytes more and stays under main's 2202); package skills/objectstack-data lines 3718 → 3718, tokens (sum of per-file counts over 15 .md files) 39143 → 39141. Enumeration pin on the head: git grep -n -F \"COALESCE(package_id, ''))\" -- docs skills content .claude AGENTS.md reads 0; control idx_sys_metadata_overlay_active reads 6 (unchanged from round 1). Control-byte self-scan of the two edited files: no hits. Leftover 'dedup', 'job', 'source' in the partial-index section: none. No ablation: no code, gate script or test changed. Local tree clean; local head = remote head = 9ef34a302.",
      "mcp_calls": "0 — no MCP GitHub tool was called. Reads: gh api (comments 6134947626 and 6134927768, and comment read-backs). Writes: scripts/pm/fleet-write/dispatch.mjs only.",
      "api_writes": "1 — one relay dispatch, POST /repos/objectstack-ai/objectstack/dispatches (HTTP 204), executed by the fleet-write runner as objectstack-fleet[bot]: comment → POST /repos/objectstack-ai/objectstack/issues/23039/comments (this rework report). Plus one git push (9ef34a302, no force), not a REST write. Zero label writes. The PR body was NOT patched (see pr_body: conflict flagged, payload prepared and dry-run for the seat); an issue_patch dry-run sends nothing.",
      "open_questions": [],
      "out_of_scope_findings": [],
      "gates": {
        "head": "9ef34a302",
        "derivation": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths) — 47 commands, merge base 846438024; STALE TREE note recorded (three changed gate files on main, none among the 47)",
        "reconciliation": "dispatch-gates --ran: 47 derived famil(ies) accounted for — 45 run, 2 NOT-MEASURED (2 DERIVED from a recorded exit 3); exit 0",
        "exit_0": 45,
        "not_measured": [
          "pnpm check:dual-build-cjs-loads :: exit 3 (PREREQUISITE NOT MET — package dists absent; diff touches no package source)",
          "pnpm check:lean-entry-closure :: exit 3 (PREREQUISITE NOT MET — @objectstack/objectql dist absent; diff touches no package source)"
        ],
        "named_by_rework_all_exit_0": [
          "node scripts/check-skills-token-ratchet.mjs (row: indexing.md 2200 / 3241)",
          "pnpm check:pm-skill-id-lint",
          "pnpm check:skill-identifier-liveness",
          "pnpm check:doc-authoring",
          "pnpm check:nul-bytes",
          "node scripts/check-adr-0087-registration.mjs --base origin/main",
          "node scripts/check-changeset-no-major.mjs --base origin/main",
          "node scripts/check-empty-changeset.mjs --base origin/main",
          "pnpm check:changeset-gate-self-tests",
          "pnpm check:objectui-changeset",
          "pnpm check:pm-changeset-deadline-census"
        ],
        "ci": "in_progress — report delivered at local-verification completion; CI convergence on 9ef34a302 is the PM's wait"
      },
      "line_budget": {
        "skills/objectstack-data/rules/indexing.md": {
          "main_lines": 230,
          "head_lines": 230,
          "main_tokens": 2202,
          "round1_tokens": 2198,
          "head_tokens": 2200,
          "ceiling": 3241,
          "delta_vs_main": "0 lines, -2 tokens (budget: net ≤ 0 lines, tokens not above 2202)"
        },
        "skills/objectstack-data (whole package, 15 .md files)": {
          "main_lines": 3718,
          "head_lines": 3718,
          "main_tokens": 39143,
          "head_tokens": 39141
        },
        ".changeset/23039-indexing-partial-example-recut.md": {
          "delta": "+1/-1, one sentence; level and Clause-②: no unchanged"
        },
        "docs/adr/0029-kernel-object-ownership-and-platform-objects-decomposition.md": {
          "before": 820,
          "after": 821,
          "delta": "unchanged this round (+1 from round 1)"
        },
        "docs/adr/0126-packaged-metadata-customization-model.md": {
          "before": 433,
          "after": 434,
          "delta": "unchanged this round (+1 from round 1)"
        }
      },
      "deviations": [
        "PR body not patched by this seat: the rework instruction asked for an issue_patch through the relay; the os-dev standing clause forbids a dev PATCH of the PR body and routes the edit to the seat. The standing file wins on a conflict and the conflict is reported here rather than quietly chosen either way. The replacement body and its relay payload are prepared, scanned and dry-run (see pr_body); one dispatch by the seat lands it.",
        "Derivation STALE TREE note: the branch is 8 commits behind origin/main and three gate files changed there; none is among the 47 derived families, the merge-tree is clean, and the scope says no merge unless the branch conflicts — so no merge, recorded only.",
        "Two derived gates recorded exit 3 (PREREQUISITE NOT MET) and are declared NOT MEASURED rather than built for, as in round 1: both load the full built tree, which this docs-and-skill diff cannot move."
      ],
      "files_changed": [
        "skills/objectstack-data/rules/indexing.md (+5/-5 this round; +9/-9 vs origin/main)",
        ".changeset/23039-indexing-partial-example-recut.md (+1/-1 this round; new vs origin/main, @objectstack/skills patch)"
      ]
    }

    Generated by Claude Code

  7. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR #23111 @ 9ef34a302 · seat domain:skills#2 · session_012dGTuJen61ECNHXYXKChoC · 2026-10-13T00:28Z

    Checked against GitHub and origin/main, not the reports (6134762108, rework 6135127432):

    • Shape: draft, base main, first line Fixes #23039, Clause-②: no, assignee os-justin. One @objectstack/skills patch changeset (the package ships skills/** through dist, so skip-changeset would be wrong). Four files: ADR-0029 (+1 line), ADR-0126 (+1 line), skills/objectstack-data/rules/indexing.md (net 0 lines, 2202 → 2200 tokens), the changeset.
    • Content read by the seat:
    • REWORK round 1 (6134947626): the round-1 example reused (source, dedup_key), which line 61 of the same file declares unique: 'global'. Read together the two contradicted, so the example was re-cut. The delta is one example and the sentences that name it. The PR body was patched by this seat (the os-dev rule: a dev writes the body once), read back 10846 bytes sent = stored.
    • CI on this head: 46 check-runs, none red: 38 success, 8 skipped (six path-filtered; the PR body edit re-ran seven pr-automation jobs, all green, two of which skip on a re-run).
    • Contract review: PASS at CONTRACT_REVIEW_TIER on this head, record 6135262550 (previous head 6134927768, PASS, whose M1 the rework answered). The one design call left for the maintainer (M2) rides with the approval and is restated in the final quick-read on the PR.
    • Landing: Tier H (docs/adr/**, skills/**). The PR stays draft; needs-user-decision goes on the PR; review is requested from os-zhuang and hotlong. After an authorized APPROVED review this seat lands it.

    Generated by Claude Code

  8. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed — PR #23111 MERGED as e9e10fdab (merged by os-zhuang through the queue: APPROVED review 5497616973 on 9ef34a302, flipped ready, auto-merge, enqueued) · seat domain:skills#2 · session_012dGTuJen61ECNHXYXKChoC · 2026-10-13T01:21Z

    • Content read on origin/main after the merge: ADR-0029:669 and ADR-0126:313 carry COALESCE(bundle_member, ''), and skills/objectstack-data/rules/indexing.md:164 carries the re-cut example idx_subscription_account_active.
    • The card's enumeration pin (git grep -n -F "COALESCE(package_id, ''))" origin/main -- docs skills content .claude AGENTS.md) reads 0 hits, so the family is closed: ADR-0005 via PR docs(adr): ADR-0005 states the five-part overlay key — bundle_member since 5677add93f (#23006) #23037, the three remaining positions via this PR.
    • The maintainer approved without comment, so the one design call in the quick-read (M2, the in-place ADR rewrite) lands as the PR stood.
    • The card closed by Fixes; pm:dispatched is stripped in this act. The noted-not-filed rider (sys-metadata.object.ts:244-249) rides the next change to that file, per triage 6124879304.

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:skillspriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions