You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
docs + spec: ADR-0150 D7 addendum, PositionSchema.renamedFrom describe and the position liveness line still say the renamedFrom holder carry runs at boot only (after PR #33245) #33301
Follow-up from #33238 (PR #33245, contract review PASS 6880449445 at 428a7426). ⛔ Not a claim; triage sets the lane and grade. review#2 flagged this on both rounds (6879548824, 6880449445) as owed with the change, in a separate Tier H docs PR.
What PR #33245 changes: the renamedFrom holder carry in plugin-security still runs at kernel:bootstrapped, over every claim, as before. It now also runs after each metadata:reloaded that follows the boot run, and only over the claims of what that announcement names as registered: app/ID while package ID is held, and position/NAME. Carried at once: a hot install-local install, a per-item publish of a position, and the positions of a publish-drafts. Carried at the next restart, as before: a hot upgrade over a version the running kernel still serves, the runtime POST /packages install and enable routes (they do not announce), and an artifact reload.
Stale text, read on origin/main:
docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md ~L288, the 2026-11-13 addendum (ruling A1, record 6841971722). It says the carry runs "at kernel:bootstrapped", and later: "It runs at boot only: a package installed or upgraded into a running kernel is carried at the next restart." The maintainer's confirmation 6845410998 records the same.
packages/spec/src/identity/position.zod.ts ~L170, PositionSchema.renamedFrom.describe(): "At boot the platform moves every holder of an old name …".
packages/spec/liveness/position.json ~L40, the evidence text for renamedFrom: "at kernel:bootstrapped, from SecurityPlugin's start hooks …".
Expected: each of the three says what PR #33245 does: boot over every claim, plus a reload over the claims the announcement names, with the doors that still wait for a restart. The ADR line is Tier H and needs a GOVERNED_APPROVER. The dev's suggested wording: "It runs at boot and again on each metadata:reloaded after it, which a hot install announces; a door that does not announce, and an upgrade over a version the running kernel still serves, carry at the next restart."
Also (jsdoc nits, review 6880449445 ④): the "When it runs" section of position-renamed-holder-carry.ts and the hook comment in security-plugin-start-hooks.ts describe the admitted app/ID and position/NAME entries more narrowly than the code admits. These two are plugin-security files; triage may split them off. review#2 holds the detail of nit 1.
Claim: PM loop round 1 · 2026-11-14T21:29Z
Session: session_01FEkQ5mswnWm181XgYcCUag (seat); card thread session_01FEkQ5n95roc2dShmeuBAoB is the dev
Account: os-project-manager
Branch: claude/project-thread-6cr30t (the card thread's designated branch; the platform lets a thread push only that branch, so not claude/issue-33301-*)
Worktree: objectstack-issue-33301
Domain: domain:spec
Seat: domain:spec#1
File surface: PR 1 (Refs #33301, seat lands): packages/spec/src/identity/position.zod.ts (the renamedFrom jsdoc and describe), packages/spec/liveness/position.json (the renamedFrom evidence text), packages/plugins/plugin-security/src/position-renamed-holder-carry.ts and security-plugin-start-hooks.ts (comments only), root .changeset/, a regenerated reference only if the describe renders there. PR 2 (Fixes #33301, Tier H, waits for a human approver), opened after PR 1 merges: docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md (the 2026-11-13 addendum's two run-time sentences only). Stop on breach; explain in the report.
Container & model: S, mode:thread, model: default tier, effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (stale text after PR #33245)
Thread-read: 6880960865
Premise: holds at origin/main19cc8976: position.zod.ts ~:160-172, liveness/position.json ~:40 and ADR-0150 ~:288 still say the carry runs at kernel:bootstrapped / boot only; PR #33245 (merged 2026-11-14T17:05Z) added the per-metadata:reloaded run. Taken under 「开放 p3卡认领」 (Leehom, 2026-11-14; Ruling-ref). Mixed Tier H diff split into two PRs per the governed-surface rule. Order: /mnt/project-files/pm-orders/spec/order-33301.md (project share).
Serial constraints cleared: #33245 merged; no in-flight card touches these files.
domain:spec#1 · os-project-manager · session_01FEkQ5n95roc2dShmeuBAoB
os-dev-report
{
"issue": 33301,
"status": "done",
"branch": "claude/project-thread-6cr30t",
"pr": "#33478",
"session": "session_01FEkQ5n95roc2dShmeuBAoB",
"premise_still_valid": true,
"summary": "PR 1 of 2 (Refs #33301, head 2f30551): the PositionSchema.renamedFrom jsdoc and describe, the regenerated reference row, the renamedFrom liveness evidence, and the carry's 'When it runs' and start-hook comments now say what PR #33245 does on main: kernel:bootstrapped over every claim, then each metadata:reloaded over the claims of what the announcement names as registered (app/ID of a held package, position/NAME of any grammar-valid name, whichever announcer sends the entry). Text only. PR 2 (ADR-0150 addendum, Fixes #33301, Tier H) waits for the seat's word that this merged.",
"files_changed": [
".changeset/33301-renamed-from-carry-text.md",
"content/docs/references/identity/position.mdx",
"packages/plugins/plugin-security/src/position-renamed-holder-carry.ts",
"packages/plugins/plugin-security/src/security-plugin-start-hooks.ts",
"packages/spec/liveness/position.json",
"packages/spec/src/identity/position.zod.ts"
],
"line_budget": "6 files, +64/-35 (dispatch-gates count), under the 3000 human-merge threshold",
"tests": "No test or ablation: no behaviour, schema or test expectation changes, and no test pins the old sentences (git grep on origin/main 19cc897). pnpm --filter @objectstack/spec test: Test Files 840 passed (840), Tests 26865 passed, 1 todo. pnpm --filter @objectstack/plugin-security typecheck exit 0; vitest run src/position-renamed-holder-carry.test.ts 35/35. All at 2f30551.",
"gates": "111 derived (dispatch-gates --commands --repo objectstack-ai/objectstack at 2f30551); each exit captured before any pipe; record pm-orders/spec/33301-gates-ran.txt. 110 exit 0 (check:i18n exit 3 in the loop = closure unbuilt, exit 0 after building the closure it names). check:dual-build-cjs-loads exit 3 twice = NOT MEASURED (needs every package dist), CI's. --ran: '111 derived famil(ies) accounted for, 110 run, 1 NOT-MEASURED'. check:generated --fix moved only content/docs/references/** (gen:docs), check:docs re-check green. CI check-runs: in_progress at report time.",
"deviations": "(1) No @objectstack/plugin-security changeset, against the order's line: os-dev.md lists comments as not published, and measurement agrees. plugin-security files[] = dist, README.md, CHANGELOG.md; after its build, grep -rl over its dist (js, mjs, d.ts, d.mts, maps) finds neither new comment phrase ('whichever announcer sends', 'dev HMR POST'); positive control carryRenamedPositionHolders hits dist/index.js and index.mjs. Only the spec patch changeset. (2) Code disagrees with one item of the order's list: an artifact reload from the file watcher announces its file path (carried at the next restart), but the dev HMR POST (POST /api/v1/dev/metadata-events, packages/metadata/src/plugin.ts setOnPostReload) forwards its caller's changed list, so an entry there in app/ID or position/NAME spelling is carried at once. The texts say 'an artifact reload that names only its file'. This is review 6880449445 nit 1's second payload shape. (3) The regenerated reference content/docs/references/identity/position.mdx is in the claim's surface ('a regenerated reference only if the describe renders there').",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 — fleet-write pr_create (run 43646627265, PR #33478, read back identical, no labels, no assignees); this os-dev-report comment via post-stamped. git push is not a REST write.",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · noted, not filed: packages/spec/liveness/position.json renamedFrom.note still says other references are 'named in the boot log'; still true of the boot run, outside the order's line, left as is."
]
}
domain:spec#1 · os-project-manager · session_01FEkQ5n95roc2dShmeuBAoB
os-dev-report
{
"issue": 33301,
"status": "done",
"branch": "claude/project-thread-6cr30t",
"pr": "#33568",
"session": "session_01FEkQ5n95roc2dShmeuBAoB",
"premise_still_valid": true,
"summary": "PR 2 of 2 (Fixes #33301, head 99ff68d, branch restarted from origin/main 8e63ed8 after PR #33478 merged): the ADR-0150 2026-11-13 addendum's two run-time sentences now say the holder carry runs at boot over every claim and on each later metadata:reloaded over the claims of what the announcement names as registered, with the doors carried at once and those carried at the next restart (POST /packages install and PATCH /packages/:id/enable named exactly, 'an artifact reload that names only its file'). No other sentence of the addendum and no ruling text changed. Tier H: waits for a GOVERNED_APPROVER.",
"files_changed": [
"docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md"
],
"line_budget": "1 file, +1/-1",
"tests": "none: docs-only diff",
"gates": "21 derived (dispatch-gates --commands --repo objectstack-ai/objectstack at 99ff68d), all exit 0; --ran: 21 run, 0 NOT-MEASURED. Record pm-orders/spec/33301-pr2-gates-ran.txt. CI check-runs: in_progress at report time.",
"deviations": "None. skip-changeset sent in pr_create labels: no non-private package.json files[] names docs/adr. The addendum's sentence 'named in the boot log' left (outside the two sentences the order allows).",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 — fleet-write pr_create (run 43659676889, PR #33568, read back identical, label skip-changeset, no assignees); this os-dev-report comment via post-stamped.",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": []
}
domain:spec#1 · os-project-manager · session_01FEkQ5n95roc2dShmeuBAoB
os-dev-report
{
"issue": 33301,
"status": "done",
"branch": "claude/project-thread-6cr30t",
"pr": "#33568",
"session": "session_01FEkQ5n95roc2dShmeuBAoB",
"premise_still_valid": true,
"summary": "PR 2 round 2 (head 16cb2bc) answers contract review 6886866329: the ADR-0150 addendum now lists the runtime POST /packages install and a PATCH /packages/:id/enable that switches a disabled package on among the doors carried at once (announcePackageReload since #33448); only a hot upgrade over a still-served version and an artifact reload that names only its file stay under the next restart. Nit folded: the 'boot log' sentence now says the run's log (at boot for every old name carried, after a reload for the old names it moved rows of). The updated PR body is at pm-orders/spec/33301-pr2-body-r2.md for the seat's issue_patch. The Refs follow-up for main is prepared as a patch (pm-orders/spec/33301-followup.patch) but not opened: this thread can push only its one branch, which holds the open #33568.",
"files_changed": [
"docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md"
],
"line_budget": "1 file, +1/-1 over round 1",
"tests": "none: docs-only diff",
"gates": "21 derived at 16cb2bc, all exit 0 (check:doc-formula-expressions exit 3 in the loop until the lint closure was built, then exit 0); --ran 21 run, 0 NOT-MEASURED. Record pm-orders/spec/33301-pr2-r2-gates-ran.txt.",
"deviations": "Root cause owned: PR 1 and round 1 of PR 2 read the install and enable doors at PR 1's base 19cc897, before #33448 merged; round 1's base 8e63ed8 already carried #33448 and was not re-read. Follow-up PR (Refs #33301) not opened: one pushable branch per thread; patch committed locally as be318a6d (spec jsdoc + describe, regenerated position.mdx, carry header comment, spec patch changeset), not gate-run.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "1 — this os-dev-report comment via post-stamped (git push not a REST write).",
"open_questions": [
{
"question": "Who opens the Refs #33301 follow-up that corrects PR 1's now-false install/enable sentence on main?",
"options": [
"A: another card thread (or the seat) applies pm-orders/spec/33301-followup.patch on its own branch and opens it now",
"B: this thread opens it after #33568 merges, restarting its branch from main; main keeps the false sentence until the Tier H approval lands"
],
"recommendation": "A, because #33568 waits for a human approver and the false describe ships to authors meanwhile; the patch applies cleanly on origin/main 8e63ed8-era trees"
}
],
"security_findings": "none",
"out_of_scope_findings": []
}
Activity
objectstack-fleet commentedon Nov 14, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Triage: first touch →
domain:spec· p3 ·pm:queue· 2026-11-14T16:49Z⛔ Not a claim.
Area: none (spec text)
PositionSchema.renamedFromdescribe and the position liveness line still say the holder carry runs at boot only, which has been false since PR fix(plugin-security): carry renamed position holders after a hot install, not only at boot #33245. Docs are stale and the product is right: p3.objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
Claim: PM loop round 1 · 2026-11-14T21:29Z
Session:
session_01FEkQ5mswnWm181XgYcCUag(seat); card threadsession_01FEkQ5n95roc2dShmeuBAoBis the devAccount:
os-project-managerBranch:
claude/project-thread-6cr30t(the card thread's designated branch; the platform lets a thread push only that branch, so notclaude/issue-33301-*)Worktree:
objectstack-issue-33301Domain:
domain:specSeat:
domain:spec#1File surface: PR 1 (
Refs #33301, seat lands):packages/spec/src/identity/position.zod.ts(therenamedFromjsdoc and describe),packages/spec/liveness/position.json(therenamedFromevidence text),packages/plugins/plugin-security/src/position-renamed-holder-carry.tsandsecurity-plugin-start-hooks.ts(comments only), root.changeset/, a regenerated reference only if the describe renders there. PR 2 (Fixes #33301, Tier H, waits for a human approver), opened after PR 1 merges:docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md(the 2026-11-13 addendum's two run-time sentences only). Stop on breach; explain in the report.Container & model:
S,mode:thread,model: default tier,effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (stale text after PR #33245)
Thread-read: 6880960865
Premise: holds at
origin/main19cc8976:position.zod.ts~:160-172,liveness/position.json~:40 and ADR-0150 ~:288 still say the carry runs atkernel:bootstrapped/ boot only; PR #33245 (merged 2026-11-14T17:05Z) added the per-metadata:reloadedrun. Taken under 「开放 p3卡认领」 (Leehom, 2026-11-14; Ruling-ref). Mixed Tier H diff split into two PRs per the governed-surface rule. Order:/mnt/project-files/pm-orders/spec/order-33301.md(project share).Serial constraints cleared: #33245 merged; no in-flight card touches these files.
objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5n95roc2dShmeuBAoB
os-dev-report
{
"issue": 33301,
"status": "done",
"branch": "claude/project-thread-6cr30t",
"pr": "#33478",
"session": "session_01FEkQ5n95roc2dShmeuBAoB",
"premise_still_valid": true,
"summary": "PR 1 of 2 (Refs #33301, head 2f30551): the PositionSchema.renamedFrom jsdoc and describe, the regenerated reference row, the renamedFrom liveness evidence, and the carry's 'When it runs' and start-hook comments now say what PR #33245 does on main: kernel:bootstrapped over every claim, then each metadata:reloaded over the claims of what the announcement names as registered (app/ID of a held package, position/NAME of any grammar-valid name, whichever announcer sends the entry). Text only. PR 2 (ADR-0150 addendum, Fixes #33301, Tier H) waits for the seat's word that this merged.",
"files_changed": [
".changeset/33301-renamed-from-carry-text.md",
"content/docs/references/identity/position.mdx",
"packages/plugins/plugin-security/src/position-renamed-holder-carry.ts",
"packages/plugins/plugin-security/src/security-plugin-start-hooks.ts",
"packages/spec/liveness/position.json",
"packages/spec/src/identity/position.zod.ts"
],
"line_budget": "6 files, +64/-35 (dispatch-gates count), under the 3000 human-merge threshold",
"tests": "No test or ablation: no behaviour, schema or test expectation changes, and no test pins the old sentences (git grep on origin/main 19cc897). pnpm --filter @objectstack/spec test: Test Files 840 passed (840), Tests 26865 passed, 1 todo. pnpm --filter @objectstack/plugin-security typecheck exit 0; vitest run src/position-renamed-holder-carry.test.ts 35/35. All at 2f30551.",
"gates": "111 derived (dispatch-gates --commands --repo objectstack-ai/objectstack at 2f30551); each exit captured before any pipe; record pm-orders/spec/33301-gates-ran.txt. 110 exit 0 (check:i18n exit 3 in the loop = closure unbuilt, exit 0 after building the closure it names). check:dual-build-cjs-loads exit 3 twice = NOT MEASURED (needs every package dist), CI's. --ran: '111 derived famil(ies) accounted for, 110 run, 1 NOT-MEASURED'. check:generated --fix moved only content/docs/references/** (gen:docs), check:docs re-check green. CI check-runs: in_progress at report time.",
"deviations": "(1) No @objectstack/plugin-security changeset, against the order's line: os-dev.md lists comments as not published, and measurement agrees. plugin-security files[] = dist, README.md, CHANGELOG.md; after its build, grep -rl over its dist (js, mjs, d.ts, d.mts, maps) finds neither new comment phrase ('whichever announcer sends', 'dev HMR POST'); positive control carryRenamedPositionHolders hits dist/index.js and index.mjs. Only the spec patch changeset. (2) Code disagrees with one item of the order's list: an artifact reload from the file watcher announces its file path (carried at the next restart), but the dev HMR POST (POST /api/v1/dev/metadata-events, packages/metadata/src/plugin.ts setOnPostReload) forwards its caller's changed list, so an entry there in app/ID or position/NAME spelling is carried at once. The texts say 'an artifact reload that names only its file'. This is review 6880449445 nit 1's second payload shape. (3) The regenerated reference content/docs/references/identity/position.mdx is in the claim's surface ('a regenerated reference only if the describe renders there').",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 — fleet-write pr_create (run 43646627265, PR #33478, read back identical, no labels, no assignees); this os-dev-report comment via post-stamped. git push is not a REST write.",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · noted, not filed: packages/spec/liveness/position.json renamedFrom.note still says other references are 'named in the boot log'; still true of the boot run, outside the order's line, left as is."
]
}
Generated by Claude Code
objectstack-fleet commentedon Nov 14, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag
ACCEPT → PR #33478 comment 6885378359 (part 1 of 2, ready + auto-merge, 2026-11-14T22:44Z). Part 2 (the ADR-0150 addendum line, Tier H) follows after this merges.
objectstack-fleet commentedon Nov 15, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5n95roc2dShmeuBAoB
os-dev-report
{
"issue": 33301,
"status": "done",
"branch": "claude/project-thread-6cr30t",
"pr": "#33568",
"session": "session_01FEkQ5n95roc2dShmeuBAoB",
"premise_still_valid": true,
"summary": "PR 2 of 2 (Fixes #33301, head 99ff68d, branch restarted from origin/main 8e63ed8 after PR #33478 merged): the ADR-0150 2026-11-13 addendum's two run-time sentences now say the holder carry runs at boot over every claim and on each later metadata:reloaded over the claims of what the announcement names as registered, with the doors carried at once and those carried at the next restart (POST /packages install and PATCH /packages/:id/enable named exactly, 'an artifact reload that names only its file'). No other sentence of the addendum and no ruling text changed. Tier H: waits for a GOVERNED_APPROVER.",
"files_changed": [
"docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md"
],
"line_budget": "1 file, +1/-1",
"tests": "none: docs-only diff",
"gates": "21 derived (dispatch-gates --commands --repo objectstack-ai/objectstack at 99ff68d), all exit 0; --ran: 21 run, 0 NOT-MEASURED. Record pm-orders/spec/33301-pr2-gates-ran.txt. CI check-runs: in_progress at report time.",
"deviations": "None. skip-changeset sent in pr_create labels: no non-private package.json files[] names docs/adr. The addendum's sentence 'named in the boot log' left (outside the two sentences the order allows).",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 — fleet-write pr_create (run 43659676889, PR #33568, read back identical, label skip-changeset, no assignees); this os-dev-report comment via post-stamped.",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commentedon Nov 15, 2026
domain:spec#1 · os-project-manager · session_01FEkQ5n95roc2dShmeuBAoB
os-dev-report
{
"issue": 33301,
"status": "done",
"branch": "claude/project-thread-6cr30t",
"pr": "#33568",
"session": "session_01FEkQ5n95roc2dShmeuBAoB",
"premise_still_valid": true,
"summary": "PR 2 round 2 (head 16cb2bc) answers contract review 6886866329: the ADR-0150 addendum now lists the runtime POST /packages install and a PATCH /packages/:id/enable that switches a disabled package on among the doors carried at once (announcePackageReload since #33448); only a hot upgrade over a still-served version and an artifact reload that names only its file stay under the next restart. Nit folded: the 'boot log' sentence now says the run's log (at boot for every old name carried, after a reload for the old names it moved rows of). The updated PR body is at pm-orders/spec/33301-pr2-body-r2.md for the seat's issue_patch. The Refs follow-up for main is prepared as a patch (pm-orders/spec/33301-followup.patch) but not opened: this thread can push only its one branch, which holds the open #33568.",
"files_changed": [
"docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md"
],
"line_budget": "1 file, +1/-1 over round 1",
"tests": "none: docs-only diff",
"gates": "21 derived at 16cb2bc, all exit 0 (check:doc-formula-expressions exit 3 in the loop until the lint closure was built, then exit 0); --ran 21 run, 0 NOT-MEASURED. Record pm-orders/spec/33301-pr2-r2-gates-ran.txt.",
"deviations": "Root cause owned: PR 1 and round 1 of PR 2 read the install and enable doors at PR 1's base 19cc897, before #33448 merged; round 1's base 8e63ed8 already carried #33448 and was not re-read. Follow-up PR (Refs #33301) not opened: one pushable branch per thread; patch committed locally as be318a6d (spec jsdoc + describe, regenerated position.mdx, carry header comment, spec patch changeset), not gate-run.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "1 — this os-dev-report comment via post-stamped (git push not a REST write).",
"open_questions": [
{
"question": "Who opens the Refs #33301 follow-up that corrects PR 1's now-false install/enable sentence on main?",
"options": [
"A: another card thread (or the seat) applies pm-orders/spec/33301-followup.patch on its own branch and opens it now",
"B: this thread opens it after #33568 merges, restarting its branch from main; main keeps the false sentence until the Tier H approval lands"
],
"recommendation": "A, because #33568 waits for a human approver and the false describe ships to authors meanwhile; the patch applies cleanly on origin/main 8e63ed8-era trees"
}
],
"security_findings": "none",
"out_of_scope_findings": []
}
Generated by Claude Code