Repository navigation
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
Activity
- addedenhancementNew feature or requestNew feature or request
on Oct 6, 2026 objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsTwo search follow-ups from #296's staged work · 2026-10-06T07:17Z
#296 fixes the CJK search 500 with an
Intl.Segmentertokenizer and adds a post-build gate. It measured two side effects that belong in this card's search item:- 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.
- Production smoke.
- The post-deploy
smoke-docs.mjsnever 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.
- The post-deploy
Generated by Claude Code
- Cold-start cost.
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsTwo more consistency items, from #297's work · 2026-10-06T09:37Z
-
Pages that point at content
configure/ainever had.build/automation/flows.mdx:307: theai_callaction.reference/security.mdx:278: redact config.build/ai-builder.mdx:183: Doubao as a chat provider. It is not in the publicOS_AI_PROVIDERlist.
Each claim should be sourced from a public page or removed.
-
resources/support.mdx:15says "Watch … → Releases".GET repos/objectstack-ai/objectos/releasesreturns 0 releases. Point readers at a channel that publishes something, or drop the line.
Generated by Claude Code
-
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsClaim: PM loop,
repo:objectosseat
Session:session_01FeA1nwBz1ohH65dvffUGKr
Account:hotlong(the seat's linked user, asGET /useranswers 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 fromorigin/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.cssor equivalent) and the code theme; - the License Editions table on phones (CSS);
- FAQ question/answer formatting in
resources/faq.mdxandresources/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.tsoptions,.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 (
seoTitlefrontmatter) 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 #1676010721523, as amended on #298.
Generated by Claude Code
- the theme colour overrides (
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsos-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
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsos-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
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsos-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
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsos-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
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsACCEPT: 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, andci.yml's comment. - English pages:
content/docs/**. - Deletions: 14 locale siblings, the 7 of
build/ai-builderand the 7 ofbuild/automation/flows. - Governed paths: none of
AGENTS.md,CLAUDE.md,.claude/**,skills/**ordocs/adr/**.
Checks on
911a174:build,Ownership & freshnessandNode floorsucceeded;Deploy docswas skipped.mergeable_stateis clean on basea24b39d.Push: fast-forward with no force.
ff/issue-301starts at the remote branch head7b4fd19, mergesorigin/main(the tree is then equal tomain), and cherry-picks the 4 rebased commits.- Its diff against
mainis byte-identical to the rebasedstaged/issue-301: the same sha256, and the same tree263e370. - The push
7b4fd19..911a174follows 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" matchesconfigure/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 compiledobjectstack.jsonas Optional, the runtime itself as No) are exactly the rows theindexandarchitecturecopies held. Those two pages now link to it, so no claim is lost. - Code samples.
views.mdx(defineView) and theObjectSchema.createsamples parse with@objectstack/spec17.6.0. The PR body also gives the refusal controls: the oldviewkey, top-levelapiMethods, and a list view withoutcolumns. - 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-buriedis red onmain's route (56 findings) and green here. The post-deploy smoke now searches every locale, with a nonce control.Deviations accepted:
- Locale siblings. The 14 sibling deletions follow ruling A of [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:
flowsdrops theai_callassertion, andai-builderreverses its Doubao provider claim.security.mdxalso drops itsredactclaim, but it has no siblings left: docs: one positioning constant, one gate, ObjectOS as Cloud or Enterprise (PR 1 of #171) #293 deleted them, and its locale URLs serve the English fallback, with noredactmention (re-checked in the addendum of 2026-10-06, comment 6018238984).check-translation-ownershipreports "14 translation artifact(s) deleted, none added or modified" for actorhotlong. It is red when the bot is the actor. - Light-mode code comments. They were fixed in place: the same defect class, with the same mechanism, on the same line.
- Rebase onto Author SEO titles for the 42 English pages whose title tag is a single word #167.
configure/indexseoTitle is "Configure: Users, Access and Settings", anddeploy/air-gappedseoTitle reads "License Mode".
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
- App and scripts:
objectstack-fleet commented
on Oct 6, 2026 ContributorAuthorMore actionsLanded and live · 2026-10-06T14:35Z
- PR docs: contrast, phone table affordance, FAQ headings, title-weighted per-locale search, consistency pass (#301) #310: squash
5d2f837, merged by the seat.Fixes #301closed this card. - CI on
main(run 37478051451): attempt 1 failed intype-check. The error waslib/source.ts(1,22): error TS2306: File '…/.source/server.ts' is not a module, on a tree identical to the PR head's, which had passed (263e370). The race is root-caused and filed as CI type-check can fail with TS2306 ".source/server.ts is not a module": next typegen exits while fumadocs-mdx's un-awaited regeneration is still writing .source #311, which goes ahead of Docs chrome still speaks English inside localized pages: fumadocs' hard-coded aria-labels, English page-tree names without lang="en", no zh-Hant 404 copy #305 on the branch.- The seat re-ran the failed jobs once. In attempt 2,
build,Node floor,Deploy docs / Publish the tested WorkerandDeploy docs / Smoke-check the live sitesucceeded; roll back was skipped. - Deploy verdict:
✓ deploy: 12315e65-a391-4fd3-9d8f-a7e1b1e09a1c is serving, replacing 6775fbb6-8595-4993-b4e0-b386eac8bfdb.
- The seat re-ran the failed jobs once. In attempt 2,
- Live result: the smoke job now checks search on the live site.
- It runs
GET /api/search?…&query=permissionsfor every locale; each must return a non-empty 200 JSON array. - A nonce control must return nothing.
- Both checks passed, on the new version.
- It runs
- Housekeeping: the seat removes
pm:dispatchedfrom this card. - Next on the branch: CI type-check can fail with TS2306 ".source/server.ts is not a module": next typegen exits while fumadocs-mdx's un-awaited regeneration is still writing .source #311 (the type-check race), then Docs chrome still speaks English inside localized pages: fumadocs' hard-coded aria-labels, English page-tree names without lang="en", no zh-Hant 404 copy #305, Docs code samples the current @objectstack/spec refuses: the remaining view fragments in build/interface/views.mdx and the send_email flow action in build/automation/flows.mdx #307 and Docs accessibility baseline: no main landmark, the language switcher's name contradicts its text, an unnamed svg role=img, unnamed code regions — on every page in every locale #308.
Generated by Claude Code
- PR docs: contrast, phone table affordance, FAQ headings, title-weighted per-locale search, consistency pass (#301) #310: squash
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
License Editions table on phones
FAQ formatting
Search ranking
/configure/permissionsin the top six.Consistency
defineObjectandObjectSchema.createappear. Use whichever objectstackorigin/maindocuments as current.llms.txtuses/zh-Hans/docs/quickstartas its example, which is now an English fallback.Done looks like
Order
Last in this batch.
Generated by Claude Code