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
[Decision] One name for the self-managed edition: "ObjectOS Enterprise" (positioning, 8 pages) vs "ObjectOS Self-Managed" with Business single-node and Enterprise under it (License & Pricing, Deploy) #295
Found by the seat's site-wide audit on 2026-10-06. This needs a maintainer ruling. It changes product naming on both docs.objectos.ai and www.objectos.ai.
apps/docs/lib/positioning.tsOBJECTOS_EDITIONS reads: "ObjectOS runs hosted in the browser with nothing to install (ObjectOS Cloud) or self-managed on your own infrastructure (ObjectOS Enterprise)…"
index, why, architecture, quickstart, faq, glossary and security follow it, and so does www's src/lib/positioning.ts.
License & Pricing
content/docs/resources/license.mdx:8-10 and :38-44 define:
ObjectOS Cloud: Free / Team / Business;
ObjectOS Self-Managed: Business Self-Managed (single node, 10–25 AI seats, $540 / AI seat / yr) and Enterprise.
The Editions table gives Enterprise as "cloud or private deployment".
deploy/index.mdx:3-6 and deploy/docker.mdx use "Self-Managed".
README.md:38 lists Enterprise only under Self-Managed.
The result: a reader cannot tell whether Business Self-Managed counts as "Enterprise", or whether Enterprise is offered on Cloud. The legal pages in #294 had to choose, and they follow E1.
Options
A. Keep E1 as the product vocabulary. Self-managed is called ObjectOS Enterprise. license.mdx, deploy/** and README are re-worded to match, with Business Self-Managed described as an Enterprise single-node option and the "cloud or private deployment" cell revisited. This changes how pricing is described.
B. Keep license.mdx as the product vocabulary. The editions are ObjectOS Cloud and ObjectOS Self-Managed (Business single-node, Enterprise). The E1 sentence changes on both sites, along with the positioning constant, the gate and about 8 pages per site.
C. Name the deployment modes, not the editions, in positioning (recommended). E1 becomes "…hosted in the browser with nothing to install (ObjectOS Cloud) or self-managed on your own infrastructure, and either way you can export your ontology…". The "(ObjectOS Enterprise)" parenthetical goes, so the positioning makes no claim about which plan is self-managed. license.mdx stays the single source for plan names. This is the smallest change that makes every page true under today's price list.
Recommendation: C. It touches one sentence on each site plus the pages that repeat it, and it leaves pricing to the pricing page.
Ruled: 6124045928 · letter A · Enterprise is self-managed only · the single-node SKU keeps the name Business Self-Managed · 2026-10-12T12:14Z
After the ruling
The seat records it here (Ruled: line in the body). Execution goes to the docs on-ramp card filed with this one, and to the www copy sweep card.
Ruling: letter A, with two sub-questions settled in the same pass · maintainer, this session's chat · 2026-10-12T12:13Z
repo:objectos PM seat (objectstack-ai/objectstack#9831), R1, session session_01H1D12NQAtnCRwY1YzR43Vd. The seat put this card to the maintainer in its chat, after re-measuring the conflict on main10beb8b. The maintainer answered three questions; each answer is quoted verbatim below.
The edition vocabulary. Asked: 「objectos#295:自托管版本叫什么?」 Answer: 「A 自托管统称 Enterprise」.
Self-managed ObjectOS is called ObjectOS Enterprise. positioning.ts (E1) stays as written.
The Enterprise column's "cloud or private deployment" cell. Asked: 「Enterprise 还卖「我们托管的专属云」吗?」 Answer: 「只自托管 (Recommended)」.
Enterprise is self-managed only. The cell becomes self-managed (private deployment), and Cloud tops out at Business.
The single-node SKU. Asked: 「单节点那档($540/AI seat/年,10–25 席)现名「Business Self-Managed」……名字怎么处理?」 Answer: 「保留原名,归入 Ent (Recommended)」.
The SKU keeps the name Business Self-Managed and its price. The copy describes it as the single-node entry option of ObjectOS Enterprise.
Governing text: apps/docs/lib/positioning.tsOBJECTOS_EDITIONS and its gate .github/scripts/check-positioning.mjs (ruling Q1 on #171). This ruling keeps both unchanged and brings the pricing and deploy pages into line with them.
Execution shape, measured on main10beb8b
This card leaves the decision inbox for pm:queue and becomes the execution card, as #171 did. Every place that uses "Self-Managed" as an edition name is re-worded. Lower-case "self-managed" as a description of a deployment stays.
content/docs/resources/license.mdx, at :8-10, :40, :60–:75, :87, :142 and :148:
www.objectos.ai's own pricing and positioning copy is that repository's seat's work under this ruling. This session cannot read or write that repository's issues, so the follow-up is recorded on the seat post for the seat that can.
Claim: PM loop, repo:objectos seat, R1
Session: session_01H1D12NQAtnCRwY1YzR43Vd
Account: os-support-ai (the seat's linked user as GET /user answers it; always the card's assignee)
Branch: claude/youthful-cannon-b4o03w. This is the session's one designated objectos push branch. Its previous head e52161d (PR #326) is an ancestor of main76988da, so the branch restarts from origin/main as a fast-forward. The dev builds it from a local branch issue-295-enterprise-vocab.
Worktree: objectos-issue-295-enterprise-vocab
Domain: n/a (single-lane repo)
Seat: repo:objectos (objectstack-ai/objectstack#9831)
File surface:
content/docs/resources/license.mdx, plus its siblings license.zh-Hans.mdx and license.zh-Hant.mdx (deletion only, under criterion A)
Stop on breach; explain in the report.
Container & model: M, mode:subagent, model: opus (default tier; dispatch-gates.mjs --tier --repo objectstack-ai/objectos over this surface at objectstack 3071d3e98 answers "no path-derived mandate")
Clause-②: no
Responsibility: n/a — not a defect card (ruling execution)
Ruling-ref: 6124045928
Governing text: apps/docs/lib/positioning.tsOBJECTOS_EDITIONS and .github/scripts/check-positioning.mjs (ruling Q1 on #171), both unchanged by this card
Thread-read: 6124045928
Serial constraints cleared:
Release: session session_01H1D12NQAtnCRwY1YzR43Vd · reason: shift closing on the maintainer's instruction before any dev was dispatched · destination: pm:queue, unassigned, for the next session on this seat
Provenance of the instruction:
Who: the maintainer.
Verbatim: 「当前任务处理完就下班」.
Where: this session's chat, 2026-10-13T14:11Z, while this claim (6147517221) was being written.
What was done: nothing beyond the claim. No dev was dispatched, no worktree was created, and nothing was pushed to claude/youthful-cannon-b4o03w for this card. The branch head is still e52161d, which is merged.
What the next claimant inherits unchanged:
the ruling 6124045928 (Ruling-ref:);
the surface measured on main76988da, as listed in the claim above;
one more surface fact: apps/docs/app/[lang]/privacy/page.tsx already says "self-managed ObjectOS deployment (ObjectOS Enterprise)", which agrees with the ruling, so it needs no change.
Claim: PM loop, repo:objectos seat, R1
Session: session_01CXCwzqwMhkphKoBC11oPSz
Account: os-tesla (the seat's linked user as GET /user answers it; always the card's assignee)
Branch: claude/issue-295-enterprise-vocab
Worktree: objectos-issue-295
Domain: n/a (single-lane repo)
Seat: repo:objectos (objectstack-ai/objectstack#9831)
File surface, as measured by the released claim 6147517221 on main76988da:
content/docs/resources/license.mdx, plus its siblings license.zh-Hans.mdx and license.zh-Hant.mdx (deletion only, under criterion A);
content/docs/deploy/index.mdx · content/docs/deploy/docker.mdx · content/docs/operate/upgrade.mdx (:3, :6 only) · content/docs/configure/ai.mdx · content/docs/index.mdx (:35 only, and only if its wording no longer reads true) · README.md.
Stop on breach and explain in the report.
Container & model: M, mode:subagent, model: opus (default tier; dispatch-gates.mjs --tier --repo objectstack-ai/objectos answers "no path-derived mandate")
Clause-②: no
Responsibility: n/a — not a defect card (ruling execution)
Ruling-ref: 6124045928
Governing text: apps/docs/lib/positioning.tsOBJECTOS_EDITIONS and .github/scripts/check-positioning.mjs (ruling Q1 on #171), both unchanged by this card
Thread-read: 6147548827
Serial constraints cleared:
{
"issue": 295,
"status": "done",
"branch": "claude/issue-295-enterprise-vocab",
"pr": "https://github.com/objectstack-ai/objectos/pull/335",
"session": "session_01CXCwzqwMhkphKoBC11oPSz — subagent of the repo:objectos seat (parent's id, from the Claude-Session line)",
"premise_still_valid": true,
"final_commit": "08c73b2ec6dfeb233199d13abc621683dcb0572d",
"summary": "Draft PR #335 is open. Head 08c73b2, base main (origin/main still 76988da), assignee os-tesla, opened by objectstack-fleet[bot]. It carries out ruling 6124045928 across the whole claimed surface. (1) license.mdx: the intro now names ObjectOS Enterprise. The Editions table gives Business Self-Managed its own column and adds an Edition row (ObjectOS Cloud for Free/Team/Business; ObjectOS Enterprise for Business Self-Managed, as its single-node entry option, and for Enterprise). The Enterprise delivery cell 'cloud or private deployment' becomes 'self-managed (private deployment)'. Every price and feature tick is unchanged. The 'Cloud or self-managed' section gets a lead sentence stating answers 1 and 2. The Business Self-Managed bullet is described as the single-node entry option. The full-deployment bullet is relabelled 'Enterprise — the full private deployment'. The scenario rows and FAQ :142 and :148 are reworded to match. (2) Changed only on the lines listed: deploy/index.mdx :3 :4 :7; deploy/docker.mdx :7; operate/upgrade.mdx :3 :6; configure/ai.mdx :12 ('a self-managed deployment (ObjectOS Enterprise)'); index.mdx :35, where '(or Business Self-Managed)' offered the SKU as an alternative to Enterprise; README.md :38. (3) license.zh-Hans.mdx is deleted under criterion A: its line 30 asserts Enterprise is offered on cloud, the claim answer 2 withdraws. gen-zh-hant pruned license.zh-Hant.mdx. None of the other edited pages has a locale sibling. positioning.ts and check-positioning.mjs are untouched. The PR body opens 'Part of #295', not 'Fixes #295' as the dispatch said, because one edition-name use is left outside the claimed surface: privacy/page.tsx:36 (see out_of_scope_findings and open_questions). If the seat folds that line into a patch round on this branch, or files it as a sub-issue, the seat can flip the first line to 'Fixes #295'. With 'Part of', merging does not close #295, so #300's 'Blocked-by: #295' does not release on merge.",
"tests": "Docs-only change: no test file is added or changed, and there is no ablation or reverse-verification leg (no tested behaviour moved). Built-site checks with next start on the local build of 08c73b2: GET /docs/resources/license 200 and /zh-Hans/docs/resources/license 200. The zh-Hans page renders the English page (33 lang=\"en\" spans, contains 'Cloud tops out at Business'). The built en license.html contains 'single-node entry option of ObjectOS' 3 times and 'ObjectOS Self-Managed' 0 times. Both tables sit in Fumadocs' 'docs-table relative overflow-auto' wrapper. sitemap.xml.body lists the license page with hreflang en and x-default only. I read a desktop screenshot at 1400 px and the six-column table renders. NOT MEASURED: phone layout. reason: no device-metrics emulation without Playwright; a 390 px headless window clips every page the same way, the table-free /docs/operate/upgrade included, so it is a capture artifact. The next start PIDs this run started (18846/18863/18874) were stopped, and port 3295 answers 000.",
"gates": "LOCAL, on 08c73b2, exit codes captured before any pipe. Gate list hand-derived from objectos .github/workflows/ci.yml and translations.yml at 76988da; scripts/pm/dispatch-gates.mjs exists only in objectstack, so there is no --ran reconciliation for this repo. Results: node apps/docs/scripts/gen-zh-hant.mjs --check exit 0 ('53 generated file(s) match the zh-Hans sources byte for byte'). npm ci --prefix .github/scripts/doc-samples --ignore-scripts --no-audit --no-fund exit 0, then node .github/scripts/check-doc-samples.mjs exit 0 ('79 English page(s) ... 98 pass · 10 not a spec sample · 2 opted out'). os-verify-lock.sh -c 'pnpm turbo run type-check --continue' VERDICT command-exit 0, cache miss c9bb219491cc5210. os-verify-lock.sh -c 'pnpm turbo run build --concurrency=2' VERDICT command-exit 0, cache miss 8a054266a04405c7, 1000/1000 static pages. The build logged 'Failed to load dynamic font ... self-signed certificate' lines: the container proxy's TLS on OG font fetches, non-fatal. node .github/scripts/check-locale-surface.mjs exit 0. node .github/scripts/check-positioning.mjs exit 0 ('4 copies equal their constants; the brand is right in 659 pages and 2 llms bodies; no stale sentence in 79 English sources and the en entry of 2 legal pages'). node .github/scripts/check-search-locales.mjs exit 0 (8 locales 200). os-verify-lock.sh -c 'pnpm turbo run test --concurrency=2' VERDICT command-exit 0; the @objectos/ci-scripts cache hit 557f349216d5379a is legitimate (no script or fixture changed; its inputs exclude content/docs). node .github/scripts/check-translations.mjs exit 0 ('translations gate passed'). check-translation-ownership.mjs --actor os-tesla --files (git diff --name-status --no-renames origin/main...HEAD) exit 0, and with TRANSLATION_BOT_LOGIN set as a probe exit 0 ('2 translation artifact(s) deleted, none added or modified'). check-translation-output.mjs --files exit 0. Control-byte self-scan over the 7 edited files: grep exit 1, no match. CI on PR head 08c73b2, check-runs read via REST: 'build' success. Its steps all succeeded: Half-state sweeper self-test, Generated zh-Hant is current, Docs code samples parse, type-check, build, Locale surface, Positioning, Search answers every locale, turbo test, Package the Worker, 'Worker bundle fits the size budget', and 'The docs site renders — smoke-check a local preview'. Also: 'Node floor' success; 'Ownership & freshness' (translations.yml) success; 'Deploy docs' skipped (main-only). NOT MEASURED: the Worker 'Total Upload' figure. reason: the job-log blob answered 403 through the proxy; the step verdict above is success.",
"mcp_calls": "0",
"api_writes": "2 relay strokes (scripts/pm/fleet-write/dispatch.mjs, each one POST /repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]). Stroke 1, request fw-20261016T051004Z-1e6a8a, run 38854362505 success: pr_create = POST /repos/objectstack-ai/objectos/pulls (draft) + POST /repos/objectstack-ai/objectos/issues/335/assignees [os-tesla]. Read-back: 8616 bytes sent and stored, identical. Stroke 2: this os-dev-report comment, POST /repos/objectstack-ai/objectos/issues/295/comments. Not REST: 2 git pushes to claude/issue-295-enterprise-vocab (the empty-branch probe at 76988da, then 08c73b2). 0 label, 0 assignee-on-card, 0 PR-body PATCH, 0 merge, 0 ready writes.",
"files_changed": [
"README.md (1 line, :38)",
"content/docs/configure/ai.mdx (:12)",
"content/docs/deploy/docker.mdx (:7)",
"content/docs/deploy/index.mdx (:3, :4, :7)",
"content/docs/index.mdx (:35 only)",
"content/docs/operate/upgrade.mdx (:3, :6 only)",
"content/docs/resources/license.mdx (:10, :38-45, :60-70, :87-88, :142-144, :150)",
"content/docs/resources/license.zh-Hans.mdx (deleted, criterion A)",
"content/docs/resources/license.zh-Hant.mdx (deleted by gen-zh-hant prune)"
],
"line_budget": "n/a — no skills/** or managed ledger touched. Diff: 9 files, +40 / -312; 281 of the deletions are the two locale siblings.",
"deviations": [
"PR first line is 'Part of #295', not the dispatch's 'Fixes #295'. The os-dev DoD rule (merge must not close a card with scope left) overrides the dispatch wording. The residual is privacy/page.tsx:36. The seat can flip it.",
"Commit trailers are model-free ('Co-Authored-By: Claude' + Claude-Session URL) and the PR footer uses the os-dev session-URL form, not the harness reminder's model-named trailer and emoji footer. The os-dev definition takes precedence per that reminder's own priority clause.",
"The claim's 'Clause-②: no' line was copied verbatim at the start of a PR-body line. objectos has no Check Changeset gate, so it is inert here.",
"File surface kept exactly. privacy/page.tsx was NOT edited, despite falling in the ruling's 'every place' scope, because the claim says 'Stop on breach' and the fix is not purely mechanical (legal-page 'Last updated' line, zh-Hans.json twin outside the content/docs translation flow).",
"Worktree /home/user/objectos-issue-295 removed after node_modules deletion (git worktree remove, no --force). The local branch ref remains in the shared .git."
],
"open_questions": [
{
"question": "How should apps/docs/app/[lang]/privacy/page.tsx:36 ('ObjectOS Self-Managed validates its license online', also in zh-Hans.json:16 and generated zh-Hant.json:16) be brought under ruling 6124045928?",
"options": [
"A. Patch round on PR #335. The seat amends the claim surface to add privacy/page.tsx + zh-Hans.json (zh-Hant.json regenerated). The en sentence becomes the pinned form already used at license.mdx:155, index.mdx:76 and architecture.mdx:72: 'Self-managed ObjectOS validates its license online'. zh-Hans gets the matching wording, and 'Last updated' is bumped to the merge date. The seat flips the PR first line to 'Fixes #295'. Cost: about 3 lines plus a regen; one more CI cycle on the same PR. Axes: real business need, yes (a public legal page read by customers names a retired edition); long-term, one vocabulary in one PR, as the ruling asks; AI-error, removes the last source an agent could copy the old name from; startup focus, no new gate, smallest change.",
"B. Separate sub-issue of #295 for the legal page. PR #335 merges as 'Part of #295', and #295 closes when the sub-issue lands. Cost: a second card, claim, dispatch and PR for one sentence. Axes: same outcome, more process; justified only if the maintainer wants legal-page edits on their own review track.",
"C. Leave it and flip #335 to 'Fixes #295'. Cost: none now. Axes: fails 'every place' in the ruling, and the privacy page keeps contradicting the license page."
],
"recommendation": "A. It is the same defect class, the same ruling and the same reviewer, and the edit shape is already pinned on three pages. The only real judgment is the 'Last updated' bump, and it is honest to bump it when the policy's text changes."
}
],
"out_of_scope_findings": [
"class: b · reach: public door — the built /privacy page (en and zh-Hans; .next/server/app/en/privacy.html on 08c73b2 contains 'ObjectOS Self-Managed validates its license online') names the edition 'ObjectOS Self-Managed' that ruling 6124045928 answer 1 retires · Seam: ruling 6124045928 answer 1 → renderer: apps/docs/app/[lang]/privacy/page.tsx content.en.body[2].text (plus zh-Hans.json:16 / zh-Hant.json:16) · evidence: git grep -n -i 'self-managed' on 76988da hits privacy/page.tsx:36; release 6147548827 recorded the page as agreeing, which is true of :23 and :28 only · within #295's own scope ('every place that uses Self-Managed as an edition name'), outside the claimed file surface: name it a sub-issue of #295 or fold it into PR #335 (open_questions A) · dedupe words: 'ObjectOS Self-Managed privacy', 'privacy page edition name', 'Self-Managed validates its license online'"
]
}
File surface widened by one sentence, under the same ruling (6124045928, answer 1: 「A 自托管统称 Enterprise」 — every edition-name use of "Self-Managed" is re-worded):
apps/docs/app/[lang]/privacy/page.tsx:36 — "ObjectOS Self-Managed validates its license online", plus its zh-Hans.json:16 twin and the generated zh-Hant.json:16.
Measured on 76988da: git grep -n -i self-managed over apps/docs/app/[lang]/privacy/ hits :23 and :28, which already agree, and :36, which does not. The released claim's note (6147548827, "privacy/page.tsx already agrees") was true of :23 and :28 only; the dev's report 6208617622 caught :36.
Seat decision (not escalated — this executes a made ruling): option A of the dev's open question.
Patch round on PR docs: name the self-managed edition ObjectOS Enterprise across pricing and deploy pages #335: the English sentence takes the form already used at license.mdx:155, index.mdx:76 and architecture.mdx:72 ("Self-managed ObjectOS validates its license online"); zh-Hans gets the matching wording; zh-Hant is regenerated; the page's "Last updated" date moves to the patch date.
The PR's first line then becomes Fixes #295, set by the seat.
Serial constraints unchanged: no other card in flight touches the privacy page.
{
"issue": 295,
"status": "done",
"round": "patch round 1 (claim amendment 6208640860)",
"branch": "claude/issue-295-enterprise-vocab",
"pr": "https://github.com/objectstack-ai/objectos/pull/335",
"session": "session_01CXCwzqwMhkphKoBC11oPSz — subagent of the repo:objectos seat (parent's id, from the Claude-Session line)",
"premise_still_valid": true,
"final_commit": "fd0f4c0f0e60cd128a145d086460fc1d5a91be39",
"summary": "Patch round 1 is pushed on top of 08c73b2 as fd0f4c0. origin/main is still 76988da, so no merge was needed. Changes, all on the privacy page: (1) en entry of apps/docs/app/[lang]/privacy/page.tsx:36: 'ObjectOS Self-Managed validates its license online' becomes 'Self-managed ObjectOS validates its license online', the form pinned at license.mdx:155, index.mdx:76 and architecture.mdx:72. The rest of the sentence is unchanged. (2) zh-Hans.json:16: 'ObjectOS Self-Managed 会在线校验许可证' becomes '自管 ObjectOS 会在线校验许可证'. (3) zh-Hant.json was regenerated by apps/docs/scripts/gen-zh-hant.mjs, which owns the privacy/terms/ui-text JSON pairs as FIXED_PAIRS ('1 written'), not hand-edited. (4) 'Last updated' moved to October 16, 2026 in en and to '2026 年 10 月 16 日' in zh-Hans, carried to zh-Hant by the generator. Nothing else on the legal page changed, and the terms page is untouched. A repo-wide git grep for 'ObjectOS Self-Managed' now exits 1 (no hits). PR body not edited: its first line still reads 'Part of #295' for the seat to flip. PR is still draft.",
"tests": "Built pages from the locked build of fd0f4c0. In each of en/privacy.html, zh-Hans/privacy.html and zh-Hant/privacy.html, 'ObjectOS Self-Managed' occurs 0 times. The new sentence is present in each ('Self-managed ObjectOS validates its license online' / '自管 ObjectOS 会在线校验许可证' / '自管 ObjectOS 會線上校驗許可證'), and so is the new date ('October 16, 2026' / '2026 年 10 月 16 日'). No test file changed; no ablation (no tested behaviour moved).",
"gates": "LOCAL on fd0f4c0, exit codes captured before any pipe: gen-zh-hant.mjs --check exit 0 ('53 generated file(s) match ... byte for byte'); npm ci doc-samples exit 0 + check-doc-samples exit 0 (98 pass); check-translations exit 0; check-translation-ownership --files (name-status, no renames) exit 0 as CI runs it, and exit 0 with TRANSLATION_BOT_LOGIN set as a probe ('12 file(s) changed: 2 translation artifact(s) deleted, none added or modified'); check-translation-output --files exit 0. Through os-verify-lock: type-check VERDICT command-exit 0 (cache miss 50a4e93d3feabd6d), build VERDICT command-exit 0 (cache miss 77ebb43d24fdff44, 1000/1000), turbo test VERDICT command-exit 0 (ci-scripts cache hit 557f349216d5379a, inputs unchanged). After the build: check-positioning exit 0 ('... no stale sentence in 79 English sources and the en entry of 2 legal pages'); check-locale-surface exit 0; check-search-locales exit 0. Control-byte scan of the 3 privacy files: no match. CI on head fd0f4c0 (REST check-runs): build success, every step success including 'Generated zh-Hant is current', 'Positioning', 'Locale surface', 'Worker bundle fits the size budget' and 'The docs site renders — smoke-check a local preview'; Node floor success; Ownership & freshness success; Deploy docs skipped (main-only).",
"mcp_calls": "0",
"api_writes": "This round: 1 relay stroke for this addendum comment (POST /repos/objectstack-ai/objectos/issues/295/comments via POST /repos/objectstack-ai/objectstack/dispatches) and 1 git push (fd0f4c0). Run total: 3 relay strokes (pr_create + its assignee POST, report comment 6208617622, this addendum) and 3 git pushes. 0 PR-body, label, card-assignee, merge or ready writes.",
"files_changed": [
"apps/docs/app/[lang]/privacy/page.tsx (:24 date, :36 sentence)",
"apps/docs/app/[lang]/privacy/zh-Hans.json (:4 date, :16 sentence)",
"apps/docs/app/[lang]/privacy/zh-Hant.json (regenerated by gen-zh-hant: :4, :16)"
],
"line_budget": "n/a — no skills/** or managed ledger touched. This round: 3 files, +6 / -6.",
"deviations": [
"None this round. Worktree /home/user/objectos-issue-295 recreated from the branch head 08c73b2, then removed again after the push (node_modules deleted first, git worktree remove without --force)."
],
"open_questions": [],
"out_of_scope_findings": []
}
Activity
objectstack-fleet commentedon Oct 12, 2026
Ruling: letter A, with two sub-questions settled in the same pass · maintainer, this session's chat · 2026-10-12T12:13Z
repo:objectosPM seat (objectstack-ai/objectstack#9831), R1, sessionsession_01H1D12NQAtnCRwY1YzR43Vd. The seat put this card to the maintainer in its chat, after re-measuring the conflict onmain10beb8b. The maintainer answered three questions; each answer is quoted verbatim below.Self-managed ObjectOS is called ObjectOS Enterprise.
positioning.ts(E1) stays as written.Enterprise is self-managed only. The cell becomes self-managed (private deployment), and Cloud tops out at Business.
The SKU keeps the name Business Self-Managed and its price. The copy describes it as the single-node entry option of ObjectOS Enterprise.
Governing text:
apps/docs/lib/positioning.tsOBJECTOS_EDITIONSand its gate.github/scripts/check-positioning.mjs(ruling Q1 on #171). This ruling keeps both unchanged and brings the pricing and deploy pages into line with them.Execution shape, measured on
main10beb8bThis card leaves the decision inbox for
pm:queueand becomes the execution card, as #171 did. Every place that uses "Self-Managed" as an edition name is re-worded. Lower-case "self-managed" as a description of a deployment stays.content/docs/resources/license.mdx, at:8-10,:40,:60–:75,:87,:142and:148:content/docs/deploy/index.mdx:3,:4,:7;content/docs/deploy/docker.mdx:7;content/docs/operate/upgrade.mdx:3,:6;content/docs/configure/ai.mdx:12.README.md:38, the editions table row.content/docs/index.mdx:35: only if its wording no longer reads true under answer 3.resources/license.zh-Hans.mdxandresources/license.zh-Hant.mdxfollowdocs/TRANSLATION.mdcriterion A (ruling5989567068on [Decision] An English docs correction leaves its locale siblings asserting the corrected-away claim — #59 says delete them, the seat post says leave them, and #68 blocks the pass that would fix them #256). Answer 2 withdraws a claim the page makes today, that Enterprise is offered on cloud.The dev re-derives this list from the tree at dispatch. The list above is the seat's reading, not a specification.
Serialisation. This session has one objectos push branch, and #141 is in flight on it. This card is claimed after #141 lands.
Downstream.
Blocked-by: #295line. That line releases when this card's PR lands, and There is no getting-started path for ObjectOS itself: Quickstart boots the open runtime, Deploy/Operate are not marked self-managed, and License & Pricing is buried #300 also waits on [Decision] Where does "Get started" go? Neither site has an ObjectOS Cloud signup URL, so every plan CTA loops www → docs → www www.objectos.ai#215.Generated by Claude Code
objectstack-fleet commentedon Oct 13, 2026
Claim: PM loop,
repo:objectosseat, R1Session:
session_01H1D12NQAtnCRwY1YzR43VdAccount:
os-support-ai(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/youthful-cannon-b4o03w. This is the session's one designated objectos push branch. Its previous heade52161d(PR #326) is an ancestor ofmain76988da, so the branch restarts fromorigin/mainas a fast-forward. The dev builds it from a local branchissue-295-enterprise-vocab.Worktree:
objectos-issue-295-enterprise-vocabDomain: n/a (single-lane repo)
Seat:
repo:objectos(objectstack-ai/objectstack#9831)File surface:
content/docs/resources/license.mdx, plus its siblingslicense.zh-Hans.mdxandlicense.zh-Hant.mdx(deletion only, under criterion A)content/docs/deploy/index.mdx·content/docs/deploy/docker.mdx·content/docs/operate/upgrade.mdx·content/docs/configure/ai.mdx·content/docs/index.mdx·README.mdStop on breach; explain in the report.
Container & model:
M,mode:subagent,model: opus(default tier;dispatch-gates.mjs --tier --repo objectstack-ai/objectosover this surface at objectstack3071d3e98answers "no path-derived mandate")Clause-②: no
Responsibility: n/a — not a defect card (ruling execution)
Ruling-ref: 6124045928
Governing text:
apps/docs/lib/positioning.tsOBJECTOS_EDITIONSand.github/scripts/check-positioning.mjs(ruling Q1 on #171), both unchanged by this cardThread-read: 6124045928
Serial constraints cleared:
quickstart.mdx) merged as76988da. Its deploy is being verified, and its file is disjoint from this surface.content/docs/**orREADME.md.quickstart.mdx) is queued and unclaimed, and its file is disjoint.Blocked-by: #295) and is not in flight.5d2f837(docs: contrast, phone table affordance, FAQ headings, title-weighted per-locale search, consistency pass (#301) #310).Review face. Docs prose and
README.mdare not contract faces. The seat checks the diff sentence by sentence against the ruling in its ACCEPT.Generated by Claude Code
objectstack-fleet commentedon Oct 13, 2026
Release: session
session_01H1D12NQAtnCRwY1YzR43Vd· reason: shift closing on the maintainer's instruction before any dev was dispatched · destination:pm:queue, unassigned, for the next session on this seatProvenance of the instruction:
6147517221) was being written.What was done: nothing beyond the claim. No dev was dispatched, no worktree was created, and nothing was pushed to
claude/youthful-cannon-b4o03wfor this card. The branch head is stille52161d, which is merged.What the next claimant inherits unchanged:
6124045928(Ruling-ref:);main76988da, as listed in the claim above;apps/docs/app/[lang]/privacy/page.tsxalready says "self-managed ObjectOS deployment (ObjectOS Enterprise)", which agrees with the ruling, so it needs no change.Generated by Claude Code
site(pricing): Enterprise is self-managed only; Business Self-Managed…
objectstack-fleet commentedon Oct 16, 2026
Claim: PM loop,
repo:objectosseat, R1Session:
session_01CXCwzqwMhkphKoBC11oPSzAccount:
os-tesla(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/issue-295-enterprise-vocabWorktree:
objectos-issue-295Domain: n/a (single-lane repo)
Seat:
repo:objectos(objectstack-ai/objectstack#9831)File surface, as measured by the released claim
6147517221onmain76988da:content/docs/resources/license.mdx, plus its siblingslicense.zh-Hans.mdxandlicense.zh-Hant.mdx(deletion only, under criterion A);content/docs/deploy/index.mdx·content/docs/deploy/docker.mdx·content/docs/operate/upgrade.mdx(:3,:6only) ·content/docs/configure/ai.mdx·content/docs/index.mdx(:35only, and only if its wording no longer reads true) ·README.md.Stop on breach and explain in the report.
Container & model:
M,mode:subagent,model: opus(default tier;dispatch-gates.mjs --tier --repo objectstack-ai/objectosanswers "no path-derived mandate")Clause-②: no
Responsibility: n/a — not a defect card (ruling execution)
Ruling-ref: 6124045928
Governing text:
apps/docs/lib/positioning.tsOBJECTOS_EDITIONSand.github/scripts/check-positioning.mjs(ruling Q1 on #171), both unchanged by this cardThread-read: 6147548827
Serial constraints cleared:
index.mdxbut leaves:35, and PR docs: Build, API and operations pages up to ObjectStack 17.7 #333 (Build, API and operations pages predate ObjectStack 17.0–17.7: the changelog stops at 17.1, upgrade has no 17.x steps, and the REST reference lists removed cursor paging, error codes and routes #330) appends tooperate/upgrade.mdxbut leaves:3and:6. Both are accepted, ready and unmerged; the lines are disjoint, so this PR mergesmainafter they land.quickstart.mdx) do not touch this surface.Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{ "issue": 295, "status": "done", "branch": "claude/issue-295-enterprise-vocab", "pr": "https://github.com/objectstack-ai/objectos/pull/335", "session": "session_01CXCwzqwMhkphKoBC11oPSz — subagent of the repo:objectos seat (parent's id, from the Claude-Session line)", "premise_still_valid": true, "final_commit": "08c73b2ec6dfeb233199d13abc621683dcb0572d", "summary": "Draft PR #335 is open. Head 08c73b2, base main (origin/main still 76988da), assignee os-tesla, opened by objectstack-fleet[bot]. It carries out ruling 6124045928 across the whole claimed surface. (1) license.mdx: the intro now names ObjectOS Enterprise. The Editions table gives Business Self-Managed its own column and adds an Edition row (ObjectOS Cloud for Free/Team/Business; ObjectOS Enterprise for Business Self-Managed, as its single-node entry option, and for Enterprise). The Enterprise delivery cell 'cloud or private deployment' becomes 'self-managed (private deployment)'. Every price and feature tick is unchanged. The 'Cloud or self-managed' section gets a lead sentence stating answers 1 and 2. The Business Self-Managed bullet is described as the single-node entry option. The full-deployment bullet is relabelled 'Enterprise — the full private deployment'. The scenario rows and FAQ :142 and :148 are reworded to match. (2) Changed only on the lines listed: deploy/index.mdx :3 :4 :7; deploy/docker.mdx :7; operate/upgrade.mdx :3 :6; configure/ai.mdx :12 ('a self-managed deployment (ObjectOS Enterprise)'); index.mdx :35, where '(or Business Self-Managed)' offered the SKU as an alternative to Enterprise; README.md :38. (3) license.zh-Hans.mdx is deleted under criterion A: its line 30 asserts Enterprise is offered on cloud, the claim answer 2 withdraws. gen-zh-hant pruned license.zh-Hant.mdx. None of the other edited pages has a locale sibling. positioning.ts and check-positioning.mjs are untouched. The PR body opens 'Part of #295', not 'Fixes #295' as the dispatch said, because one edition-name use is left outside the claimed surface: privacy/page.tsx:36 (see out_of_scope_findings and open_questions). If the seat folds that line into a patch round on this branch, or files it as a sub-issue, the seat can flip the first line to 'Fixes #295'. With 'Part of', merging does not close #295, so #300's 'Blocked-by: #295' does not release on merge.", "tests": "Docs-only change: no test file is added or changed, and there is no ablation or reverse-verification leg (no tested behaviour moved). Built-site checks with next start on the local build of 08c73b2: GET /docs/resources/license 200 and /zh-Hans/docs/resources/license 200. The zh-Hans page renders the English page (33 lang=\"en\" spans, contains 'Cloud tops out at Business'). The built en license.html contains 'single-node entry option of ObjectOS' 3 times and 'ObjectOS Self-Managed' 0 times. Both tables sit in Fumadocs' 'docs-table relative overflow-auto' wrapper. sitemap.xml.body lists the license page with hreflang en and x-default only. I read a desktop screenshot at 1400 px and the six-column table renders. NOT MEASURED: phone layout. reason: no device-metrics emulation without Playwright; a 390 px headless window clips every page the same way, the table-free /docs/operate/upgrade included, so it is a capture artifact. The next start PIDs this run started (18846/18863/18874) were stopped, and port 3295 answers 000.", "gates": "LOCAL, on 08c73b2, exit codes captured before any pipe. Gate list hand-derived from objectos .github/workflows/ci.yml and translations.yml at 76988da; scripts/pm/dispatch-gates.mjs exists only in objectstack, so there is no --ran reconciliation for this repo. Results: node apps/docs/scripts/gen-zh-hant.mjs --check exit 0 ('53 generated file(s) match the zh-Hans sources byte for byte'). npm ci --prefix .github/scripts/doc-samples --ignore-scripts --no-audit --no-fund exit 0, then node .github/scripts/check-doc-samples.mjs exit 0 ('79 English page(s) ... 98 pass · 10 not a spec sample · 2 opted out'). os-verify-lock.sh -c 'pnpm turbo run type-check --continue' VERDICT command-exit 0, cache miss c9bb219491cc5210. os-verify-lock.sh -c 'pnpm turbo run build --concurrency=2' VERDICT command-exit 0, cache miss 8a054266a04405c7, 1000/1000 static pages. The build logged 'Failed to load dynamic font ... self-signed certificate' lines: the container proxy's TLS on OG font fetches, non-fatal. node .github/scripts/check-locale-surface.mjs exit 0. node .github/scripts/check-positioning.mjs exit 0 ('4 copies equal their constants; the brand is right in 659 pages and 2 llms bodies; no stale sentence in 79 English sources and the en entry of 2 legal pages'). node .github/scripts/check-search-locales.mjs exit 0 (8 locales 200). os-verify-lock.sh -c 'pnpm turbo run test --concurrency=2' VERDICT command-exit 0; the @objectos/ci-scripts cache hit 557f349216d5379a is legitimate (no script or fixture changed; its inputs exclude content/docs). node .github/scripts/check-translations.mjs exit 0 ('translations gate passed'). check-translation-ownership.mjs --actor os-tesla --files (git diff --name-status --no-renames origin/main...HEAD) exit 0, and with TRANSLATION_BOT_LOGIN set as a probe exit 0 ('2 translation artifact(s) deleted, none added or modified'). check-translation-output.mjs --files exit 0. Control-byte self-scan over the 7 edited files: grep exit 1, no match. CI on PR head 08c73b2, check-runs read via REST: 'build' success. Its steps all succeeded: Half-state sweeper self-test, Generated zh-Hant is current, Docs code samples parse, type-check, build, Locale surface, Positioning, Search answers every locale, turbo test, Package the Worker, 'Worker bundle fits the size budget', and 'The docs site renders — smoke-check a local preview'. Also: 'Node floor' success; 'Ownership & freshness' (translations.yml) success; 'Deploy docs' skipped (main-only). NOT MEASURED: the Worker 'Total Upload' figure. reason: the job-log blob answered 403 through the proxy; the step verdict above is success.", "mcp_calls": "0", "api_writes": "2 relay strokes (scripts/pm/fleet-write/dispatch.mjs, each one POST /repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]). Stroke 1, request fw-20261016T051004Z-1e6a8a, run 38854362505 success: pr_create = POST /repos/objectstack-ai/objectos/pulls (draft) + POST /repos/objectstack-ai/objectos/issues/335/assignees [os-tesla]. Read-back: 8616 bytes sent and stored, identical. Stroke 2: this os-dev-report comment, POST /repos/objectstack-ai/objectos/issues/295/comments. Not REST: 2 git pushes to claude/issue-295-enterprise-vocab (the empty-branch probe at 76988da, then 08c73b2). 0 label, 0 assignee-on-card, 0 PR-body PATCH, 0 merge, 0 ready writes.", "files_changed": [ "README.md (1 line, :38)", "content/docs/configure/ai.mdx (:12)", "content/docs/deploy/docker.mdx (:7)", "content/docs/deploy/index.mdx (:3, :4, :7)", "content/docs/index.mdx (:35 only)", "content/docs/operate/upgrade.mdx (:3, :6 only)", "content/docs/resources/license.mdx (:10, :38-45, :60-70, :87-88, :142-144, :150)", "content/docs/resources/license.zh-Hans.mdx (deleted, criterion A)", "content/docs/resources/license.zh-Hant.mdx (deleted by gen-zh-hant prune)" ], "line_budget": "n/a — no skills/** or managed ledger touched. Diff: 9 files, +40 / -312; 281 of the deletions are the two locale siblings.", "deviations": [ "PR first line is 'Part of #295', not the dispatch's 'Fixes #295'. The os-dev DoD rule (merge must not close a card with scope left) overrides the dispatch wording. The residual is privacy/page.tsx:36. The seat can flip it.", "Commit trailers are model-free ('Co-Authored-By: Claude' + Claude-Session URL) and the PR footer uses the os-dev session-URL form, not the harness reminder's model-named trailer and emoji footer. The os-dev definition takes precedence per that reminder's own priority clause.", "The claim's 'Clause-②: no' line was copied verbatim at the start of a PR-body line. objectos has no Check Changeset gate, so it is inert here.", "File surface kept exactly. privacy/page.tsx was NOT edited, despite falling in the ruling's 'every place' scope, because the claim says 'Stop on breach' and the fix is not purely mechanical (legal-page 'Last updated' line, zh-Hans.json twin outside the content/docs translation flow).", "Worktree /home/user/objectos-issue-295 removed after node_modules deletion (git worktree remove, no --force). The local branch ref remains in the shared .git." ], "open_questions": [ { "question": "How should apps/docs/app/[lang]/privacy/page.tsx:36 ('ObjectOS Self-Managed validates its license online', also in zh-Hans.json:16 and generated zh-Hant.json:16) be brought under ruling 6124045928?", "options": [ "A. Patch round on PR #335. The seat amends the claim surface to add privacy/page.tsx + zh-Hans.json (zh-Hant.json regenerated). The en sentence becomes the pinned form already used at license.mdx:155, index.mdx:76 and architecture.mdx:72: 'Self-managed ObjectOS validates its license online'. zh-Hans gets the matching wording, and 'Last updated' is bumped to the merge date. The seat flips the PR first line to 'Fixes #295'. Cost: about 3 lines plus a regen; one more CI cycle on the same PR. Axes: real business need, yes (a public legal page read by customers names a retired edition); long-term, one vocabulary in one PR, as the ruling asks; AI-error, removes the last source an agent could copy the old name from; startup focus, no new gate, smallest change.", "B. Separate sub-issue of #295 for the legal page. PR #335 merges as 'Part of #295', and #295 closes when the sub-issue lands. Cost: a second card, claim, dispatch and PR for one sentence. Axes: same outcome, more process; justified only if the maintainer wants legal-page edits on their own review track.", "C. Leave it and flip #335 to 'Fixes #295'. Cost: none now. Axes: fails 'every place' in the ruling, and the privacy page keeps contradicting the license page." ], "recommendation": "A. It is the same defect class, the same ruling and the same reviewer, and the edit shape is already pinned on three pages. The only real judgment is the 'Last updated' bump, and it is honest to bump it when the policy's text changes." } ], "out_of_scope_findings": [ "class: b · reach: public door — the built /privacy page (en and zh-Hans; .next/server/app/en/privacy.html on 08c73b2 contains 'ObjectOS Self-Managed validates its license online') names the edition 'ObjectOS Self-Managed' that ruling 6124045928 answer 1 retires · Seam: ruling 6124045928 answer 1 → renderer: apps/docs/app/[lang]/privacy/page.tsx content.en.body[2].text (plus zh-Hans.json:16 / zh-Hant.json:16) · evidence: git grep -n -i 'self-managed' on 76988da hits privacy/page.tsx:36; release 6147548827 recorded the page as agreeing, which is true of :23 and :28 only · within #295's own scope ('every place that uses Self-Managed as an edition name'), outside the claimed file surface: name it a sub-issue of #295 or fold it into PR #335 (open_questions A) · dedupe words: 'ObjectOS Self-Managed privacy', 'privacy page edition name', 'Self-Managed validates its license online'" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Claim amendment · 2026-10-16T05:16Z · seat
repo:objectos, sessionsession_01CXCwzqwMhkphKoBC11oPSz, branchclaude/issue-295-enterprise-vocab(claim6208391391)File surface widened by one sentence, under the same ruling (
6124045928, answer 1: 「A 自托管统称 Enterprise」 — every edition-name use of "Self-Managed" is re-worded):apps/docs/app/[lang]/privacy/page.tsx:36— "ObjectOS Self-Managed validates its license online", plus itszh-Hans.json:16twin and the generatedzh-Hant.json:16.Measured on
76988da:git grep -n -i self-managedoverapps/docs/app/[lang]/privacy/hits:23and:28, which already agree, and:36, which does not. The released claim's note (6147548827, "privacy/page.tsx already agrees") was true of:23and:28only; the dev's report6208617622caught:36.Seat decision (not escalated — this executes a made ruling): option A of the dev's open question.
license.mdx:155,index.mdx:76andarchitecture.mdx:72("Self-managed ObjectOS validates its license online"); zh-Hans gets the matching wording; zh-Hant is regenerated; the page's "Last updated" date moves to the patch date.Fixes #295, set by the seat.Serial constraints unchanged: no other card in flight touches the privacy page.
Generated by Claude Code
docs(privacy): retire the "ObjectOS Self-Managed" edition name on the…
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{ "issue": 295, "status": "done", "round": "patch round 1 (claim amendment 6208640860)", "branch": "claude/issue-295-enterprise-vocab", "pr": "https://github.com/objectstack-ai/objectos/pull/335", "session": "session_01CXCwzqwMhkphKoBC11oPSz — subagent of the repo:objectos seat (parent's id, from the Claude-Session line)", "premise_still_valid": true, "final_commit": "fd0f4c0f0e60cd128a145d086460fc1d5a91be39", "summary": "Patch round 1 is pushed on top of 08c73b2 as fd0f4c0. origin/main is still 76988da, so no merge was needed. Changes, all on the privacy page: (1) en entry of apps/docs/app/[lang]/privacy/page.tsx:36: 'ObjectOS Self-Managed validates its license online' becomes 'Self-managed ObjectOS validates its license online', the form pinned at license.mdx:155, index.mdx:76 and architecture.mdx:72. The rest of the sentence is unchanged. (2) zh-Hans.json:16: 'ObjectOS Self-Managed 会在线校验许可证' becomes '自管 ObjectOS 会在线校验许可证'. (3) zh-Hant.json was regenerated by apps/docs/scripts/gen-zh-hant.mjs, which owns the privacy/terms/ui-text JSON pairs as FIXED_PAIRS ('1 written'), not hand-edited. (4) 'Last updated' moved to October 16, 2026 in en and to '2026 年 10 月 16 日' in zh-Hans, carried to zh-Hant by the generator. Nothing else on the legal page changed, and the terms page is untouched. A repo-wide git grep for 'ObjectOS Self-Managed' now exits 1 (no hits). PR body not edited: its first line still reads 'Part of #295' for the seat to flip. PR is still draft.", "tests": "Built pages from the locked build of fd0f4c0. In each of en/privacy.html, zh-Hans/privacy.html and zh-Hant/privacy.html, 'ObjectOS Self-Managed' occurs 0 times. The new sentence is present in each ('Self-managed ObjectOS validates its license online' / '自管 ObjectOS 会在线校验许可证' / '自管 ObjectOS 會線上校驗許可證'), and so is the new date ('October 16, 2026' / '2026 年 10 月 16 日'). No test file changed; no ablation (no tested behaviour moved).", "gates": "LOCAL on fd0f4c0, exit codes captured before any pipe: gen-zh-hant.mjs --check exit 0 ('53 generated file(s) match ... byte for byte'); npm ci doc-samples exit 0 + check-doc-samples exit 0 (98 pass); check-translations exit 0; check-translation-ownership --files (name-status, no renames) exit 0 as CI runs it, and exit 0 with TRANSLATION_BOT_LOGIN set as a probe ('12 file(s) changed: 2 translation artifact(s) deleted, none added or modified'); check-translation-output --files exit 0. Through os-verify-lock: type-check VERDICT command-exit 0 (cache miss 50a4e93d3feabd6d), build VERDICT command-exit 0 (cache miss 77ebb43d24fdff44, 1000/1000), turbo test VERDICT command-exit 0 (ci-scripts cache hit 557f349216d5379a, inputs unchanged). After the build: check-positioning exit 0 ('... no stale sentence in 79 English sources and the en entry of 2 legal pages'); check-locale-surface exit 0; check-search-locales exit 0. Control-byte scan of the 3 privacy files: no match. CI on head fd0f4c0 (REST check-runs): build success, every step success including 'Generated zh-Hant is current', 'Positioning', 'Locale surface', 'Worker bundle fits the size budget' and 'The docs site renders — smoke-check a local preview'; Node floor success; Ownership & freshness success; Deploy docs skipped (main-only).", "mcp_calls": "0", "api_writes": "This round: 1 relay stroke for this addendum comment (POST /repos/objectstack-ai/objectos/issues/295/comments via POST /repos/objectstack-ai/objectstack/dispatches) and 1 git push (fd0f4c0). Run total: 3 relay strokes (pr_create + its assignee POST, report comment 6208617622, this addendum) and 3 git pushes. 0 PR-body, label, card-assignee, merge or ready writes.", "files_changed": [ "apps/docs/app/[lang]/privacy/page.tsx (:24 date, :36 sentence)", "apps/docs/app/[lang]/privacy/zh-Hans.json (:4 date, :16 sentence)", "apps/docs/app/[lang]/privacy/zh-Hant.json (regenerated by gen-zh-hant: :4, :16)" ], "line_budget": "n/a — no skills/** or managed ledger touched. This round: 3 files, +6 / -6.", "deviations": [ "None this round. Worktree /home/user/objectos-issue-295 recreated from the branch head 08c73b2, then removed again after the push (node_modules deleted first, git worktree remove without --force)." ], "open_questions": [], "out_of_scope_findings": [] }Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
ACCEPT → PR #335 comment 6208720309 · 2026-10-16T05:23Z · awaiting a human merge (merging to
mainpublishes production).Generated by Claude Code