Skip to content

Docs polish from the 2026-10-06 audit: muted-text contrast, the License table on phones, FAQ formatting, search ranking, glossary order, licence/license spelling #301

Description

@objectstack-fleet

Found by the seat's site-wide audit of docs.objectos.ai on 2026-10-06, which built main @ b754364. Priority: P2. None of these is broken, but each is visible.

Contrast

  • In light mode, the sidebar, the table of contents, the search button and the description under the title measure 4.20–4.35:1, below the 4.5:1 floor.
  • In dark mode, code comments measure 3.65:1.
  • Fix: override the theme's muted-foreground colour and the code theme.

License Editions table on phones

FAQ formatting

  • On the FAQ page and in the License FAQ, each answer runs straight on after its question in one paragraph.
  • Fix: separate the question from the answer, as a heading or as bold plus a paragraph.

Search ranking

  • "permissions" never returns /configure/permissions in the top six.
  • "air-gapped" ranks Marketplace and Packages above the Air-gapped page.
  • Fix: weight page titles higher.

Consistency

Done looks like

  • Each item fixed, or answered in the PR with a one-line reason.
  • Before/after contrast numbers and screenshots, light and dark, at 1440 and 390.
  • Gates green.

Order

Last in this batch.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Two search follow-ups from #296's staged work · 2026-10-06T07:17Z

    #296 fixes the CJK search 500 with an Intl.Segmenter tokenizer and adds a post-build gate. It measured two side effects that belong in this card's search item:

    1. Cold-start cost.
      • fumadocs builds every locale's index on the first search in any locale. With the four CJK indexes now built instead of throwing, the first search after a cold start rose from 2.7–3.0 s to 7.2–7.4 s wall time under Node, and to about 6.2 s in a local workerd preview. Warm searches take 30–60 ms.
      • CPU on the deployed Worker is not measured.
      • Fix to consider: build the search indexes at build time (fumadocs static search export), or build one locale's index lazily per request locale. Either removes the per-isolate cost.
    2. Production smoke.
      • The post-deploy smoke-docs.mjs never requests /api/search, so a search regression in production would not trip it. The new build-time gate covers the route only under Node.
      • Fix: add one search request per locale to the post-deploy smoke.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Two more consistency items, from #297's work · 2026-10-06T09:37Z

    • Pages that point at content configure/ai never had.

      • build/automation/flows.mdx:307: the ai_call action.
      • reference/security.mdx:278: redact config.
      • build/ai-builder.mdx:183: Doubao as a chat provider. It is not in the public OS_AI_PROVIDER list.

      Each claim should be sourced from a public page or removed.

    • resources/support.mdx:15 says "Watch … → Releases". GET repos/objectstack-ai/objectos/releases returns 0 releases. Point readers at a channel that publishes something, or drop the line.


    Generated by Claude Code

  3. 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. #298 and #167 are staged ahead of this card. 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 comes.
    Worktree: objectos-issue-301
    Domain: n/a (single-lane repo)
    Seat: repo:objectos (objectstack-ai/objectstack#9831)
    File surface:

    • the theme colour overrides (apps/docs/app/global.css or equivalent) and the code theme;
    • the License Editions table on phones (CSS);
    • FAQ question/answer formatting in resources/faq.mdx and resources/license.mdx (body formatting only, no claim changes);
    • the search ranking options and the post-deploy smoke search request (apps/docs/app/api/search/route.ts options, .github/scripts/smoke-docs.mjs);
    • glossary ordering;
    • the consistency items listed on this card and in its comments.

    Each item is either fixed or answered in the PR. Content claims change only where the card names them. Stay out of the files #298 (app layout, provider, i18n chrome) and #167 (seoTitle frontmatter) are changing.
    Stop on breach and explain in the report.
    Container & model: M, mode:subagent, model: default.
    Clause-②: no
    Thread-read: 6013513226
    Serial constraints cleared: no. Pushes are serial on the one branch; the queue is on #167 6010721523, as amended on #298.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 301,
     "status": "staged",
     "branch": "staged/issue-301",
     "worktree": "/home/user/objectos-issue-301",
     "final_commit": "8dc4d10",
     "base": "cec227a (origin/main, #306); branch was cut from 601bb37 and rebased onto cec227a before final verification — no conflicts",
     "commits": [
      "afc3c69 docs: muted-text and code-comment contrast, phone table affordance, FAQ headings, title-weighted per-locale search, consistency pass",
      "4cc74cb docs: record the measured search cold start and the smoke search requests",
      "8dc4d10 docs: state the measured contrast ratios in the theme and code-theme comments"
     ],
     "pr": null,
     "pr_body_draft": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-301/pr-body.md (first line: Fixes #301)",
     "session": "session_01FeA1nwBz1ohH65dvffUGKr — parent PM seat's id (subagent)",
     "premise_still_valid": true,
     "summary": "All five card items and both comment follow-ups are done; none is deferred. Contrast: light muted text measured 4.12–4.35 before and 4.99–5.27 after; dark code comments 3.65 before, 5.72 after; light code comments (not named on the card, fixed in place) 4.26 before, 5.66 after. The License table gets a drawn 6 px scrollbar and a scroll-driven trailing fade. 42 FAQ questions become headings. Search now weights title, heading and text 4/2/1 and builds each locale's index on that locale's first search. The first search after boot dropped from 8.7–10.1 s to 0.6–1.4 s under next start, and from 4.7–5.1 s to 0.8–1.0 s under workerd. With weights neutral, results are byte-identical to createFromSource. check-search-locales gains own-title-buried, which goes red on main's route with 56 findings. smoke-docs asks /api/search in every locale, with a nonce control. In the consistency pass, ruling A deletes 14 locale siblings, and build/interface/views.mdx is the one page deliberately left unconverted (see deviations and findings).",
     "items": {
      "1_contrast": "FIXED. --color-fd-muted-foreground set to hsl(0 0% 40%) via @theme in app/global.css; the dark .dark value is untouched. In source.config.ts, shiki colorReplacements are spread over rehypeCodeDefaultOptions: github-dark #6a737d to #8b949e, github-light #6a737d to #57606a; #6a737d is the comment colour, and only the comment colour, in both themes. Before to after, Chromium, computed colour composited over its real background, at 1440 and 390: light sidebar 4.20 to 5.08, TOC 4.35 to 5.27, search button 4.12 to 4.99, description 4.35 to 5.27, light code comments 4.26 to 5.66, dark code comments 3.65 to 5.72. Dark muted text is unchanged at 6.08–8.86.",
      "2_license_table_phone": "FIXED. mdx-components.tsx overrides table: fumadocs' own wrapper plus a docs-table class. global.css draws a 6 px ::-webkit-scrollbar, with no scrollbar-width or scrollbar-color for Blink or WebKit; Firefox gets thin under @supports not selector(::-webkit-scrollbar). It adds a 40 px mask fade on a scroll(self inline) timeline, using @property --docs-table-fade. Under mobile emulation at 390 and 360 the scrollbar went from 0 px (overlay) to 6 px. The mask is calc(100% - 40px) at scroll start and 100% at the end. At 1440 there is no overflow and the mask stays fully opaque. The page scroll width equals the viewport.",
      "3_faq": "FIXED. 35 questions in resources/faq.mdx and 7 in the resources/license.mdx FAQ become ### headings, each followed by its answer as a paragraph; the Q:/A: prefixes are dropped. After normalising the formatting, the only text change is the license-validation sentence (item 5).",
      "4_search": "FIXED. Ranking: a custom sortBy weights page title 4, heading 2, text 1. \"permissions\" now puts /docs/configure/permissions first; before, it was outside the top 8. \"air-gapped\" now puts /docs/deploy/air-gapped first; before, it was 3rd. English pages first for their own title: 30 of 79 before, 76 of 79 after; the remaining 3 share their title with another page. Cold start: each locale's index is built on that locale's first search, from the public createSearchAPI and findPath APIs. Measured interleaved on one box: next start, en first 8.72–10.14 s to 0.63–0.82 s; ja first 8.95–9.67 s to 1.23–1.37 s. workerd preview: en 5.11 s to 0.81 s; ja 4.67 s to 1.04 s. Next locale's first search 0.48–2.21 s; warm 23–222 ms. A build-time index was NOT adopted: fumadocs staticGET is client-side search, which ships every locale's index to the browser, kills /api/search?query= (the contract both gates call), needs the CJK tokenizer in the browser bundle, and needs a RootProvider change in #298's root-provider.tsx. Parity, with weights at 1, in one process: 165 requests, 6299 hits, 0 differences against createFromSource. check-search-locales gains own-title-buried (a page's own title must rank it within the first 3 pages): red on main's built route with 56 findings, green here. smoke-docs gains one /api/search per i18n.ts locale (200, JSON array, non-empty) plus a nonce control that must come back empty; 4 new rules with fixtures, 16 of 16 shown able to fail. Ablating the nonce rule turns the self-test red (2 cases); the restore is blob-equal to HEAD.",
      "5_consistency": "FIXED, except views.mdx. Data residency: one table, kept in reference/security.mdx#data-residency, merged with the rows only the other copies had; index.mdx and architecture.mdx now link to it. License-validation sentence: identical in index, architecture, License FAQ and FAQ. defineObject replaced by ObjectSchema.create in reference/rest-api.mdx and configure/permissions/record-access.mdx. Source: objectstack @ 0d8ea5e1, content/docs/data-modeling/objects.mdx:15, and packages/spec/src/kernel/manifest.zod.ts:386, which says the platform 'deliberately does NOT provide' a defineObject factory. In rest-api.mdx the apiMethods and apiEnabled keys move under enable, because a touched published sample must not show a call that ObjectSchema.create rejects. build/interface/views.mdx is NOT converted: its object-level view key would be rejected anyway, so it is reported as a finding. Spelling: license, American English, because the corpus is American on every other pair (organization 83:1, behavior 26:7, catalog 35:1) and the title, URL and env vars say license; 86 replacements in 14 English pages, no locale file touched, and the one inbound #licence anchor link updated. Configure: the index page title changes from Administration to Configure, and 3 link texts are aligned. Glossary: alphabetised, with AI seat (from License & Pricing) and Position (from configure/permissions/positions) added; editions left for #295. Logo: now goes to the docs home in the reader's locale, and www.objectos.ai stays as an icon link beside GitHub. llms.txt: the example is derived from the first nav-order page with a real translation in the first other locale; today that is /zh-Hans/docs/use, which renders Chinese. configure/ai citations: the flows ai_call bullet is removed (no ai_call node in FlowNodeAction); the security redact parenthetical is removed (no public source, and objectstack lists redact as Deferred); the ai-builder Doubao mention becomes OpenAI / Anthropic / Google / DeepSeek, from OS_AI_PROVIDER. Under ruling A of #256, 14 siblings are deleted (flows and ai-builder, de/es/fr/ja/ko/zh-Hans, plus the 2 generated zh-Hant files). support.mdx: the releases line now points at Release notes and at objectstack Releases, which carries @objectstack/runtime@17.6.0. changelog.mdx gets the same fix in place, because it pointed at the same empty objectos/releases feed twice."
     },
     "tests": "All at 8dc4d10, the final commit. Heavy commands ran through /home/user/objectstack/scripts/pm/os-verify-lock.sh, because objectos has no lock script of its own. (1) pnpm turbo run type-check --continue --force: TYPECHECK_EXIT=0, 1 successful. (2) NEXT_PRIVATE_STANDALONE=true pnpm turbo run build --force: BUILD_EXIT=0, 1 successful. (3) pnpm turbo run test --force: TEST_EXIT=0, '✓ 10 self-test(s) passed', including the new smoke self-test ('11 page case(s), 8 search case(s) and 3 run case(s) — all 16 rules demonstrated able to fail') and the new search self-test ('11 cases, all 7 rules can fire'). (4) gen-zh-hant.mjs --check: EXIT=0, '✓ zh-Hant: 60 generated file(s) match the zh-Hans sources byte for byte.' (5) check-locale-surface: EXIT=0. (6) check-positioning: EXIT=0, '4 copies equal their constants; … no stale sentence in 79 English sources'. (7) check-search-locales: EXIT=0, 'all 8 locales … find every own page by its title within the first 3 pages, and find nothing for a nonce'. (8) check-translation-ownership with the workflow argv (git diff --name-status --no-renames origin/main...HEAD), --actor hotlong, TRANSLATION_BOT_LOGIN set: EXIT=0, '45 file(s) changed: 14 translation artifact(s) deleted, none added or modified.' Control run with the bot as actor: EXIT=1. (9) check-translations: '✓ translations gate passed'; stale is reported only, zh-Hans 39 to 37 and the other locales 24 to 22. (10) check-translation-output --files: '✓ translation output gate passed (94 pre-existing finding(s) reported)'. (11) check-node-floor: EXIT=0; check-half-states --self-test: '1551 cases pass'. (12) opennextjs-cloudflare build --skipNextBuild, then preview on 127.0.0.1:8792, then smoke-docs.mjs --base: SMOKE_EXIT=0, '✓ smoke: 4 page(s) rendered …, negative control demonstrated red, search answered in 8 locale(s) and found nothing for a nonce'. (13) wrangler deploy --dry-run: 'Total Upload: 47016.28 KiB' against a budget of 61440. (14) Control-byte scan of the 31 added or modified files: 0. Negative controls: the new check-search-locales run against main's built route (601bb37) gives EXIT=1 with 56 own-title-buried findings. Ablation of the smoke nonce rule: the mutation landed (anchor grep 1 to 0, mutant marker 1), the self-test went to EXIT=1 with 2 cases red, and the file was restored with git checkout HEAD; restored blob 413e8121 equals HEAD's, git diff HEAD is empty, and the self-test is back to EXIT=0.",
     "screenshots": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-301/shots/before and /tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-301/shots/after: quickstart-{light,dark}-{1440,390}, license-{light,dark}-{1440,390,360} (+ -scrolled-end, -table-bottom-mobile), faq-{light,dark}-{1440,390}, search-permissions-{light,dark}-{1440,390}, code-comments-{light,dark}-{1440,390}, report.json (raw measurements). The before shot search-permissions-light-1440 shows the dialog still empty 2.5 s into the first search: the cold start itself.",
     "deviations": [
      "Rebased staged/issue-301 from 601bb37 onto origin/main @ cec227a (#306, the landing of #298) before final verification. There were no conflicts; every gate above was rerun on the rebased head. The before measurements used 601bb37, whose content and app code for these items match cec227a.",
      "Cold start keeps a runtime index, now one per locale and built lazily, instead of a build-time export; the reason is under item 4. The brief preferred a build-time index only if one was feasible within this card.",
      "Fixed in place, all bounded and the same defect class: light-mode code comments (4.26); changelog.mdx's two links to the empty objectos releases feed; rest-api.mdx's sample keys moved under enable, with one intro sentence saying so.",
      "build/interface/views.mdx keeps defineObject. Converting it would document an ObjectSchema.create call that throws. Reported as a finding.",
      "The logo decision adds one header element: a www.objectos.ai icon link beside GitHub. Its label is the host name, so it has no ui-text entry.",
      "14 locale siblings are deleted under ruling A of #256: build/automation/flows and build/ai-builder, de/es/fr/ja/ko/zh-Hans, plus the 2 generated zh-Hant files. Every one carried the removed claim.",
      "Expected rebase conflicts with #167, from a trial git merge-tree against staged/issue-167: configure/index.mdx (the title: line) and deploy/air-gapped.mdx (the description: line). Both sit next to #167's seoTitle insertions; resolve by keeping both lines. #167's air-gapped seoTitle spells 'Licence Mode', which under this PR's spelling choice is 'License Mode'. The seat should reconcile that.",
      "The workerd cold-start helper's lock VERDICT read 143. That is the script's final wait on the SIGTERM'd preview, and all four measurement lines had completed. The final multi-part lock call printed 'batch-last-exit'; each part's exit was captured on its own (TYPECHECK_EXIT, BUILD_EXIT and TEST_EXIT all 0).",
      "NOT MEASURED: the live post-deploy smoke against https://docs.objectos.ai. This container's egress proxy denies docs.objectos.ai (CONNECT 403). The new search requests ran only against a local workerd preview.",
      "Local verification trap: next start -H 127.0.0.1 loops forever (307) on prefix-less English routes, because the middleware rewrite to localhost is treated as external. All browser checks bound without -H."
     ],
     "mcp_calls": "0",
     "api_writes": "1 — this os-dev-report comment on objectstack-ai/objectos#301 (POST /repos/objectstack-ai/objectos/issues/301/comments, through the scripts/pm/fleet-write relay). Nothing pushed, no PR opened, no labels.",
     "open_questions": [],
     "out_of_scope_findings": [
      "class: c · reach: named producer — content/docs/build/interface/views.mdx:25-35, the public Views page, shipped in llms-full.txt and llms.mdx · evidence: the sample authors defineObject from '@objectstack/spec' with an object-level view: { list, form, listViews, formViews } and fields as an array. objectstack @ 0d8ea5e1 provides no defineObject (packages/spec/src/kernel/manifest.zod.ts:386). ObjectSchemaBase is strictObject, and ObjectSchema.create refuses unknown top-level keys (packages/spec/src/data/object.zod.ts:2985, 'No silent strip'); view is not a key (listViews is), and fields is a record. NOT MEASURED against a running runtime. · dedupe words: views.mdx defineObject view key listViews ObjectSchema.create",
      "carrier: none · noted, not filed — reference/rest-api.mdx 'Allowed values' still lists the 8 legacy apiMethods (upsert, aggregate, history, search, restore, purge, import, export) that ObjectStack strips at parse with a warning (LEGACY_API_METHODS, object.zod.ts:33). Untouched line; it warns rather than discarding silently.",
      "carrier: none · noted, not filed — build/automation/flows.mdx samples use action: 'send_email' (lines 54 and 250), and the Email bullet calls it 'the send_email action'; FlowNodeAction has no such value. Read-only inference: not verified which schema the action key belongs to.",
      "carrier: none · noted, not filed — AGENTS.md says Simplified coverage is '62 of 79 pages today'; main has 50, and this branch has 48.",
      "carrier: none · noted, not filed — search ties between documents of the same kind still follow fumadocs-mdx's generated import order, which is not stable between builds (measured: 27 of 142 responses ordered differently across two builds of one tree, before weighting)."
     ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report-addendum

    {
     "issue": 301,
     "status": "staged",
     "addendum_to": "https://github.com/objectstack-ai/objectos/issues/301#issuecomment-6015403615",
     "branch": "staged/issue-301",
     "worktree": "/home/user/objectos-issue-301",
     "final_commit": "7761b18",
     "base": "cec227a (origin/main, unchanged since the first report)",
     "added": [
      "build/interface/views.mdx: both declaration samples are rewritten from defineObject plus an object-level view key to the form ObjectStack documents, a defineView container. It holds the default list, listViews, the default form and formViews, each bound through data: { provider: 'object', object: 'support_ticket' }, and every list view has a top-level columns. It is registered with defineStack({ views: [...] }), and the page links to ObjectStack's View metadata page. Source: objectstack @ 8a399b2b, content/docs/ui/views.mdx:9-73 (the os:check-compiled container example and registration), packages/spec/src/ui/view.zod.ts:4749 (ViewSchema), :4845 (defineView) and :1809 (kanban.columns is required).",
      "Evidence: both samples, extracted from the page as published, parse with @objectstack/spec 17.6.0 from npm. Controls on the same install: the old object-level view key is refused ('view is not an ObjectSchema field'), there is no defineObject export, top-level apiMethods is refused, and a list view without columns is refused.",
      "reference/rest-api.mdx: 'Allowed values' now lists only get, list, create, update, delete and bulk, and says the eight older values are retired and stripped at parse with a warning (object.zod.ts:25-41 @ 8a399b2b). Verified on 17.6.0: ['get','list','search','export'] parses to ['get','list'] with one warning.",
      "Ruling A: no siblings deleted. The views change is a code-shape correction that keeps the assertion that views can be declared. The allowed-values change does not change which operations can be reached, because the legacy values still parse.",
      "pr-body.md is updated: item 5, the rebase note (#167's seoTitle values become 'Configure: Users, Access and Settings' and '…License Mode…' at rebase time), the Acceptance notes and the verification table."
     ],
     "tests": "All at 7761b18. type-check --continue --force: TYPECHECK_EXIT=0. NEXT_PRIVATE_STANDALONE=true build --force: BUILD_EXIT=0. turbo test --force: TEST_EXIT=0, '✓ 10 self-test(s) passed'. check-locale-surface: EXIT=0. check-positioning: EXIT=0. check-search-locales: EXIT=0, 'within the first 3 pages'. gen-zh-hant --check: '60 generated file(s) match'. Ownership with the workflow argv, actor hotlong, bot login set: EXIT=0, '46 file(s) changed: 14 translation artifact(s) deleted, none added or modified'; control run with the bot as actor: EXIT=1. check-translations: '✓ translations gate passed'. check-translation-output --files: passed, with 99 pre-existing findings reported. The 5 new ones are views sibling fence counts, non-blocking, to be refreshed by the translation pass. node-floor: EXIT=0. half-states: 1551 cases pass. Control bytes in the 32 added or modified files: 0. Preview smoke not rerun: 7761b18 changes two MDX pages only; it was green at 8dc4d10.",
     "api_writes": "1 — this addendum comment (POST /repos/objectstack-ai/objectos/issues/301/comments, through the fleet-write relay).",
     "mcp_calls": "0",
     "out_of_scope_findings": [
      "carrier: none · noted, not filed — the other code fragments on build/interface/views.mdx (Kanban, Calendar, Gantt, …) omit the top-level columns every list view requires, and 'Common list options' sets fontWeight: 600 where the spec wants a string. Wrapped as list views with data, @objectstack/spec 17.6.0 refuses each one. Not touched."
     ]
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report-addendum

    {
     "issue": 301,
     "status": "staged",
     "addendum_to": "https://github.com/objectstack-ai/objectos/issues/301#issuecomment-6015543379",
     "push_head": "ff/issue-301 @ 911a174ccd83d51dd1fa18a7a4f25df510ac1e02 — fast-forwards from origin/claude/pm-dispatch-objectos-ju9td1 @ 7b4fd19",
     "ff_construction": "ff/issue-301 starts at 7b4fd19. git merge --no-edit origin/main (a24b39d) gives 50f7841, after which git diff origin/main HEAD is empty. Then 4 commits are cherry-picked: b421fbd, c5740f9, 21ef209, 911a174.",
     "rebased_branch": "staged/issue-301 @ 2e474fd, rebased onto origin/main a24b39d (#309, #167): caa118e, 189a241, 7fa352a, 2e474fd",
     "patch_equality": "git diff origin/main staged/issue-301 and git diff origin/main ff/issue-301 are byte-identical (cmp equal; sha256 043d7c07efb3a23edddaa7a2bbf43547fa7463e1246e12aa7f06cc8819f07e2b for both). Both tips have the same tree, 263e37092dd94be3032c638768ba5bb224fad0d7. git merge-base --is-ancestor origin/claude/pm-dispatch-objectos-ju9td1 ff/issue-301 exits 0, and so does the same check for origin/main.",
     "rebase_resolutions": [
      "content/docs/configure/index.mdx: kept both lines, title: Configure and seoTitle: \"Configure: Users, Access and Settings\" (#167 had \"Administration: Users, Access and Settings\").",
      "content/docs/deploy/air-gapped.mdx: kept both lines, seoTitle: \"Air-gapped Deployment: License Mode and Settings\" (#167 had \"Licence\") and the description with \"license\".",
      "Re-check: no other English seoTitle contains Licence or Administration, and no English page contains \"licence\". Locale seoTitles were not touched."
     ],
     "gates": "At 2e474fd; ff/issue-301 @ 911a174 has the identical tree. type-check --continue --force: TYPECHECK_EXIT=0. NEXT_PRIVATE_STANDALONE=true build --force: BUILD_EXIT=0. turbo test --force: TEST_EXIT=0, '✓ 10 self-test(s) passed'. check-locale-surface: EXIT=0. check-positioning: EXIT=0, '4 copies equal their constants; … no stale sentence in 79 English sources'. check-search-locales: EXIT=0, '… within the first 3 pages, and find nothing for a nonce'. gen-zh-hant --check: '60 generated file(s) match'. Ownership with the workflow argv (git diff --name-status --no-renames origin/main...HEAD), actor hotlong, bot login set: EXIT=0, '46 file(s) changed: 14 translation artifact(s) deleted, none added or modified'; the control run with the bot as actor: EXIT=1. check-translations: '✓ translations gate passed'. Stale counts, reported only: main a24b39d has zh-Hans 49 and the others 26; this branch has 47 and 24. check-translation-output --files: '✓ translation output gate passed (256 pre-existing finding(s) reported)'; main a24b39d alone reports 261, mostly from #167's locale seoTitles. check-translation-output --self-test, node-floor and half-states: EXIT=0. Control bytes in 32 changed files: 0.",
     "note": "Nothing pushed and no PR opened; the seat pushes ff/issue-301. The worktree is kept, checked out on ff/issue-301. pr-body.md is updated, with head ff/issue-301 @ 911a174 and a 'Branch and rebase' section.",
     "api_writes": "1 — this addendum (POST /repos/objectstack-ai/objectos/issues/301/comments, through the fleet-write relay)",
     "mcp_calls": "0"
    }

    Generated by Claude Code

  7. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report-addendum

    {
     "issue": 301,
     "status": "staged",
     "addendum_to": "https://github.com/objectstack-ai/objectos/issues/301#issuecomment-6018003149",
     "request": "Delete the reference/security locale siblings under ruling A, as a new commit on 911a174.",
     "premise_still_valid": false,
     "finding": "There are no reference/security locale siblings to delete. #293 (b754364, 'one positioning constant, one gate, ObjectOS as Cloud or Enterprise (PR 1 of #171)', 2026-10-06T07:51+08:00) already removed security.{es,fr,ja,ko,zh-Hans,zh-Hant}.mdx: 6 files, 1528 lines deleted. That was before this PR's base, 601bb37. There was never a security.de.mdx.",
     "evidence": [
      "git ls-tree origin/main (a24b39d) content/docs/reference/ lists only security.mdx; the same holds at 911a174 and at 601bb37.",
      "GitHub API: GET repos/objectstack-ai/objectos/contents/content/docs/reference?ref=main lists only security.mdx; with ref=claude/pm-dispatch-objectos-ju9td1 it also lists only security.mdx.",
      "git log --diff-filter=D -- 'content/docs/reference/security.*.mdx' returns b754364; git show --stat b754364 lists the 6 deletions. This is a positive reading, so the checkout being shallow does not weaken it.",
      "Locale readers: the built pages for /{ja,zh-Hans,zh-Hant,es,fr,ko,de}/docs/reference/security serve the English fallback, with h1 'Security & Compliance', each under its own locale's lang. Each has 0 occurrences of 'redact'. The build was of tree 263e3709, which 911a174 has too.",
      "Links: no content or app file links to a locale-prefixed /docs/reference/security path. Four English pages link /docs/reference/security, and those links resolve through the fallback."
     ],
     "action": "No commit. The tip stays 911a174ccd83d51dd1fa18a7a4f25df510ac1e02, which is origin/claude/pm-dispatch-objectos-ju9td1 itself, so the seat has nothing new to push for this point. pr-body.md item 5 now says ruling A applies to all three configure/ai fixes and that security has no siblings, deleted earlier by #293. The sibling deletion count stays at 14 files.",
     "gates": "Unchanged tree, so the previous round's verdicts on tree 263e3709 stand. Re-run at 911a174: ownership with the workflow argv (git diff --name-status --no-renames origin/main...HEAD), actor hotlong, bot login set: EXIT=0, '✓ 46 file(s) changed: 14 translation artifact(s) deleted, none added or modified.' Control run with the bot as actor: EXIT=1. None of the 14 deletions is a security file.",
     "api_writes": "1 — this addendum (POST /repos/objectstack-ai/objectos/issues/301/comments, through the fleet-write relay)",
     "mcp_calls": "0"
    }

    Generated by Claude Code

  8. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT: PR #310 on head 911a174ccd83d51dd1fa18a7a4f25df510ac1e02 · 2026-10-06T14:17Z. I am landing it now: no governed path is touched, and every check is green.

    Path surface (get_files): 46 files, +890/−3289.

    • App and scripts: apps/docs (global.css, source.config.ts, mdx-components.tsx, the search route, llms.txt, the layout logo), the smoke and search gates, and ci.yml's comment.
    • English pages: content/docs/**.
    • Deletions: 14 locale siblings, the 7 of build/ai-builder and the 7 of build/automation/flows.
    • Governed paths: none of AGENTS.md, CLAUDE.md, .claude/**, skills/** or docs/adr/**.

    Checks on 911a174: build, Ownership & freshness and Node floor succeeded; Deploy docs was skipped. mergeable_state is clean on base a24b39d.

    Push: fast-forward with no force. ff/issue-301 starts at the remote branch head 7b4fd19, merges origin/main (the tree is then equal to main), and cherry-picks the 4 rebased commits.

    • Its diff against main is byte-identical to the rebased staged/issue-301: the same sha256, and the same tree 263e370.
    • The push 7b4fd19..911a174 follows the maintainer's 「可以推」.

    Prose, read against the sources:

    • Glossary. The "AI seat" entry matches license.mdx:35,56: the only billed seat; viewers, non-AI app users and MCP developers are free. "Position" matches configure/permissions/positions.mdx:6-10. The editions entry is left for [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.
    • Residency table. It is kept once, in reference/security.mdx#data-residency. Its added rows ("Settings, API keys, secrets", uploaded files, the compiled objectstack.json as Optional, the runtime itself as No) are exactly the rows the index and architecture copies held. Those two pages now link to it, so no claim is lost.
    • Code samples. views.mdx (defineView) and the ObjectSchema.create samples parse with @objectstack/spec 17.6.0. The PR body also gives the refusal controls: the old view key, top-level apiMethods, and a list view without columns.
    • License-validation sentence. It reads identically in its 4 copies.

    Search. Pages found first by their own title (en) went from 30 to 76 of 79. Cold start (next start, en) went from 8.7–10.1 s to 0.6–0.8 s. own-title-buried is red on main's route (56 findings) and green here. The post-deploy smoke now searches every locale, with a nonce control.

    Deviations accepted:

    After merge: watch the deploy and its smoke, and post the landed note here. #305 is next on the branch, on top of this squash, followed by #307 and #308.


    Generated by Claude Code

  9. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed and live · 2026-10-06T14:35Z


    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

enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions