Skip to content

Five locale License pages and seven locale Support pages still say ObjectOS is Apache-2.0; search returns 500 in zh-Hans/zh-Hant/ja/ko; Quickstart's first link is broken #296

Description

@objectstack-fleet

Found by the seat's site-wide audit of docs.objectos.ai on 2026-10-06. The audit built and served main @ b754364, crawled 648 URLs and 6,218 internal links, and took Playwright screenshots. Its evidence is kept in the seat's scratch area under audit/E/. Priority: P0. Two of these defects publish a false licence claim, and one breaks search in four locales.

1. Locale pages that still say ObjectOS is open source

The English resources/license.mdx and resources/support.mdx are correct: ObjectOS is a commercial product with no open-source edition, and only the ObjectStack framework is Apache-2.0. These locale siblings still assert the opposite:

File What it says on main
content/docs/resources/license.{de,es,fr,ja,ko}.mdx First heading ObjectOS-Runtime — Apache-2.0 (or the locale's equivalent) at :10-13. It also says "Free. Forever… no license server", the FAQ answers "Does ObjectOS phone home? No… no licence check", and it names "ObjectStack Cloud" with no pricing.
content/docs/resources/support.{de,es,fr,ja,ko,zh-Hans,zh-Hant}.mdx "ObjectOS is Apache-2.0 and accepts contributions" (zh-Hans :66 ObjectOS 是 Apache-2.0,接受贡献). The English :66 says only the ObjectStack framework is.

These URLs are in the sitemap and in hreflang. A German browser that follows README's "License & Pricing" link gets a 307 to /de/docs/resources/license, which says Apache-2.0.

license.zh-Hans.mdx and license.zh-Hant.mdx are correct and stay.

Rule: the maintainer's ruling 5989567068 on #256, letter A. An English correction that removes or reverses a capability assertion deletes that page's locale siblings, as #290 and #293 already did. zh-Hant is generated from zh-Hans, so deleting support.zh-Hans.mdx deletes support.zh-Hant.mdx with it (gen-zh-hant.mjs --check must stay green).

2. Search is dead in four locales

  • GET /api/search?locale=zh-Hans|zh-Hant|ja|ko returns HTTP 500 LANGUAGE_NOT_SUPPORTED. The dialog shows an empty list with no error.
  • Cause: apps/docs/app/api/search/route.ts:4-6 calls createFromSource(source, { language: 'english' }) with no localeMap.
  • Fix: a localeMap that gives those four locales a tokenizer the search library supports, or an explicit English fallback, so that no locale answers 500.

3. Quickstart's first link points at an anchor that does not exist

  • content/docs/quickstart.mdx:20 links #path-a--os-start-operator-first-time-evaluator.
  • The heading's real id is …operator--first-time-evaluator.

Done looks like

  • Deletions: exactly the 12 locale files above (5 License, 7 Support). No other content file changes. The deleted files' claims are quoted in the PR body.
  • Search: /api/search?locale=<l>&query=permissions answers 200 with results for all 8 locales. A test or self-test pins this, so a future locale cannot reintroduce the 500.
  • Quickstart: the anchor resolves, checked by a crawl of the built site.
  • Gates: the repo's gates are green, including locale surface, translation ownership, gen-zh-hant --check and positioning.
  • Browser check: the search dialog in zh-Hans and ja returns results, screenshotted.

Surface

  • the 12 deleted .mdx files;
  • apps/docs/app/api/search/route.ts and a test;
  • content/docs/quickstart.mdx, one anchor;
  • registry or sidebar entries only if a deleted page is listed per locale somewhere.

Order

Next on the single push branch after #294 lands.


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    priority:p0Queue-jump: outranks batch and breaks the round — never exempts claiming or same-file serial
    on Oct 6, 2026
  2. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop, repo:objectos seat, R3
    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. It currently carries draft PR #294, which is held for the maintainer. This card's work is therefore staged: it is built and verified in its own worktree on a local branch, and pushed to the designated branch only after #294 lands, with the branch restarted from origin/main.
    Worktree: objectos-issue-296
    Domain: n/a (single-lane repo)
    Seat: repo:objectos (objectstack-ai/objectstack#9831)
    File surface:


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 296,
    "status": "staged",
    "branch": "staged/issue-296",
    "worktree": "/home/user/objectos-issue-296",
    "final_commit": "d44440ab116c497941dfa3664a6f6dd86d48d724",
    "base": "b7543645a109a7ab43792301beea49627a4a9687 (origin/main when the worktree was cut)",
    "commits": [
    "1d02e11 docs: delete the locale License and Support pages that call ObjectOS Apache-2.0, fix the Quickstart anchor",
    "67b78c4 fix(docs): answer search in zh-Hans, zh-Hant, ja and ko",
    "d44440a ci: ask the built search route in every locale after the build"
    ],
    "pr": null,
    "session": "session_01FeA1nwBz1ohH65dvffUGKr",
    "premise_still_valid": true,
    "summary": "All three defects were re-measured on origin/main b754364 and are fixed, committed locally on staged/issue-296, not pushed. (1) The 12 locale License and Support siblings that said ObjectOS itself is Apache-2.0 are deleted, and their routes now serve the current English body. gen-zh-hant --check passes with 64 files. (2) /api/search answered 500 LANGUAGE_NOT_SUPPORTED for zh-Hans, zh-Hant, ja and ko. route.ts now passes an explicit localeMap that a satisfies clause pins to every i18n locale. The four CJK locales get a zero-dependency Intl.Segmenter tokenizer, and all 8 locales answer 200 with hits under next start and under a local workerd preview. A new post-build gate, check-search-locales.mjs, calls the built handler for every locale. It goes red on the unfixed build, and it goes red on an English-tokenizer ablation. (3) The Quickstart Path A anchor matches the generated heading id. A crawl of 224 internal hrefs across 8 locales found 0 broken.",
    "files": {
    "added": [
    ".github/scripts/check-search-locales.mjs"
    ],
    "modified": [
    ".github/workflows/ci.yml (one step: Search answers every locale)",
    "apps/docs/app/api/search/route.ts",
    "content/docs/quickstart.mdx (one anchor)",
    "tools/ci-scripts/run-self-tests.mjs (SELF_TESTED entry + header paragraph)"
    ],
    "deleted": [
    "content/docs/resources/license.de.mdx",
    "content/docs/resources/license.es.mdx",
    "content/docs/resources/license.fr.mdx",
    "content/docs/resources/license.ja.mdx",
    "content/docs/resources/license.ko.mdx",
    "content/docs/resources/support.de.mdx",
    "content/docs/resources/support.es.mdx",
    "content/docs/resources/support.fr.mdx",
    "content/docs/resources/support.ja.mdx",
    "content/docs/resources/support.ko.mdx",
    "content/docs/resources/support.zh-Hans.mdx",
    "content/docs/resources/support.zh-Hant.mdx"
    ],
    "kept": [
    "content/docs/resources/license.zh-Hans.mdx and license.zh-Hant.mdx (correct: ObjectOS 是商业产品)"
    ],
    "registry_or_sidebar": "none needed. meta.LOCALE.json lists pages by slug and a slug with no locale file falls back to English. The sidebar still lists License & Pricing and Support in every locale (screenshot fallback-de-license.png). check-locale-surface.mjs is green, so no deleted URL is advertised."
    },
    "deleted_claims_measured_on_b754364": {
    "resources/license.de.mdx": ":10 '## ObjectOS-Runtime — Apache-2.0' · :60 'Kostenlos. Für immer. Keine Plätze, keine Nutzungsstufe, kein Lizenzserver, kein Schlüssel.' · :95 'A: Nein. Es gibt keine Telemetrie, keine Lizenzprüfung, keinen Update-Ping.'",
    "resources/license.es.mdx": ":10 '## Runtime de ObjectOS — Apache-2.0' · :60 'Gratis. Para siempre. Sin asientos, sin niveles de uso, sin servidor de licencias, sin clave.' · :95 'R: No. No hay telemetría, ni comprobación de licencia, ni ping de actualización.'",
    "resources/license.fr.mdx": ":10 '## Runtime ObjectOS — Apache-2.0' · :60-61 'Gratuit. Pour toujours. Pas de sièges, pas de palier d'utilisation, pas de serveur de licences, pas de clé.' · :96 'R : Non. Il n'y a aucune télémétrie, aucune vérification de licence, aucun ping de mise à jour.'",
    "resources/license.ja.mdx": ":10 '## ObjectOS ランタイム — Apache-2.0' · :59 '無料。 永久に。シート課金なし、使用量ティアなし、ライセンスサーバーなし、キーなし。' · :94 'A: いいえ。テレメトリも、ライセンスチェックも、アップデートの ping もありません。'",
    "resources/license.ko.mdx": ":10 '## ObjectOS 런타임 — Apache-2.0' · :60 '무료입니다. 영원히. 좌석도, 사용량 등급도, 라이선스 서버도, 키도 없습니다.' · :96 'A: 아니요. 텔레메트리, 라이선스 검사, 업데이트 핑이 없습니다.'",
    "resources/support.de.mdx": ":67 'ObjectOS steht unter Apache-2.0 und nimmt Beiträge an:'",
    "resources/support.es.mdx": ":67 'ObjectOS usa la licencia Apache-2.0 y acepta contribuciones:'",
    "resources/support.fr.mdx": ":67 'ObjectOS est sous licence Apache-2.0 et accepte les contributions :'",
    "resources/support.ja.mdx": ":67 'ObjectOS は Apache-2.0 ライセンスであり、コントリビューションを受け付けています:'",
    "resources/support.ko.mdx": ":67 'ObjectOS는 Apache-2.0이며 기여를 받습니다:'",
    "resources/support.zh-Hans.mdx": ":66 'ObjectOS 是 Apache-2.0,接受贡献:'",
    "resources/support.zh-Hant.mdx": ":67 'ObjectOS 是 Apache-2.0,接受貢獻:' (generated from zh-Hans; goes with it)",
    "english_sources_for_contrast": "license.mdx: 'There is no open-source edition of ObjectOS.' · support.mdx:66 'The underlying ObjectStack framework is Apache-2.0 and accepts contributions:'"
    },
    "gates": {
    "measured_on": "d44440a, git status clean. Build: NEXT_PRIVATE_STANDALONE=true pnpm turbo run build --force (CI-shaped). All heavy runs went through objectstack/scripts/pm/os-verify-lock.sh with OS_VERIFY_LOCK_SLOT=issue-296-objectos.",
    "local": [
    {
    "gate": "pnpm turbo run type-check --continue --force",
    "exit": 0,
    "verdict": "VERDICT command-exit 0; Tasks: 1 successful, 1 total"
    },
    {
    "gate": "NEXT_PRIVATE_STANDALONE=true pnpm turbo run build --force",
    "exit": 0,
    "verdict": "VERDICT command-exit 0 (held 79s); Tasks: 1 successful, 1 total; .next/standalone present"
    },
    {
    "gate": "pnpm turbo run test --force",
    "exit": 0,
    "verdict": "✓ search locales self-test: 8 cases, all 6 rules can fire; ✓ 10 self-test(s) passed (9 before this change)"
    },
    {
    "gate": "node apps/docs/scripts/gen-zh-hant.mjs --check",
    "exit": 0,
    "verdict": "✓ zh-Hant: 64 generated file(s) match the zh-Hans sources byte for byte."
    },
    {
    "gate": "node .github/scripts/check-locale-surface.mjs",
    "exit": 0,
    "verdict": "✓ every advertised URL has a source file and every source file is advertised; both llms bodies carry every en-only page title and none from the other locales; no page slug in the content tree contains a dot; ..."
    },
    {
    "gate": "node .github/scripts/check-positioning.mjs",
    "exit": 0,
    "verdict": "✓ positioning: 3 copies equal the constant; the brand is right in 659 pages and 2 llms bodies; no stale sentence in 79 English sources"
    },
    {
    "gate": "node .github/scripts/check-search-locales.mjs (new)",
    "exit": 0,
    "verdict": "✓ search locales: all 8 locales answer 200, find "permissions", find every own page by its title, and find nothing for a nonce (own pages en 79/79, zh-Hans 53/53, zh-Hant 53/53, ja/de/es/fr/ko 29/29)"
    },
    {
    "gate": "node .github/scripts/check-translations.mjs",
    "exit": 0,
    "verdict": "✓ translations gate passed"
    },
    {
    "gate": "node .github/scripts/check-translation-output.mjs --self-test",
    "exit": 0,
    "verdict": "✓ self-test: 29 rule case(s), 9 split case(s) and 5 derived-locale case(s) ..."
    },
    {
    "gate": "node .github/scripts/check-translation-output.mjs --files (git diff --name-only BASE...HEAD)",
    "exit": 0,
    "verdict": "✓ translation output gate passed (100 pre-existing finding(s) reported)"
    },
    {
    "gate": "check-translation-ownership.mjs --actor objectstack-fleet[bot] --files (git diff --name-status --no-renames BASE...HEAD), TRANSLATION_BOT_LOGIN set to a different login (enforced)",
    "exit": 0,
    "verdict": "✓ 17 file(s) changed: 12 translation artifact(s) deleted, none added or modified."
    },
    {
    "gate": "same, TRANSLATION_BOT_LOGIN unset",
    "exit": 0,
    "verdict": "⚠ TRANSLATION_BOT_LOGIN is not set — ownership is not enforced yet."
    },
    {
    "gate": "node .github/scripts/check-node-floor.mjs (+ --self-test)",
    "exit": 0,
    "verdict": "✅ Every declared floor clears what the dependency tree requires, and the declarations agree."
    },
    {
    "gate": "node scripts/pm/check-half-states.mjs --self-test",
    "exit": 0,
    "verdict": "✓ check-half-states self-test: 1551 cases pass."
    },
    {
    "gate": "opennextjs-cloudflare build --skipNextBuild, then preview on 127.0.0.1:8796, then smoke-docs.mjs --base",
    "exit": 0,
    "verdict": "✓ smoke: 4 page(s) rendered against http://127.0.0.1:8796, negative control demonstrated red"
    },
    {
    "gate": "wrangler deploy --dry-run",
    "exit": 0,
    "verdict": "Total Upload: 51033.71 KiB / gzip: 7806.38 KiB (budget 61440 KiB)"
    }
    ],
    "ci": "NOT MEASURED: nothing is pushed (staged mode)."
    },
    "tests": "BEFORE (b754364, next start): curl /api/search?locale=L&query=permissions gave en 200, zh-Hans 500, zh-Hant 500, ja 500, de 200, es 200, fr 200, ko 500, with the server log showing code LANGUAGE_NOT_SUPPORTED. AFTER (d44440a): next start gave all 8 locales 200 (en 141, zh-Hans 55, zh-Hant 55, ja 83, de 86, es 86, fr 144, ko 83 hits). The local workerd preview gave all 8 locales 200 (zh-Hans/zh-Hant 56, ja/ko 84). Native-script queries: zh-Hans 权限 147, zh-Hant 許可權 149, ja 権限 74, ko 권한 88. The new gate's live red: run against the unfixed b754364 build it exits 1 with 4 findings '(threw) zh-Hans|zh-Hant|ja|ko ?query=permissions: the handler threw LANGUAGE_NOT_SUPPORTED, which Next serves as a 500'. ABLATION (committed state 36560e6/329b437, through objectstack scripts/ablation-replace.mjs in WRAP mode): mutation leg set the four CJK localeMap entries to 'english'. Result: anchor x1 to x0, replacement x0 to x1, blob 789cb3f5 to acac90d6. Rebuilt; the built chunk carries '"zh-Hans":"english"' and 0 chunks contain Intl.Segmenter. The gate exits 1 with 115 own-title-missed (zh-Hans 40, zh-Hant 40, ja 19, ko 16) and no threw, the predicted direction: the English fallback answers 200 but finds nothing for CJK titles. Restore leg: blob after restore 789cb3f5 equals the HEAD blob, git diff HEAD is empty, rebuilt; 0 chunks with the ablation marker, Intl.Segmenter present, gate green. TYPE PIN ablation: deleted the ko entry, and type-check exited 2 with 'error TS1360 ... Property ko is missing'. Restored, blob equals HEAD, git diff HEAD is empty. Final route commit 67b78c4 differs from the ablated 36560e6 only in two comments. QUICKSTART crawl: 224 internal hrefs (96 with fragments) across 8 locales, 0 broken, and the Path A link resolves in every locale. Negative control: the b754364 English page is flagged with 'no element with id path-a--os-start-operator-first-time-evaluator'. BROWSER (Playwright Chromium, /opt/pw-browsers/chromium): the search dialog in zh-Hans (权限), ja (権限), zh-Hant (許可權) and ko (권한) shows /api/search 200 and lists highlighted results. I looked at each screenshot. /de/docs/resources/license renders h1 'License & Pricing' with first h2 'ObjectOS is a commercial product'. /zh-Hans/docs/resources/support renders h1 'Support'. Neither contains a deleted Apache sentence.",
    "screenshots": [
    "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-296/search-zh-Hans.png",
    "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-296/search-ja.png",
    "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-296/search-zh-Hant.png",
    "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-296/search-ko.png",
    "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-296/workerd-search-zh-Hans.png",
    "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-296/workerd-search-ja.png",
    "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-296/fallback-de-license.png",
    "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-296/fallback-zh-Hans-support.png"
    ],
    "risk": "The first search after a cold start is slower. fumadocs builds every locale's index on the first search in any locale, and the four CJK indexes used to throw immediately. Node, 3 cold runs each on a shared box: wall 2.7-3.0s before vs 7.2-7.4s after, CPU 3.5-3.8s vs 8.2-8.5s. The workerd preview's first search took 6.2s; warm searches take 30-60ms. Intl.Segmenter itself costs about 100ms per CJK locale over the raw corpus, and the rest is the size of four more full indexes. wrangler.jsonc sets no cpu_ms, so the paid default of 30s applies. CPU on the deployed Worker is NOT MEASURED. Rollback: revert 67b78c4; the new gate then goes red, as intended.",
    "pr_draft": {
    "title": "docs: remove locale pages that call ObjectOS Apache-2.0, fix search in CJK locales, fix the Quickstart anchor",
    "body_path": "/tmp/claude-0/-home-user/2224823d-3484-535e-94a5-c071ba6af395/scratchpad/issue-296/pr-body.md",
    "first_line": "Fixes #296",
    "clause_2_line": "none (claim says Clause-②: no)"
    },
    "deviations": [
    "Staged mode, per the dispatch. Nothing was pushed: no empty-branch push probe, no draft PR, no labels, no PR assignee. The branch is staged/issue-296, not claude/issue-296-SLUG. The contract's push-first rule conflicts with the session's single designated push branch (held by #294). I followed the dispatch and am flagging the conflict here.",
    "Commit trailers are model-free (Co-Authored-By: Claude, noreply@anthropic.com, plus Claude-Session) as the agent contract requires, instead of the dispatch's 'Claude Opus 5.5' line. The dispatch allowed this.",
    "The pr-body.md footer uses the contract's session-URL form instead of the harness's robot-emoji line.",
    "File surface: the claim named route.ts and one test. Wiring the test the way the repo wires its tests also touched .github/workflows/ci.yml (one step) and tools/ci-scripts/run-self-tests.mjs (a SELF_TESTED entry, which the runner requires for any --self-test script, plus a header paragraph). No other file is touched. I did not stop on this, because the dispatch asked for the repo-style wiring.",
    "I created a temporary control worktree at /home/user/objectos-issue-296-base (detached at b754364) to measure before and after, and removed it at the end with git worktree remove, no --force.",
    "next start answers every unprefixed English route with a 307 back to itself. This also happens on b754364. The English Quickstart page and its English targets were therefore crawled from the prerendered build (.next/server/app/en/...). The other 7 locales were crawled over HTTP.",
    "Beyond the brief, I also verified in real workerd: opennext packaging, preview, curl in 8 locales, smoke-docs and the wrangler dry-run size. Afterwards I deleted .open-next, which is gitignored.",
    "The zh-Hant native-script probe uses 許可權, because OpenCC s2twp renders 权限 that way (228 occurrences vs 2 of 權限).",
    "The live site docs.objectos.ai is unreachable from this container (egress CONNECT 403), so production behaviour is NOT MEASURED.",
    "The worktree is kept, as instructed. node_modules and the .next build stay in it (disk: 25G free). No server or preview is left running."
    ],
    "mcp_calls": "0",
    "api_writes": "1 — POST /repos//issues/296/comments (this os-dev-report), sent through objectstack scripts/pm/post-stamped.mjs and the fleet-write relay",
    "open_questions": [],
    "out_of_scope_findings": [
    "class: b · reach: public door GET /terms in all 8 locales (prerendered /[lang]/terms). The built en/terms.html serves 'ObjectOS is distributed under the Apache License 2.0. You may use, modify, and redistribute the software in accordance with that license.' and zh-Hans/terms.html serves 'ObjectOS 以 Apache License 2.0 发布。'. Contract text: content/docs/resources/license.mdx 'There is no open-source edition of ObjectOS.' Seam: spec:content/docs/resources/license.mdx 'no open-source edition of ObjectOS' → renderer:apps/docs/app/[lang]/terms/page.tsx (content.en.body[0..1] :12 :16, content['zh-Hans'].body[0..1] :39 :43). check-positioning.mjs scans only content/docs English sources and the glossary, so it cannot see this file. Dedupe words: 'terms of service Apache', 'distributed under the Apache License 2.0', 'terms/page.tsx licence', 'ObjectOS 以 Apache License 2.0 发布'",
    "carrier: 承接者:无 · next start answers every unprefixed English route (/docs/...) with a 307 back to itself, cookie or not. This also happens on b754364. The workerd preview serves those routes (smoke green) · noted, not filed",
    "carrier: the governed AGENTS.md PR from ruling 5989567068 item 2 on #256, if open; otherwise 承接者:无 · AGENTS.md 'Coverage tracks Simplified exactly (62 of 79 pages today)' was already 54 zh-Hans pages on b754364 and is 53 after this change · noted, not filed",
    "carrier: 承接者:无 · the post-deploy smoke-docs.mjs never requests /api/search, so a search regression on production would not trip it. The new build-time gate covers the route under Node, not the deployed Worker · noted, not filed"
    ]
    }

  4. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 296,
    "status": "done",
    "addendum_to": "#296 (comment) (the staged report; everything there stands except where this addendum says otherwise)",
    "branch": "claude/pm-dispatch-objectos-ju9td1",
    "pr": "#302",
    "pushed_head": "dd17bd29f0c510f0d58b89a07d04536342c28e6d",
    "session": "session_01FeA1nwBz1ohH65dvffUGKr",
    "premise_still_valid": true,
    "summary": "staged/issue-296 was rebased onto origin/main 6b0e9a5 (#294) with no conflicts. Commits d29f7b8, e751961 and dd17bd2 replace 1d02e11, 67b78c4 and d44440a and have identical diffs. I pushed with git push origin staged/issue-296:refs/heads/claude/pm-dispatch-objectos-ju9td1 --force-with-lease=claude/pm-dispatch-objectos-ju9td1:d5cbe48b4c25c7642d687f5602d608312ec40c0d, which reported '+ d5cbe48...dd17bd2 (forced update)', and ls-remote confirms dd17bd2. Draft PR #302 was opened through the fleet relay pr_create op (run 37439212204, success). It is draft: true, its body read back identical, and its first line is 'Fixes #296'. hotlong was assigned with label-write (run 37439303271), and the read-back matches: assignee hotlong, 0 labels, 0 requested reviewers. Not flipped to ready, not merged. The local worktree and the staged/issue-296 branch were removed after the push. No server is running.",
    "post_rebase_gates": {
    "measured_on": "dd17bd2, git status clean, turbo Cached: 0 cached, 1 total for each task",
    "local": [
    {
    "gate": "pnpm turbo run type-check --continue --force",
    "exit": 0,
    "verdict": "Tasks: 1 successful, 1 total"
    },
    {
    "gate": "NEXT_PRIVATE_STANDALONE=true pnpm turbo run build --force",
    "exit": 0,
    "verdict": "Tasks: 1 successful, 1 total; .next/standalone present"
    },
    {
    "gate": "pnpm turbo run test --force",
    "exit": 0,
    "verdict": "✓ 10 self-test(s) passed"
    },
    {
    "gate": "check-positioning.mjs",
    "exit": 0,
    "verdict": "✓ 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"
    },
    {
    "gate": "check-search-locales.mjs",
    "exit": 0,
    "verdict": "✓ search locales: all 8 locales answer 200, find "permissions", find every own page by its title, and find nothing for a nonce (en 79/79, zh-Hans 53/53, zh-Hant 53/53, ja/de/es/fr/ko 29/29)"
    },
    {
    "gate": "check-locale-surface.mjs",
    "exit": 0,
    "verdict": "✓ every advertised URL has a source file and every source file is advertised; ..."
    },
    {
    "gate": "gen-zh-hant.mjs --check",
    "exit": 0,
    "verdict": "✓ zh-Hant: 64 generated file(s) match the zh-Hans sources byte for byte."
    },
    {
    "gate": "check-translations.mjs",
    "exit": 0,
    "verdict": "✓ translations gate passed"
    },
    {
    "gate": "check-translation-ownership.mjs enforced, diff against origin/main",
    "exit": 0,
    "verdict": "✓ 17 file(s) changed: 12 translation artifact(s) deleted, none added or modified."
    }
    ],
    "ci": "in_progress: CI on #302 had not been read when this was written. The PM reads it."
    },
    "mcp_calls": "0",
    "api_writes": "4 in total for this card. (1) POST issues/296/comments, the staged report. (2) relay pr_create, POST /repos/objectstack-ai/objectos/pulls (draft forced). (3) relay assign via label-write, issues/302 assignees. (4) POST issues/296/comments, this addendum. The git push is not a REST write.",
    "out_of_scope_findings_update": [
    "WITHDRAWN: the class b /terms finding. #294 (6b0e9a5) corrected apps/docs/app/[lang]/terms/page.tsx to 'ObjectOS is a commercial product with no open-source edition.' and its zh-Hans copy to 'ObjectOS 是商业产品,没有开源版本。'. Nothing is left to file.",
    "unchanged: the three carrier/noted-not-filed observations in the staged report"
    ],
    "deviations_update": [
    "The PR body is scratchpad/issue-296/pr-body-final.md. It is pr-body.md updated with the rebased head, the post-rebase verdicts and the withdrawn /terms note, and without the 'Title:' line. pr-body.md is kept as written.",
    "/home/user/objectos's own checkout was not touched. Its local claude/pm-dispatch-objectos-ju9td1 is still at 2e6f0e6, behind the remote dd17bd2."
    ]
    }

  5. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT: PR #302 on head dd17bd29f0c510f0d58b89a07d04536342c28e6d · 2026-10-06T08:59Z. Landing it now: no governed path is touched, the PR changes 1,372 lines (under 5,000), and every check is green.

    Path surface (get_files), 17 files, +298/−1074:

    • 12 deletions:
      • resources/license.{de,es,fr,ja,ko}.mdx
      • resources/support.{de,es,fr,ja,ko,zh-Hans,zh-Hant}.mdx
    • apps/docs/app/api/search/route.ts
    • content/docs/quickstart.mdx, one anchor
    • .github/scripts/check-search-locales.mjs (new)
    • .github/workflows/ci.yml, one step
    • tools/ci-scripts/run-self-tests.mjs, one entry

    The last two are outside the claimed surface. The dev reported them, and they are what the repo requires to wire a self-tested gate, so I accept them.

    Checks on dd17bd2: build, Ownership & freshness and Node floor succeeded. Deploy docs was skipped, as it should be on a PR. mergeable_state is clean on base 6b0e9a5.

    Read by the seat:

    • Deletions. Each file's claim is quoted in the staged report 6011347921. I re-read license.de.mdx:10 and support.zh-Hans.mdx:66 on b754364 myself. The English sources are correct. license.zh-Hans and license.zh-Hant are kept, because they are correct. This is 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.
    • route.ts.
      • localeMap is typed satisfies Record<Locale, unknown>, so a missing locale is a type error.
      • en, de, es and fr use Orama's own languages. zh-Hans, zh-Hant, ja and ko use an Intl.Segmenter word tokenizer, which needs no dependency and is created on first use.
      • threshold: 0 and tolerance: 0 are spelled out, with the reason in a comment.
    • Gate. The new gate asks the built handler in every locale, and the dev showed it red on the unfixed build and on an English-tokenizer ablation. In the post-rebase run all 8 locales answered 200.
    • Quickstart. The anchor now matches the generated id. A crawl of 224 internal hrefs found 0 broken.

    Risk accepted: the first search after a cold start takes about 7 s instead of 3 s, because four more indexes are now built rather than thrown. Warm searches take 30–60 ms. The follow-ups (a prebuilt index, and search in the post-deploy smoke) are recorded on #301 (6011377628).


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

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


    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 workingpriority:p0Queue-jump: outranks batch and breaks the round — never exempts claiming or same-file serial

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions