Skip to content

Three docs pages give instructions that fail: operate/upgrade contradicts deploy/docker, configure/ai imports an unpublished package, help links point to disabled GitHub Discussions #297

Closed

Description

@objectstack-fleet

Found by the seat's site-wide audit of docs.objectos.ai on 2026-10-06, which built main @ b754364. Priority: P1. A reader who follows any of these pages hits a dead end, or does something unsafe.

1. operate/upgrade.mdx contradicts deploy/docker.mdx

operate/upgrade.mdx says deploy/docker.mdx:152-166 says
Roll back by "previous container tag" Pin by digest
Uses docker compose -f docker/docker-compose.yml, a layout from the retired @objectos/server repo (not used)
No backup step Back up first
(silent on schema) Rolling the image back does not roll the schema back

Fix: rewrite operate/upgrade.mdx as the Docker page's procedure, or reduce it to a pointer to that procedure. Nothing else may be invented.

2. configure/ai.mdx installs a package that no longer ships

  • configure/ai.mdx:11,34,198 and reference/runtime-capabilities.mdx:30 tell readers to import … from '@objectstack/service-ai'.
  • That package is frozen on npm at 10.3.0, while the CLI is at 17.6.0.
  • The page's source link returns 404, because the folder is gone from the public objectstack repo.

Fix:

  • Remove the install and import instructions that no longer work.
  • Describe AI configuration only as far as a public source documents it: objectstack origin/main README or content docs, or this repo.
  • If the current procedure is not publicly documented, say what is configured where, and raise the gap in the PR body. ⛔ Never cite a private repository.

3. Help links point at a feature that is turned off

  • resources/faq.mdx:218 and resources/support.mdx:10 send readers to GitHub Discussions on this repo, and has_discussions is false.
  • README.md names this repo's issue tracker as the public channel.

Fix: point both links at the issue tracker, or another channel the README names.

Done looks like

Surface

  • content/docs/operate/upgrade.mdx, content/docs/configure/ai.mdx, content/docs/reference/runtime-capabilities.mdx, content/docs/resources/faq.mdx, content/docs/resources/support.mdx (English);
  • their locale siblings, deletion only, under ruling A.

Order

After the P0 card on the single push branch.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop, repo:objectos seat
    Session: session_01FeA1nwBz1ohH65dvffUGKr
    Account: hotlong (the seat's linked user, as GET /user answers it; always the card's assignee)
    Branch: claude/pm-dispatch-objectos-ju9td1, the session's one designated push branch for this repo. It is about to carry #296's PR (queue: #296 → #297 → #299 → #167 → #298 → #301, recorded on #167 6010721523). This card's work is therefore staged: it is built and verified in its own worktree on a local branch cut from origin/main, then rebased and pushed when its turn in the queue comes.
    Worktree: objectos-issue-297
    Domain: n/a (single-lane repo)
    Seat: repo:objectos (objectstack-ai/objectstack#9831)
    File surface: content/docs/operate/upgrade.mdx, content/docs/configure/ai.mdx, content/docs/reference/runtime-capabilities.mdx, content/docs/resources/faq.mdx, content/docs/resources/support.mdx (English), and their locale siblings by deletion only, under ruling A of #256.
    Stop on breach and explain in the report.
    Container & model: M, mode:subagent, model: default.
    Clause-②: no
    Thread-read: none
    Serial constraints cleared: no. Pushes on this repo are serial on the one branch; the queue order is recorded on the coordination comment. Staging runs in parallel because each card's surface is disjoint from the PR ahead of it.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 297,
    "status": "staged",
    "branch": "staged/issue-297",
    "worktree": "/home/user/objectos-issue-297",
    "final_commit": "39e66530058fa7b2ff15a4c165bfb244c95d278b",
    "base": "3b179841a78c0d1996e024aefc3b1dab7577c40f (origin/main = #302, which is #296's PR, merged before any edit here; the empty staged branch was moved onto it from 6b0e9a5)",
    "commits": [
    "39e6653 docs: make the upgrade, AI and help pages follow their public sources"
    ],
    "pr": null,
    "session": "session_01FeA1nwBz1ohH65dvffUGKr",
    "premise_still_valid": true,
    "summary": "All three defects were re-measured and are fixed on staged/issue-297. The commit is local: not pushed, no PR opened, worktree kept. (1) operate/upgrade.mdx is now the procedure deploy/docker.mdx:152-166 documents, as a checklist: pin by digest, back up first, image rollback does not roll the schema back, roll back to the previous digest. It adds cross-references to the Kubernetes, air-gapped and artifact sentences this repo already has. The retired docker/docker-compose.yml layout is gone. (2) configure/ai.mdx no longer installs, imports or registers @objectstack/service-ai, and its 404 source link is gone; npm still answers 10.3.0 for service-ai against 17.6.0 for the CLI. The page says the chat provider is configured in the ai settings namespace (Setup, Configuration, AI & Embedder) or OS_AI_* variables, citing the public objectstack environment-variables.mdx. The embedder, knowledge and MCP sections now follow the public package READMEs. Two more instructions that fail were fixed on the way: the embedder example claimed apiKey falls back to OPENAI_API_KEY (it is required and the constructor throws), and the MCP tool list named aggregate_data (the open tool is aggregate_records). Six unsourced capability claims were removed. runtime-capabilities.mdx no longer names service-ai as the ai package; the retired service-feed row was removed as a bounded in-place fix. (3) The faq and support help links point at this repo's issue tracker; three Discussions references on support.mdx (lines 10, 16, 43) are gone. Under ruling A, 21 locale siblings are deleted: 7 each for upgrade, ai and runtime-capabilities; zh-Hant was pruned by the generator. All local gates are green on 39e6653. A crawl of 40 locale-page URLs found 624 internal links and 344 anchors with 0 broken.",
    "files": {
    "modified": [
    "content/docs/operate/upgrade.mdx",
    "content/docs/configure/ai.mdx",
    "content/docs/reference/runtime-capabilities.mdx",
    "content/docs/resources/faq.mdx",
    "content/docs/resources/support.mdx"
    ],
    "deleted": [
    "content/docs/operate/upgrade.de.mdx",
    "content/docs/operate/upgrade.es.mdx",
    "content/docs/operate/upgrade.fr.mdx",
    "content/docs/operate/upgrade.ja.mdx",
    "content/docs/operate/upgrade.ko.mdx",
    "content/docs/operate/upgrade.zh-Hans.mdx",
    "content/docs/operate/upgrade.zh-Hant.mdx",
    "content/docs/configure/ai.de.mdx",
    "content/docs/configure/ai.es.mdx",
    "content/docs/configure/ai.fr.mdx",
    "content/docs/configure/ai.ja.mdx",
    "content/docs/configure/ai.ko.mdx",
    "content/docs/configure/ai.zh-Hans.mdx",
    "content/docs/configure/ai.zh-Hant.mdx",
    "content/docs/reference/runtime-capabilities.de.mdx",
    "content/docs/reference/runtime-capabilities.es.mdx",
    "content/docs/reference/runtime-capabilities.fr.mdx",
    "content/docs/reference/runtime-capabilities.ja.mdx",
    "content/docs/reference/runtime-capabilities.ko.mdx",
    "content/docs/reference/runtime-capabilities.zh-Hans.mdx",
    "content/docs/reference/runtime-capabilities.zh-Hant.mdx"
    ]
    },
    "public_sources": {
    "objectstack": "objectstack-ai/objectstack at 753e7a1c (origin/main read 2026-10-06), a public repo; only content docs, CHANGELOG.md and package READMEs are cited",
    "this_repo": "objectstack-ai/objectos at base 3b17984",
    "npm_measured_2026_10_06": "@objectstack/service-ai 10.3.0 (modified 2026-06-23); @objectstack/cli 17.6.0; @objectstack/service-feed 9.7.0; every other package named on the changed pages 17.6.0"
    },
    "changed_sentences": [
    "upgrade frontmatter: 'Upgrade ObjectOS and application artifacts safely.' -> 'Upgrade or roll back ObjectOS Self-Managed by changing the image digest it pins, after backing up the database.' [objectos deploy/docker.mdx:152-166]",
    "upgrade: version table, image row, rollback 'Previous container tag' -> 'On ObjectOS Self-Managed, the image you run is pinned by digest, never by a tag, so an upgrade is a change of digest and a rollback is the previous one.' [objectos deploy/docker.mdx:6, :26, :39]",
    "upgrade: 'docker compose -f docker/docker-compose.yml pull / up -d' -> steps 1-4, worded as the Docker page words them; step 4 names /api/v1/ready [objectos deploy/docker.mdx:154-163, :121]",
    "upgrade: (no backup step) -> 'Back up the database. Schema migrations are forward: rolling the image back does not roll the schema back.' [objectos deploy/docker.mdx:159-160]",
    "upgrade: 'pin the previous image tag in your Compose file ... re-apply it' + 'docker compose ... up -d objectos' -> 'Keep the previous digest: that is what a rollback is. To roll back, restore the previous digest and repeat step 3 — valid as long as the version you are leaving made no incompatible schema change' [objectos deploy/docker.mdx:39, :164-166]",
    "upgrade: 'For Kubernetes, update the image tag and let the deployment roll.' -> 'upgrading is the same change of image digest, with the migration Job running to completion before the new replicas serve' [objectos deploy/kubernetes.mdx:81-82]",
    "upgrade: (none) -> air-gapped bullet 'verify the new digest outside, transfer it in, change the pinned digest, restart. Keep the previous digest ...' [objectos deploy/air-gapped.mdx:97-99]",
    "upgrade: artifact row, file-backed cp + compose restart, cloud-connected pointer steps, 'Rollback artifact' -> 'The app itself, when it is delivered as a published artifact, versions independently of the image ... Treat published artifacts as immutable: if you overwrite one in place, you lose the ability to roll back cleanly even when the database backup is perfect' [objectos deploy/kubernetes.mdx:84-86; operate/backup.mdx:107, :116-117]",
    "ai: intro 'three pluggable layers' table with service-ai -> 'ObjectOS adds an in-product AI runtime — the ask data-query assistant, the build authoring assistant, and the /api/v1/ai/* chat endpoints — on top of AI primitives that ship in the open-source ObjectStack framework ...' [objectstack@753e7a1c content/docs/ai/index.mdx:16-22]",
    "ai: (new) 'On a Self-Managed deployment, a licence is what unlocks the in-product AI ...' [objectos deploy/docker.mdx:74-77]",
    "ai: (new) 'What is configured where' table [objectstack@753e7a1c content/docs/ui/setup-app.mdx:55; content/docs/deployment/environment-variables.mdx:162-168, :179; content/docs/ai/knowledge-rag.mdx:12; objectos configure/mcp.mdx:6-15]",
    "ai: 'pnpm add @ai-sdk/' + 'import { AIServicePlugin, VercelLLMAdapter } from @objectstack/service-ai' + kernel.use(new AIServicePlugin(...)) -> 'There is no AI package to install or register. @objectstack/service-ai left the open ObjectStack distribution in 11.0; the AI runtime it provides ships with ObjectOS, not with the open-source framework.' [objectstack@753e7a1c CHANGELOG.md:1726, :1734-1737; content/docs/api/client-sdk.mdx:182; environment-variables.mdx:163-164; npm 10.3.0]",
    "ai: 'In Setup you can paste these as runtime settings instead — they go through the same precedence (env > settings) but live editing means no restart.' -> 'The provider, model and credentials are settings in the ai namespace, so they resolve like every other setting: an environment variable wins over the value stored in Setup, and locks it' [objectstack@753e7a1c environment-variables.mdx:179, :183, :206-210; objectos configure/system-settings.mdx:25-42]",
    "ai: provider env-var table (OPENAI_API_KEY ...) -> OS_AI_
    table (OS_AI_PROVIDER and its values; the OpenAI, Anthropic, Google and gateway rows; the preset rows OS_AI_ + provider + _API_KEY/MODEL), the locked third-party example, and 'OPENAI_BASE_URL is not a platform-level variable' [objectstack@753e7a1c environment-variables.mdx:179-190, :217-225, :231-234]",
    "ai: 'rebuilds the adapter live when an operator edits ... so no restart is needed' -> 'When no provider is set': boot order AI_GATEWAY_MODEL, OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, then MemoryLLMAdapter echo; upstream names not renamed; OS_AI_MODEL; after boot the runtime swaps the adapter from the ai namespace [objectstack@753e7a1c environment-variables.mdx:172-177, :192-203, :227-229]",
    "ai: kernel.getService('ai') code + 'Conversations are persisted as ai_conversations / ai_messages ...' -> 'Calling it': /api/v1/ai/* routes and the @objectstack/client ai namespace (ai.chat, ai.chatStream, ai.complete, ai.models, ai.conversations) [objectstack@753e7a1c content/docs/api/plugin-endpoints.mdx:7, :105-117; client-sdk.mdx:182, :379-392]",
    "ai: embedder intro + preset table -> 'works against any endpoint that speaks the OpenAI POST /v1/embeddings shape: OpenAI, Azure OpenAI, DashScope, Zhipu BigModel, SiliconFlow, Doubao, MiniMax, Ollama, or your own gateway' [objectstack@753e7a1c packages/plugins/embedder-openai/README.md:3-15]",
    "ai: embedder example comment 'apiKey from OPENAI_API_KEY env if omitted' (fails) -> README's dashscope example with apiKey, plus 'apiKey is required' [objectstack@753e7a1c embedder-openai/README.md:41-47, :106]",
    "ai: 'Or pick at runtime from Setup -> Configuration -> AI -> Embedder. Switch providers without restart; existing vectors stay searchable (you can re-index in the background).' -> 'No knowledge adapter in the open framework consumes an embedder yet: knowledge-memory and knowledge-ragflow take no embedder option.' [objectstack@753e7a1c embedder-openai/README.md:94-96]",
    "ai: knowledge intro -> 'The knowledge service declares knowledge sources and filters what comes back by permission; an adapter plugin does the retrieval itself.' [objectstack@753e7a1c content/docs/ai/knowledge-rag.mdx:9]",
    "ai: adapter table purposes -> memory: dev and tests, not for production, no persistence; ragflow: chunking, embedding, hybrid retrieval, reranking done by RAGFlow [objectstack@753e7a1c packages/plugins/knowledge-memory/README.md:5; packages/plugins/knowledge-ragflow/README.md:5]",
    "ai: KnowledgeServicePlugin({ defaultTopK: 10 }) with no sources -> README's sources shape, labelled 'In the open framework', plus 'The RAGFlow adapter does not create datasets ...' [objectstack@753e7a1c knowledge-ragflow/README.md:14-35, :39]",
    "ai: 'Indexed knowledge bases become first-class objects — query them from flows, surface them in your apps, attach them to AI assistants' -> 'Every hit that carries a source record is re-checked against the caller's permissions ...' and 'Exposing retrieval to the in-product chat as the search_knowledge tool is part of the ObjectOS runtime.' [objectstack@753e7a1c knowledge-rag.mdx:65-68, :76]",
    "ai: 'ObjectOS can expose itself as a tool server ... via the open MCP' -> 'Every ObjectOS deployment already serves the MCP at /api/v1/mcp — on by default, no plugin to install — and can serve it over stdio as well', with a link to configure/mcp [objectos configure/mcp.mdx:6-9, :98-101]",
    "ai: 'The server bridges the AI service's tool registry, including ... aggregate_data.' -> 'Tools are not opted into per option: the plugin bridges the AI tool registry, the metadata service and the data engine when it starts. Every call runs under the calling user's permissions.' [objectstack@753e7a1c packages/mcp/README.md:13, :70-72; content/docs/ai/natural-language-queries.mdx:15-22, :31-33]; the MCPServerPlugin code is unchanged [packages/mcp/README.md:59-62]",
    "ai: 'Where to go next': service-ai source link (404) removed; knowledge-ragflow and mcp source links added (both 200), plus links to configure/mcp and configure/system-settings",
    "runtime-capabilities: ai row package '@objectstack/service-ai' -> 'Not a framework package: the AI runtime ships with ObjectOS (AI Service)' [objectstack@753e7a1c CHANGELOG.md:1734-1737; content/docs/api/client-sdk.mdx:182; environment-variables.mdx:163-164; npm 10.3.0]",
    "runtime-capabilities: feed row '@objectstack/service-feed' removed (bounded in-place fix) [objectstack@753e7a1c content/docs/references/data/feed.mdx:11-12 'The service-feed backend was retired'; npm 9.7.0]",
    "faq:218: 'GitHub Discussions (.../objectos/discussions)' -> 'GitHub Issues (https://github.com/objectstack-ai/objectos/issues)' [objectos README.md:23-24; has_discussions false]",
    "support:10: how-do-I -> GitHub Discussions -> GitHub Issues, 'the public issue tracker for ObjectOS' [objectos README.md:23-24]",
    "support:16: paid feature -> 'Open a Discussion -> tag with funding' -> 'sales@objectstack.ai — see Commercial support & services' [same page :58, :61; no funding label exists on the repo]",
    "support:43: response-expectations row 'GitHub Discussions — Community-driven' removed"
    ],
    "deleted_claims_without_public_source": [
    "ai: 'All three are optional, all three are provider-agnostic, and all three can be reconfigured at runtime from Setup -> Configuration without a restart.'",
    "ai: 'No mandatory cloud dependency. Use Ollama for chat + Ollama embedder + memory knowledge — entirely air-gapped.' (knowledge-memory README:5 says the memory adapter is not for production)",
    "ai: 'Live swappable. Change provider in Setup; new requests use the new provider on next call. No restart.'",
    "ai: 'Per-tenant config. Each Environment has its own AI settings. Tenant A on OpenAI, tenant B on Anthropic — same runtime.' (contradicted: the public ai settings manifest declares scope: 'global', objectstack packages/services/service-settings/src/manifests/ai.manifest.ts:29)",
    "ai: 'Audit log entries. Every conversation, tool call, and embedder request can be audited (@objectstack/plugin-audit).'",
    "ai: 'Cost-aware. Token counts and provider IDs flow through to the audit log for chargeback / cost analysis.'",
    "upgrade: 'Do not mutate artifacts in place. Publish a new artifact and switch the runtime to it.' (superseded by backup.mdx:107/116-117 wording)",
    "upgrade: cloud-connected steps 'Publish the new artifact to the control plane. Move the current project/environment pointer to the new version. Let ObjectOS refetch after cache expiry or restart to force reload.'",
    "upgrade: 'Compatibility checks', five bullets (artifact built against a compatible ObjectStack version; required capabilities in the image; migrations/schema sync understood; auth and permission smoke tests; rollback needs no destructive data changes); not in the Docker procedure, whose step 1 covers compatibility"
    ],
    "locale_siblings_ruling_A": {
    "operate/upgrade": "deleted x7 — each still says 'docker compose -f docker/docker-compose.yml pull' and rollback by previous container tag ('Vorheriger Container-Tag', '上一个容器标签', ...)",
    "configure/ai": "deleted x7 — each still imports from @objectstack/service-ai (de/es/fr/ja/ko: 'import { AIServicePlugin, VercelLLMAdapter } ...'; zh-Hans/zh-Hant: 'import { ServiceAI } ...') and carries the 404 source link",
    "reference/runtime-capabilities": "deleted x7 — each still maps ai to @objectstack/service-ai and feed to @objectstack/service-feed",
    "resources/faq": "no siblings exist; link fix only",
    "resources/support": "siblings already deleted by #302 (#296); not double-deleted",
    "zh_hant": "pruned by gen-zh-hant.mjs ('3 stray file(s) removed'), not hand-deleted"
    },
    "tests": "All on final commit 39e6653, base 3b17984. Each exit was captured before any pipe; turbo and next ran through os-verify-lock with OS_VERIFY_LOCK_SLOT=objectos-issue-297. gen-zh-hant --check exit 0 '✓ zh-Hant: 61 generated file(s) match the zh-Hans sources byte for byte.' | turbo type-check exit 0, cache miss, 'Tasks: 1 successful, 1 total', VERDICT command-exit 0 | NEXT_PRIVATE_STANDALONE=true turbo build exit 0, cache miss, '✓ Compiled successfully in 41s', '✓ Generating static pages ... (1052/1052)', VERDICT command-exit 0. The build logged 355 'Failed to load dynamic font' lines: the OG font fetch hit the proxy's self-signed certificate. That is environmental and pre-existing, and not gated. | check-locale-surface exit 0 '✓ every advertised URL has a source file and every source file is advertised; ...' | check-positioning exit 0 '✓ positioning: 3 copies equal the constant; 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' | check-search-locales exit 0 '✓ search locales: all 8 locales answer 200, ...' | turbo test: the first run replayed the cache, so it was re-run with --force, exit 0, 'cache bypass', '✓ 10 self-test(s) passed', VERDICT command-exit 0 | check-translations exit 0 '✓ translations gate passed' (the deleted siblings now count as missing, which is non-blocking) | translation ownership, workflow argv (git diff --name-status --no-renames BASE...HEAD; --actor objectstack-fleet[bot]): exit 0 with the variable unset (inert). With TRANSLATION_BOT_LOGIN set: exit 0 '✓ 26 file(s) changed: 21 translation artifact(s) deleted, none added or modified.'; --self-test exit 0 | check-translation-output --files (PR-scoped) exit 0 '✓ translation output gate passed (98 pre-existing finding(s) reported)'; --self-test exit 0 | check-node-floor and --self-test exit 0; check-half-states --self-test exit 0 | control-byte self-scan on the 5 English files: no match. Crawl (next start :3297, stopped after use): 5 changed pages x 8 locales = 40 URLs, 40 answered 200; 624 internal links, 0 broken; 344 #anchors, 0 broken; 'CRAWL VERDICT: PASS'. External: the four objectstack package folders and objectos/issues answered 200; discord.gg, modelcontextprotocol.io, status.objectstack.ai and www.objectos.ai were refused by the egress proxy: NOT MEASURED. No ablation or reverse check applies: content-only change. NOT MEASURED (declared to CI): Worker packaging (opennextjs-cloudflare build --skipNextBuild), Worker size budget, local-preview smoke-docs.",
    "screenshots": {
    "dir": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-297/shots",
    "files": [
    "upgrade-1440.png",
    "upgrade-390.png",
    "ai-1440.png",
    "ai-390.png",
    "ai-390-part1.png",
    "ai-390-part2.png",
    "ai-390-part3.png",
    "runtime-capabilities-1440.png",
    "runtime-capabilities-390.png",
    "faq-1440.png",
    "faq-390.png",
    "support-1440.png",
    "support-390.png",
    "zh-Hans-ai-1440.png",
    "zh-Hans-ai-390.png"
    ],
    "observed": "All pages were looked at. At both widths scrollWidth == clientWidth, so no page scrolls horizontally, and there were no page errors. At 390 the wide tables (the AI layer and OS_AI
    * tables, the adapter table) scroll inside their own overflow-x:auto container, as tables do elsewhere on the site. /zh-Hans/docs/configure/ai renders the new English body under lang=zh-Hans."
    },
    "pr_body_draft": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-297/pr-body.md",
    "deviations": [
    "Base: origin/main moved to 3b17984 (#302 = #296's PR, merged) between worktree creation and the first edit. The empty staged branch was reset onto that sha before any edit, so the support siblings were already gone and nothing is double-deleted.",
    "Bounded in-place fix the card did not name: the runtime-capabilities 'feed' row, @objectstack/service-feed. That package is retired per the public feed.mdx:11-12, and npm answers 9.7.0. All four exemption conditions hold: same defect class, a mechanical row removal, a file inside the claim's surface, and the same gate family. The PR body names it.",
    "support.mdx lines 16 and 43 also pointed at Discussions; the card named only :10. They are fixed as the same defect on the same surface page.",
    "configure/ai.mdx goes beyond the service-ai removal. Under the card's rule 'describe AI configuration only as far as a public source documents it', every remaining sentence was re-sourced. Two further failing instructions were fixed: the embedder apiKey fallback and the aggregate_data MCP tool name. Six unsourced claims were removed, and they are quoted in the PR body.",
    "The shared verify lock was run from /home/user/objectstack/scripts/pm/os-verify-lock.sh, because objectos has no copy.",
    "Ran 'git stash list' once. It is a read-only listing; the stack was empty and nothing was stashed.",
    "The four-axis decision framework was not carried in the dispatch. The open questions below are gap notes with a recommendation, not a needs_decision escalation."
    ],
    "mcp_calls": "0",
    "api_writes": "1 — the os-dev-report comment, POST repos//issues/297/comments. It was sent by scripts/pm/post-stamped.mjs over the fleet relay: POST repos/objectstack-ai/objectstack/dispatches, which fleet-write.yml executes as objectstack-fleet[bot]. Everything else was REST reads (issue 297, comment 5989567068, issue 296, claim comment 6012817144, labels, repo flags, releases/tags). No push, no PR, no label write.",
    "open_questions": [
    {
    "question": "Public sources name the Setup entries 'AI & Embedder' and 'Knowledge' (objectstack setup-app.mdx:55) but not what they hold, so the ObjectOS-side embedder and knowledge settings are a gap. The page now says where the chat provider is configured, and shows the open-framework wiring for embedder and knowledge, labelled as such. What should the page do about the gap?",
    "options": [
    "A ship as is",
    "B the maintainer publishes the ObjectOS fields (this repo or objectstack), then a follow-up documents them",
    "C drop the framework code blocks from this ObjectOS page and link to the objectstack docs"
    ],
    "recommendation": "A now, B as a follow-up. A makes no unsourced claim and keeps working, sourced content; C deletes that content."
    },
    {
    "question": "Six capability claims were removed from configure/ai.mdx for lack of a public source: no restart, per-tenant, audit, cost, Ollama fully air-gapped, and vectors stay searchable. Should any return?",
    "options": [
    "A leave them out until a public source exists",
    "B restore any the maintainer confirms, each with a public source line"
    ],
    "recommendation": "A. The per-tenant claim is contradicted by the public scope: 'global' ai settings manifest."
    }
    ],
    "out_of_scope_findings": [
    "carrier: none · noted, not filed — reference/runtime-capabilities.mdx:41-45 says a missing capability package is warned and skipped. The open CLI fails fast instead (objectstack content/docs/deployment/cli.mdx:521). ObjectOS behaviour is not public, so the sentence is unchanged. Dedupe words: capability missing warning fail fast requires",
    "carrier: none · noted, not filed — three pages point at configure/ai for content it never documented, before or after this PR: build/automation/flows.mdx:307 (ai_call action), reference/security.mdx:278 (redact config), build/ai-builder.mdx:183 (Doubao as a chat provider; not in the public OS_AI_PROVIDER list). Dedupe words: ai_call redact Doubao configure/ai cross-reference",
    "carrier: none · noted, not filed — resources/support.mdx:15 says 'Watch ... -> Releases', but GET repos/objectstack-ai/objectos/releases returns 0 releases. Dedupe words: support releases watch empty",
    "carrier: none · noted, not filed — AGENTS.md:69 says '62 of 79 pages'; the count drifts with every ruling-A deletion, and AGENTS.md is a governed file. Dedupe words: zh-Hant coverage count AGENTS"
    ]
    }

  3. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 297,
    "status": "done",
    "branch": "claude/pm-dispatch-objectos-ju9td1",
    "pr": "#303",
    "pushed_head": "39e66530058fa7b2ff15a4c165bfb244c95d278b",
    "session": "session_01FeA1nwBz1ohH65dvffUGKr",
    "premise_still_valid": true,
    "addendum_to": "os-dev-report comment 6013304544 on this issue, which carries the full before/after list, sources, gates and screenshots",
    "summary": "This is the addendum to the staged report. origin/main had not moved past 3b17984, so the gates were not re-run and the verdicts quoted for 39e6653 stand. The staged commit 39e6653 was pushed to claude/pm-dispatch-objectos-ju9td1 with --force-with-lease against dd17bd2; ls-remote now answers 39e6653. Draft PR #303 (base main, first line 'Fixes #297') was opened through the fleet relay pr_create op, with the scratchpad pr-body.md as its body. Reading the body back gave the same text as sent, apart from one trailing newline, and its footer is intact. The PR is assigned to hotlong via label-write, and the read-back matches. It was not marked ready, not merged, and has no reviewers. The worktree /home/user/objectos-issue-297 was removed without --force, after its node_modules; the local branch staged/issue-297 was deleted after its sha was confirmed equal to the remote head. No server is running.",
    "tests": "No re-run: origin/main = 3b17984 = the base the gates ran on. CI on 39e6653 at the time of writing: Ownership & freshness completed success; Node floor completed success; build in_progress. Not awaited.",
    "mcp_calls": "0",
    "api_writes": "5 for the whole run, all through the fleet relay (POST repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]): (1) issues/297/comments, the staged os-dev-report; (2) pulls, pr_create draft #303; (3) issues/303/assignees, hotlong via label-write; (4) issues/297/comments, this addendum, which the PM requested. git push is not a REST write.",
    "open_questions": [],
    "out_of_scope_findings": [
    "See comment 6013304544; the list is unchanged."
    ]
    }

  4. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT: PR #303 on head 39e66530058fa7b2ff15a4c165bfb244c95d278b · 2026-10-06T09:31Z. I am landing it now. It touches no governed path, changes 2,672 lines (under the 5,000 limit), and every check is green.

    Path surface, from get_files: 26 files, +165/−2507.

    All of it is inside the claimed surface.

    Checks on 39e6653: build, Ownership & freshness and Node floor succeeded. Deploy docs was skipped. mergeable_state is clean on base 3b17984.

    Docs prose, checked by the seat sentence by sentence (#21192):

    • operate/upgrade.mdx. Steps 1–4 and the rollback paragraph match deploy/docker.mdx:152-166 sentence for sentence. The page also adds readiness /api/v1/ready, and Kubernetes and air-gapped pointers to their existing pages. Nothing is invented.
    • configure/ai.mdx. I checked these against objectstack origin/main:
      • service-ai "left the open ObjectStack distribution in 11.0": CHANGELOG.md [11.0.0], ":1734-1737".
      • The OS_AI_* table, the gpt-4o default, the OS_AI_OPENAI_BASE_URL / OPENAI_BASE_URL note, and the boot order ending in MemoryLLMAdapter: content/docs/deployment/environment-variables.mdx:172-199,212-231.
      • aggregate_records: packages/mcp/README.md:116.
      • The embedder and knowledge sections are labelled as open-framework wiring and follow the package READMEs.
      • The six capability claims that had no public source are removed, and the PR body lists them.
    • runtime-capabilities.mdx. ai is no longer mapped to a framework package. The retired service-feed row is removed, a bounded in-place fix in the same defect class.
    • faq.mdx and support.mdx. Help now points to GitHub Issues, as README.md:23-24 names it. The three references to Discussions (turned off on this repo) are gone.

    Open questions, carried and not blocking:

    • The Setup fields for the ObjectOS-side embedder and knowledge settings have no public source, so the page documents only the open-framework wiring.
    • Whether to restore any of the six removed claims once a public source exists.

    Out-of-scope notes the dev raised, not filed:

    • three pages cite configure/ai for content it never had (ai_call, redact, Doubao);
    • support.mdx:15 points to Releases, which are empty.

    Both are carried into #301's consistency item.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed and live · 2026-10-06T09:36Z


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdocumentationImprovements or additions to documentation

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions