Repository navigation
Description
domain:server#3 · os-elon-musk · session_016WV4cyhB3ePno23ywn1PQd
Filing gate: ① — a follow-up owed by landed work (PR #30720's Skills-docs: line names it as owed), on a shipped surface (skills/**).
Domain: domain:skills · Tier H (skills/**, needs a governed approver) · untriaged
Refs #30120 · PR #30720
What is wrong
skills/objectstack-platform/references/operations.md tells an agent deploying to Docker / Kubernetes only "Use os start as the entrypoint; pin PORT and EXPOSE it" (the Deployment targets table, Docker / Kubernetes row), and Common ops pitfalls has no row for a refused start.
Since PR #30720 (ruling A3 on #30120), the official image sets OS_DEPLOYMENT_DURABILITY_CHECK_ENABLED=true, and os start there exits 1 unless OS_DATABASE_URL, OS_AUTH_SECRET and OS_SECRET_KEY are all set explicitly. It names the missing ones before it writes a database file or a secret. An agent that follows the skill as written now produces a docker run the image refuses.
reach: public entry. The official image run with none of the three set exits 1 with that refusal; this was measured in a real container for PR #30720 (its Verification section).
What the text should say
Copy from docker/README.md ("What the image presets") and content/docs/deployment/self-hosting.mdx, both updated by PR #30720:
- Docker / Kubernetes row: the official image refuses to start unless
OS_DATABASE_URL,OS_AUTH_SECRETandOS_SECRET_KEYare set at runtime (never baked into the image). An explicitOS_DATABASE_URL=file:/path/on/a/mounted/volume/app.dbpasses, so SQLite on a volume still works. - A Common ops pitfalls row: symptom "the official image exits at start naming
OS_DATABASE_URL/OS_AUTH_SECRET/OS_SECRET_KEY"; the cause and fix, including carrying over the generated values. A container that ran on the image's defaults keeps them in/home/node/.objectstack:OS_AUTH_SECRETis the contents ofauth-secret,OS_SECRET_KEYthe contents ofdev-crypto-key, and the data isdata/objectstack.db. Read them from the old container (docker exec <container> cat <file>) or its volume, and set them before starting the new image. Setting new values instead makes every saved credential unreadable and signs everyone out.
Why
Who benefits: anyone who deploys or upgrades with the official image through an agent that reads objectstack-platform. Without this, the agent writes a run command the image refuses. Worse, on an existing deployment it may set fresh secrets, which loses access to every encrypted saved credential.
Who acts
The skills lane seat's dev: one PR to operations.md with the '@objectstack/skills': patch changeset (a skills/** change never takes skip-changeset), plus evals where the skill's ratchet asks. Tier H, so it needs os-zhuang or hotlong to approve.
Dedupe
search/issues with is:issue repo:objectstack-ai/objectstack, open and closed, gave 7 hits and no duplicate. The hits were #30120 itself, the triage seat post and QA run records:
"operations.md" OS_DATABASE_URL: 2image refuses OS_AUTH_SECRET OS_SECRET_KEY: 4skills operations.md Docker Kubernetes: 130120 in:body skills: 0
Activity
objectstack-fleet commentedon Nov 6, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p1 ·
domain:skills· 2026-11-06T06:52Z⛔ Not a claim.
objectstack-platformoperations.mddoes not say the official image refuses to start withoutOS_DATABASE_URL,OS_AUTH_SECRETandOS_SECRET_KEY. An agent following it writes a run command the image refuses, or on an upgrade sets fresh secrets and loses access to every encrypted saved credential.'@objectstack/skills': patchchangeset. The text must say to keep the existing secrets on an upgrade.Generated by Claude Code
objectstack-fleet commentedon Nov 6, 2026
domain:skills#2 · os-tesla · session_01L9qibz5RLVEYDFco93jZ7u
Claim: PM loop round 3 · 2026-11-06T07:40Z
Session:
session_01L9qibz5RLVEYDFco93jZ7uAccount:
os-tesla(the card's assignee)Branch:
claude/project-thread-b3vyir(the card thread's designated branch; dev sessionsession_01L9qibyPEPCmwvSgLKLnUeg)Worktree:
objectstack-issue-30857Domain:
domain:skillsSeat:
domain:skills#2File surface:
skills/objectstack-platform/references/operations.md(Deployment targets Docker / Kubernetes row, one Common ops pitfalls row), at most oneskills/objectstack-platform/evals/*.jsoncase, theoperations.mdratchet row only if it moves DOWN, one root.changeset/30857-image-secrets-refuse-start.md. ⛔skills/objectstack-platform/SKILL.md, ⛔ every other skill, ⛔ every ceiling raise (stop on breach)Container & model:
S,mode:thread,model: claude-fable-5-1(dispatch-gates --tier: MANDATORY forskills/**clause ①, no one-line exit),effort: xhigh(p1)Clause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect card(theSkills-docs:follow-up of PR #30720, ruling A3 on #30120)Thread-read: 6679092587
Premise: holds: the Docker / Kubernetes row of
operations.mdsays only "Useos startas the entrypoint; pinPORT", and PR #30720 (the start-time refusal) is mergedSerial constraints: seat 1's draft PR #30831 edits
skills/objectstack-platform/SKILL.mdandevals/config-plugins-ops.json, notoperations.md; mergeorigin/mainbefore pushing.Tier H (
skills/**): draft until a governed approver approves; the seat's at-tier contract review precedes ACCEPT. p1: lands before the next release.Order:
/mnt/project-files/skills-seat-2/r2026-11-06/dispatch-30857.md(frameFRAME.mdbeside it).objectstack-fleet commentedon Nov 6, 2026
domain:skills#2 · os-tesla · session_01L9qibyPEPCmwvSgLKLnUeg
os-dev-report
Reported 2026-11-06T08:18Z at head
bc38b673ofclaude/project-thread-b3vyir— draft PR #30875.{ "issue": 30857, "status": "done", "branch": "claude/project-thread-b3vyir", "pr": "https://github.com/objectstack-ai/objectstack/pull/30875", "session": "session_01L9qibyPEPCmwvSgLKLnUeg", "premise_still_valid": true, "summary": "skills/objectstack-platform/references/operations.md: the Deployment targets Docker / Kubernetes row says the official image refuses to start unless OS_DATABASE_URL, OS_AUTH_SECRET and OS_SECRET_KEY are set at runtime (never baked in; an explicit file: URL on a mounted volume passes), and a new Common ops pitfalls row names the symptom, the cause (the image presets OS_DEPLOYMENT_DURABILITY_CHECK_ENABLED=true, under which os start exits 1 before writing a database file or a secret), the fix, and the upgrade rule: keep the values the old container generated under /home/node/.objectstack (auth-secret, dev-crypto-key, data/objectstack.db) because fresh ones leave every saved credential unreadable and sign everyone out. Every sentence read off main: docker/README.md, content/docs/deployment/self-hosting.mdx and packages/cli/src/commands/start.ts (readDurabilityCheckSignal, missingDurableVariables, formatDurabilityRefusal). The headroom was 3 tokens; the +~900 bytes were paid by five in-file deletions, each named with its home in the PR body (the intro sentence; the scaffolded npm run validate spelling every domain skill carries; the cloud-connection plugin roster, keeping the MarketplaceInstallLocalPlugin fact; the Testing pattern vitest block that plugin-development.md Testing Plugins / Using Plugins carries, its unique facts kept as prose; the Seed-in-tests bullet carried by the os data row and data seeds.md). 3116 to 3108 tokens, the ratchet row 3119 to 3108 (down only). Eval case 16 (upgrade on a kept volume), changeset '@objectstack/skills': patch. No SKILL.md edit; section headings unchanged.", "tests": "node scripts/check-skills-token-ratchet.mjs: exit 0, 'skills/objectstack-platform/references/operations.md 3108 / 3108 (+0)'; --self-test exit 0, 97 cases pass. skills/objectstack-platform/evals/config-plugins-ops.json parses: 16 cases, ids unique, case 16 spliced before the closing bracket (file formatting untouched). Whole-package readings: operations.md 212 to 181 lines, 3116 to 3108 tokens; sum of every SKILL.md 4523 lines before and after; shipped-bundle total 227058 to 227374 tokens (eval fixture +324, operations.md -8). No ablation: no tested behaviour changed (skill text, an eval fixture, a ratchet row, a changeset).", "gates": "Local subset at bc38b673, exit codes captured before any pipe, one 'COMMAND :: exit CODE' line per command: prerequisite 'bash scripts/pm/os-verify-lock.sh -c \"pnpm build --filter=./packages/** --concurrency=2\"' VERDICT command-exit 0 (held 402 s); then 'node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack' (no paths, change set from the merge base cf478ea3) derived 62 commands and all 62 exited 0 (check:skills-token-ratchet and --self-test, check:skill-identifier-liveness, check:skill-frame-sync, check:skill-compatibility, @objectstack/spec check:skill-refs, check:pm-skill-id-lint, check:doc-authoring, check:empty-changeset, check:changeset-no-major, check:adr-0087-registration, @objectstack/lint check:doc-formula-expressions, check:comment-mask-corpus, check:pm-dispatch-gates, check:pm-governed-merges, check:dts-closure, check:dual-build-cjs-loads, check:published-files, check:lean-entry-closure, check:nul-bytes, and the rest of the derived list). Reconciliation 'dispatch-gates.mjs --repo objectstack-ai/objectstack --ran LIST': 62 derived, 62 run, 0 NOT-MEASURED, 0 UNRUN; changed lines 78 (+36 / -42) against the 3000 threshold. Every CI family: the PR's check-runs (in_progress at report time; pnpm lint and test:repo are CI's run). Not run locally: check:dev-prereqs / check:skill-frame-freshness (not derived; no packages/spec or frame edit). main moved four commits after the push (18870c92), none touching the four files; git merge-tree clean.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "5 reads, 0 writes — issue_read get #30857, issue_read get_comments #30857 (twice, the second to verify the Claim names the branch), pull_request_read get_files #30720, pull_request_read get #30720", "api_writes": "2 relay writes — pr_create (fleet-write run 42186609999, PR #30875, body 10691 bytes sent and stored identical, no labels, no assignees) and this os-dev-report comment through post-stamped.mjs; plus one git push of the branch (not a REST write). The harness's assignee / reviewer step was skipped (MCP writes forbidden); the seat sets them at hand-over. skip-changeset not sent: a skills/** change publishes.", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "class: none of a/b/c (skill prose) · reach: n/a · operations.md Verify your work says a bare field ref in a predicate evaluates to null and silently hides the action/validation, while objectstack-formula SKILL.md Verify your work says the engine throws at runtime and the rule fails loudly; one of the two is stale. carrier: the skills seat · noted in the PR's Acceptance notes, not filed; dedupe words: bare field ref, evaluates to null, Verify your work, ADR-0032" ] }Draft PR, Tier H (
skills/**): the seat's at-tier contract review, then a governed approver (os-zhuang or hotlong); never readied, armed or assigned by this thread. Worktree/home/user/objectstack-30857kept while the PR is driven.Generated by Claude Code
objectstack-fleet commentedon Nov 6, 2026
domain:skills#2 · os-tesla · session_01L9qibz5RLVEYDFco93jZ7u
Landed · 2026-11-06T15:31Z · PR #30875 merged as
d0ebb8f5through the merge queue (ACCEPT 6681522355). The Claim is discharged;pm:dispatchedremoved. Branchclaude/project-thread-b3vyiris retired.Residue filed by the seat: #30893 (the stale bare-predicate-ref wording in operations.md Verify and two SKILL.md files), now unblocked by this merge and #30947.