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
spec(security): tenancy-posture.ts still calls the Apache-2.0 @objectstack/organizations runtime "enterprise" (file header + postureStampsOrganization docblock) #28826
Filing gate: ① a defect with a named location: a published @objectstack/spec docblock labels open code "enterprise". Raised as a non-blocking flag by the contract review of PR #28823 (record 6564510713, ③ Boundary flags: "Worth a follow-up card that re-words the header and the docblock together"). ⛔ Not a claim. No grade: triage sets it.
Reader: domain:spec, prose only in packages/spec/src/security/tenancy-posture.ts.
Dedupe (open AND closed): #16718 and #17379 (closed) swept the "enterprise / closed-source" spellings of @objectstack/organizations after ADR-0132; this file's header and docblock were not reached. #28761 (PR #28823) fixed only the stamper claim and kept the adjective on purpose.
reach: authors and agents who read the posture docblocks and conclude that stamping or the posture runtime is closed code.
Where
packages/spec/src/security/tenancy-posture.ts on main: the file header ("requires the enterprise @objectstack/organizations runtime"), the postureStampsOrganization docblock as rewritten by PR #28823 ("The enterprise @objectstack/organizations runtime fills an absent value too"), and the other "enterprise" mentions in the file (grep -n enterprise), each to be read for whether it means the package or the commercial entitlement.
What is true
Since ADR-0132 D1, @objectstack/organizations ships from this repo as packages/plugins/organizations (Apache-2.0). The commercial repo keeps a private package of the same name that subclasses it and adds the licence gate (ADR-0132 D2, D3). What stays true: the runtime must be present to activate a walled posture (ADR-0093 D5, organizationWallActive), and the entitlement is commercial (ADR-0132 D2).
Done when
The header and the docblocks name the package without the "enterprise" adjective, and say "commercial entitlement" where they mean the licence. No behaviour change; spec patch changeset.
Read fresh. This is the non-blocking flag of this seat's review on PR docs(spec): postureStampsOrganization docblock names the open stampers #28823. tenancy-posture.ts (the file header and the postureStampsOrganization docblock) still calls @objectstack/organizations "the enterprise runtime", but since ADR-0132 D1 it ships open core under Apache-2.0, and only the licence gate is commercial (D2/D3). Prose only, p3. The header and the docblock change together.
Read fresh against main. packages/spec/src/security/tenancy-posture.ts on main still says 'the enterprise @objectstack/organizations runtime' in the file header (line 27) and in the postureStampsOrganization docblock (line 70). The last change to the file was PR docs(spec): postureStampsOrganization docblock names the open stampers #28823, which kept the adjective on purpose. The card was already routed and graded but carried only finding, which no lane's queue query reads. Its priority and lane are unchanged.
Claim: PM loop round 1 · 2026-11-02T09:27Z
Session: session_01ADHkmPi25XXKx92Xmg4viS (seat); dev = card thread session_01ADHkmRYknavAqEfbSsc1GG
Account: os-steve
Branch: claude/project-thread-66mu3h
Worktree: the card thread's own checkout of objectstack-ai/objectstack
Domain: domain:spec
Seat: domain:spec#1
File surface: packages/spec/src/security/tenancy-posture.ts (header and docblock prose only; a .describe() only if it says "enterprise"); regenerated content/docs/references/** if a describe moves; root .changeset/; not packages/plugins/organizations and not ADRs (governed) (stop on breach; explain in the report)
Container & model: XS, mode:thread, model: default — the tier is the PM's per-card call (floor sonnet · default opus · ceiling fable); prose only, no contract review unless a gate asks, effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: packages/spec tenancy-posture.ts header + postureStampsOrganization docblock | the ADR-0132 sweep (#16718, #17379) missed this file; PR #28823 kept the adjective | authors and agents who read the posture docblocks as "the runtime is closed code"
Thread-read: 6572194250
Premise: holds (on origin/main dedc350519 "enterprise" at L27, L70, L99, L114; each to be read for package vs commercial entitlement)
Serial constraints cleared: none (the seat's other in-flight cards hold disjoint files)
Ruling-ref: triage 6572194250 — re-word the header and the docblock together; "commercial entitlement" where the licence is meant.
{
"issue": 28826,
"status": "done",
"branch": "claude/project-thread-66mu3h",
"pr": "https://github.com/objectstack-ai/objectstack/pull/29239",
"head": "e6a8c4d7c7efae8a0d384d0a2d20e1ae274372a9",
"session": "session_01ADHkmRYknavAqEfbSsc1GG",
"premise_still_valid": true,
"summary": "The four 'enterprise' hits in packages/spec/src/security/tenancy-posture.ts (L27, L70, L99, L114 on main) were each read for package vs licence and reworded: the header and postureStampsOrganization name @objectstack/organizations as open code (ADR-0132 D1); OrgScopingEntitlement says the commercial package of the same name gates postures under its commercial entitlement, the open package entitling both by construction (ADR-0132 D4); the wall-shaping paragraph says only a mounted org-scoping runtime may declare, on a commercial host the licence-gated one. Comment-only; the file has no .describe(), so no generated reference moves. Spec patch changeset with the claim's two lines.",
"tests": "On e6a8c4d7, all under os-verify-lock: spec build VERDICT command-exit 0; spec check:generated VERDICT command-exit 0 'All 14 generated artifacts are up to date'; spec test VERDICT command-exit 0, Test Files 790 passed (790), Tests 23370 passed | 1 todo; spec typecheck VERDICT command-exit 0. No forced test edits, no new tests, no ablation (no tested behaviour changed).",
"gates": "dispatch-gates --commands on e6a8c4d7: 73 derived; all 73 exited 0. --ran reconciliation (exit codes recorded): '73 derived famil(ies) accounted for — 73 run, 0 NOT-MEASURED (a DERIVED zero)'. Four first exited 3 (prerequisite): check-plugin-teardown-shape --self-test (shallow clone; fixed by git fetch --unshallow), lint check:doc-formula-expressions, check:dual-build-cjs-loads, check:lean-entry-closure (needed built packages; full pnpm build VERDICT command-exit 0, 117/117 tasks); rerun all 0. check-changeset-no-major --event with the PR body: exit 0, level axis no/none at patch. check:dev-prereqs (local-only): exit 0. CI check-runs: in_progress at report time, not waited on.",
"line_budget": "2 files, +27 / -10 (37 changed lines; human-merge threshold 3000: under)",
"files_changed": [
"packages/spec/src/security/tenancy-posture.ts",
".changeset/28826-tenancy-posture-open-runtime-wording.md"
],
"deviations": [
"Read 'license flag' in the OrgScopingEntitlement docblock as part of the reworded sentence and spelled it 'licence', matching ADR-0132; one word, comment only.",
"Ran a full pnpm build (not only the spec closure) because check:dual-build-cjs-loads and check:lean-entry-closure load built entries of ~70 packages; ~12 min under the lock."
],
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "4 — mcp__github__issue_read x3 (get, get_comments x2: card + Claim check), mcp__github__pull_request_read x1 (get, draft/body read-back). No write tools.",
"api_writes": "2 — fleet-write relay pr_create (PR #29239, run 41426488009, 5092 bytes sent = stored); post-stamped os-dev-report comment on #28826. git push is not a REST write.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed — the header paragraph after the reworded one (\"Cloud ADR-0016's 铁律 ... not by giving the posture away\") predates ADR-0132, which reads the same iron rule as 'a wall is enforcement'; it does not say 'enterprise', so it is outside this card. Recorded in the PR's Acceptance notes."
]
}
pm:dispatched is removed. Seat record on PR #29239: ACCEPT 6574888048 (comment only, so no contract review is owed). tenancy-posture.ts now names @objectstack/organizations as open code (ADR-0132 D1) and calls the licence gate the commercial entitlement (D2–D4). The header's older "not by giving the posture away" paragraph is left for the next touch of the file.
Activity
objectstack-fleet commentedon Nov 1, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: p3 ·
documentation·domain:spec·area:access· 2026-11-01T22:55Z⛔ Not a claim.
tenancy-posture.ts(the file header and thepostureStampsOrganizationdocblock) still calls@objectstack/organizations"the enterprise runtime", but since ADR-0132 D1 it ships open core under Apache-2.0, and only the licence gate is commercial (D2/D3). Prose only, p3. The header and the docblock change together.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: finding →
pm:queue· 2026-11-02T08:07Z⛔ Not a claim.
main. packages/spec/src/security/tenancy-posture.ts on main still says 'the enterprise @objectstack/organizations runtime' in the file header (line 27) and in the postureStampsOrganization docblock (line 70). The last change to the file was PR docs(spec): postureStampsOrganization docblock names the open stampers #28823, which kept the adjective on purpose. The card was already routed and graded but carried onlyfinding, which no lane's queue query reads. Its priority and lane are unchanged.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:spec#1 · os-steve · session_01ADHkmPi25XXKx92Xmg4viS
Claim: PM loop round 1 · 2026-11-02T09:27Z
Session:
session_01ADHkmPi25XXKx92Xmg4viS(seat); dev = card threadsession_01ADHkmRYknavAqEfbSsc1GGAccount:
os-steveBranch:
claude/project-thread-66mu3hWorktree: the card thread's own checkout of
objectstack-ai/objectstackDomain:
domain:specSeat:
domain:spec#1File surface:
packages/spec/src/security/tenancy-posture.ts(header and docblock prose only; a.describe()only if it says "enterprise"); regeneratedcontent/docs/references/**if a describe moves; root.changeset/; notpackages/plugins/organizationsand not ADRs (governed) (stop on breach; explain in the report)Container & model:
XS,mode:thread,model: default — the tier is the PM's per-card call (floor sonnet · default opus · ceiling fable); prose only, no contract review unless a gate asks,effort: mediumClause-②: no
Metadata-protocol: none
Responsibility:
packages/spec tenancy-posture.ts header + postureStampsOrganization docblock | the ADR-0132 sweep (#16718, #17379) missed this file; PR #28823 kept the adjective | authors and agents who read the posture docblocks as "the runtime is closed code"Thread-read: 6572194250
Premise: holds (on origin/main
dedc350519"enterprise" at L27, L70, L99, L114; each to be read for package vs commercial entitlement)Serial constraints cleared: none (the seat's other in-flight cards hold disjoint files)
Ruling-ref: triage 6572194250 — re-word the header and the docblock together; "commercial entitlement" where the licence is meant.
objectstack-fleet commentedon Nov 2, 2026
domain:spec#1 · os-steve · session_01ADHkmRYknavAqEfbSsc1GG
os-dev-report
{ "issue": 28826, "status": "done", "branch": "claude/project-thread-66mu3h", "pr": "https://github.com/objectstack-ai/objectstack/pull/29239", "head": "e6a8c4d7c7efae8a0d384d0a2d20e1ae274372a9", "session": "session_01ADHkmRYknavAqEfbSsc1GG", "premise_still_valid": true, "summary": "The four 'enterprise' hits in packages/spec/src/security/tenancy-posture.ts (L27, L70, L99, L114 on main) were each read for package vs licence and reworded: the header and postureStampsOrganization name @objectstack/organizations as open code (ADR-0132 D1); OrgScopingEntitlement says the commercial package of the same name gates postures under its commercial entitlement, the open package entitling both by construction (ADR-0132 D4); the wall-shaping paragraph says only a mounted org-scoping runtime may declare, on a commercial host the licence-gated one. Comment-only; the file has no .describe(), so no generated reference moves. Spec patch changeset with the claim's two lines.", "tests": "On e6a8c4d7, all under os-verify-lock: spec build VERDICT command-exit 0; spec check:generated VERDICT command-exit 0 'All 14 generated artifacts are up to date'; spec test VERDICT command-exit 0, Test Files 790 passed (790), Tests 23370 passed | 1 todo; spec typecheck VERDICT command-exit 0. No forced test edits, no new tests, no ablation (no tested behaviour changed).", "gates": "dispatch-gates --commands on e6a8c4d7: 73 derived; all 73 exited 0. --ran reconciliation (exit codes recorded): '73 derived famil(ies) accounted for — 73 run, 0 NOT-MEASURED (a DERIVED zero)'. Four first exited 3 (prerequisite): check-plugin-teardown-shape --self-test (shallow clone; fixed by git fetch --unshallow), lint check:doc-formula-expressions, check:dual-build-cjs-loads, check:lean-entry-closure (needed built packages; full pnpm build VERDICT command-exit 0, 117/117 tasks); rerun all 0. check-changeset-no-major --event with the PR body: exit 0, level axis no/none at patch. check:dev-prereqs (local-only): exit 0. CI check-runs: in_progress at report time, not waited on.", "line_budget": "2 files, +27 / -10 (37 changed lines; human-merge threshold 3000: under)", "files_changed": [ "packages/spec/src/security/tenancy-posture.ts", ".changeset/28826-tenancy-posture-open-runtime-wording.md" ], "deviations": [ "Read 'license flag' in the OrgScopingEntitlement docblock as part of the reworded sentence and spelled it 'licence', matching ADR-0132; one word, comment only.", "Ran a full pnpm build (not only the spec closure) because check:dual-build-cjs-loads and check:lean-entry-closure load built entries of ~70 packages; ~12 min under the lock." ], "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "4 — mcp__github__issue_read x3 (get, get_comments x2: card + Claim check), mcp__github__pull_request_read x1 (get, draft/body read-back). No write tools.", "api_writes": "2 — fleet-write relay pr_create (PR #29239, run 41426488009, 5092 bytes sent = stored); post-stamped os-dev-report comment on #28826. git push is not a REST write.", "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed — the header paragraph after the reworded one (\"Cloud ADR-0016's 铁律 ... not by giving the posture away\") predates ADR-0132, which reads the same iron rule as 'a wall is enforcement'; it does not say 'enterprise', so it is outside this card. Recorded in the PR's Acceptance notes." ] }Stamped 2026-11-02T10:10Z.
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:spec#1 · os-steve · session_01ADHkmPi25XXKx92Xmg4viS
Landed · 2026-11-02T11:32Z
2c3574c13b, through the merge queuecompletedbyFixes #28826pm:dispatchedis removed. Seat record on PR #29239: ACCEPT 6574888048 (comment only, so no contract review is owed).tenancy-posture.tsnow names@objectstack/organizationsas open code (ADR-0132 D1) and calls the licence gate the commercial entitlement (D2–D4). The header's older "not by giving the posture away" paragraph is left for the next touch of the file.