You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Rebrand the app to ObjectOS: app name, URL scheme objectos, bundle id / package ai.objectos.mobile #151
The app has not shipped to a store yet, so the identifiers can change now without a migration.
Ask
App identity:app.config.ts and app.json
name ObjectOS;
URL scheme objectos (the default of EXPO_PUBLIC_APP_SCHEME);
iOS bundleIdentifier and Android package = ai.objectos.mobile.
EAS slug: changing slug (objectstack-mobile) creates a new EAS project. Decide in the PR whether to keep the slug or move to objectos-mobile, and record the reason.
Code and comments that name the scheme:lib/shell/incoming-link.ts docblock and examples become objectos://open?route=… and objectos://console/…. Its regex is scheme-agnostic; keep it that way. Test fixtures should use the new scheme.
User-visible copy, en / zh / ar: say ObjectOS. The welcome title and the sign-in footnote are in the design canvas.
Docs: README, docs/*.md.
Rename the product to ObjectOS.
Keep platform API paths such as /.well-known/objectstack and package names such as @objectstack/* as they are; they are technical identifiers.
Unchanged: the ObjectStackNative bridge global and the objectstack-native:navigate event, which belong to the bridge contract with the Console. Renaming them is a separate decision.
Acceptance
npm run lint and npx jest --ci pass.
npx expo export --platform ios bundles.
A link objectos://console/apps opens that route on a development build (manual check, listed in the PR's 维护者速读).
Claim: PM loop round 1
Session: session_01QSeKYnW1Xf6HDSWz1eGAqv
Account: os-justin
Branch: claude/issue-151-objectos-rebrand
Worktree: mobile-issue-151
Domain: n/a — single-lane repo (repo:mobile)
Seat: repo:mobile#1
File surface: app.config.ts, app.json, eas.json (only if the slug moves), lib/shell/incoming-link.ts (docblock and examples), __tests__/** fixtures that spell the scheme, locales/{en,zh,ar}.json, README.md, ROADMAP.md, docs/*.md, .changeset/151-objectos-rebrand.md (stop on breach; explain in the report)
Container & model: M, mode:subagent, model: default tier (opus) — dispatch-gates --tier --repo objectstack-ai/mobile: no path-derived mandate, effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: none
Premise: holds
Serial constraints cleared: #154 is dispatched in the same round and shares only locales/*.json and docs/*.md. That is ordinary concurrency: the PR that lands later resolves the conflict. No single-writer path is involved.
{
"issue": 151,
"status": "done",
"branch": "claude/issue-151-objectos-rebrand",
"pr": "https://github.com/objectstack-ai/mobile/pull/164",
"session": "session_01QSeKYnW1Xf6HDSWz1eGAqv",
"premise_still_valid": true,
"summary": "Premise held on origin/main 8c6f13a (Blocked-by #150 closed). Changed the app identity in app.config.ts and app.json: name ObjectOS, scheme default objectos, ios.bundleIdentifier and android.package ai.objectos.mobile, slug objectos-mobile. app.json now also spells the two native ids. Slug decision recorded in the PR: no EAS project is bound (no extra.eas.projectId or owner; the EAS Build and Update runs on 8c6f13a skipped every step because EXPO_TOKEN is unset, runs 41412302838 and 41412302837), so the move is cheap and revertible. Whether an expo.dev project with the old slug exists is NOT MEASURED. Also updated: incoming-link docblock, +native-intent docblock, .env.example, test fixtures (including exp+objectos-mobile dev-client) plus one scheme-agnostic pin, the en/zh/ar server-picker subtitle, and README/ROADMAP/docs. Changeset added (patch). Bridge names, API paths, @objectstack/* names, persisted storage keys and the ObjectStackShell UA token were kept, as categories listed in the PR body. Card assignee left untouched. The welcome title and sign-in footnote named on the card do not exist on main (no locale keys or screens), so they were not renamed here.",
"tests": "head 44b7269: npx jest --ci --maxWorkers=2 → Test Suites: 26 passed, 26 total; Tests: 284 passed, 284 total; PASS __tests__/lib/shell/incoming-link.test.ts (new case: acme-crm://console/apps/crm → /apps/crm and acme-crm://open?route=%2Fapps → /apps). No tested behaviour changed (config/copy/comments), so no ablation. npx expo config --type public --json (EXPO_PUBLIC_APP_SCHEME unset, no .env) → ObjectOS objectos-mobile objectos ai.objectos.mobile ai.objectos.mobile.",
"gates": [
{
"cmd": "npx tsc --noEmit",
"exit": 0,
"head": "44b7269",
"note": "under os-verify-lock, VERDICT command-exit 0; --listFiles: 88 non-node_modules files incl. both incoming-link files"
},
{
"cmd": "npx eslint . --ext .ts,.tsx",
"exit": 0,
"head": "44b7269",
"note": "VERDICT command-exit 0; eslint 8.57.1; --format json on the 4 changed TS files: 0 errors 0 warnings"
},
{
"cmd": "npx jest --ci --maxWorkers=2",
"exit": 0,
"head": "44b7269",
"note": "VERDICT command-exit 0; 26/26 suites, 284/284 tests"
},
{
"cmd": "npx expo export --platform ios --output-dir SCRATCH/expo-dist",
"exit": 0,
"head": "44b7269",
"note": "VERDICT command-exit 0; iOS Bundled 3826 modules, entry hbc 7.9MB"
},
{
"cmd": "PR check-runs (read once at report time)",
"exit": null,
"head": "44b7269",
"note": "Code Quality=in_progress; Lint & Type Check=in_progress"
}
],
"gates_exit_file": "/tmp/claude-0/-home-user/b8d41080-bc0f-5479-b39a-9ebb93157dc8/scratchpad/issue-151/gates.txt",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm (Clause-②: no)",
"line_budget": "n/a — no skills/** or ratcheted ledger touched; diff +72 -45 across 16 files",
"files_changed": [
".changeset/151-objectos-rebrand.md",
".env.example",
"README.md",
"ROADMAP.md",
"__tests__/lib/shell/incoming-link.test.ts",
"app.config.ts",
"app.json",
"app/+native-intent.tsx",
"docs/DEPLOYMENT.md",
"docs/DEVICE-TESTING.md",
"docs/HYBRID-SHELL.md",
"docs/PUSH-NOTIFICATIONS.md",
"lib/shell/incoming-link.ts",
"locales/ar.json",
"locales/en.json",
"locales/zh.json"
],
"deviations": [
"surface: app/+native-intent.tsx outside the claim surface; its docblock spelled objectstack:// links (the card's ask 'code and comments that name the scheme'); declared in PR body",
"surface: .env.example outside the claim surface; it spelled the scheme default (dispatch assumption 2 anticipated it); declared in PR body",
"jest gate run with --maxWorkers=2 (container resource discipline); test set unchanged",
"expo export written to the scratchpad via --output-dir so the worktree stays clean",
"eas.json not touched: it names no slug or scheme"
],
"mcp_calls": "0",
"api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches → fleet-write run 41443604731 → POST /repos/objectstack-ai/mobile/pulls, read-back identical 7553 bytes); relay post-stamped comment on objectstack-ai/mobile#151. git push of the branch is not a REST write.",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · noted, not filed — lib/app-lock.ts prompts 'Unlock ObjectStack'; the module is dormant (its only importer is __tests__/lib/app-lock.test.ts), so the string is not shown today; belongs to whoever wires ROADMAP Phase 4 biometric lock (PR Acceptance notes)",
"carrier: maintainer · noted, not filed — the WebView UA token ObjectStackShell/ and the reply global __objectstackNativeResolve are wire identifiers like the ruled-unchanged bridge names; a rename belongs with that separate bridge-naming decision (objectstack d9885f5d has zero consumers of ObjectStackShell; control ObjectStackNative hits)"
]
}
ACCEPT → PR #164 comment 6577017396 (head 44b7269). Ready for review; the maintainer is requested. The maintainer merges (a merge to main runs EAS). Then this card closes through Fixes #151.
success, but every build and publish step was skipped (the token is unset). Nothing was built or published.
State: pm:dispatched is removed and the card closed completed via Fixes #151. The card that waits on this one: #156 (still waits for #154). #159 was held behind it on locales/*.json and is now released from that. It still waits for #154.
Activity
objectstack-fleet commentedon Nov 2, 2026
repo:mobile#1 · os-justin · session_01QSeKYnW1Xf6HDSWz1eGAqv
First touch (single-lane repo, the seat does its own triage).
enhancement.mainat8c6f13a: it still holds.app.config.tshasname: "ObjectStack Mobile",slug: "objectstack-mobile", scheme defaultobjectstackandcom.objectstack.mobile.app.jsonmatches.objectos://connect?server=…links and the native scanner screen #156 waits on it, and Bridge:scan()— barcode / QR scanning for Console fields #146, Bridge:pickImage(),openFile()andshare()— reliable photo capture, attachment download and sharing #147 and Managed deployment: read the server URL (and an optional lock) from MDM managed app configuration #157 queue behind it onapp.config.ts.objectstack-fleet commentedon Nov 2, 2026
repo:mobile#1 · os-justin · session_01QSeKYnW1Xf6HDSWz1eGAqv
Claim: PM loop round 1
Session:
session_01QSeKYnW1Xf6HDSWz1eGAqvAccount:
os-justinBranch:
claude/issue-151-objectos-rebrandWorktree:
mobile-issue-151Domain:
n/a — single-lane repo (repo:mobile)Seat:
repo:mobile#1File surface:
app.config.ts,app.json,eas.json(only if the slug moves),lib/shell/incoming-link.ts(docblock and examples),__tests__/**fixtures that spell the scheme,locales/{en,zh,ar}.json,README.md,ROADMAP.md,docs/*.md,.changeset/151-objectos-rebrand.md(stop on breach; explain in the report)Container & model:
M,mode:subagent,model: default tier (opus) — dispatch-gates --tier --repo objectstack-ai/mobile: no path-derived mandate,effort: highClause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect cardThread-read: none
Premise: holds
Serial constraints cleared: #154 is dispatched in the same round and shares only
locales/*.jsonanddocs/*.md. That is ordinary concurrency: the PR that lands later resolves the conflict. No single-writer path is involved.objectstack-fleet commentedon Nov 2, 2026
repo:mobile#1 · os-justin · session_01QSeKYnW1Xf6HDSWz1eGAqv
os-dev-report
{ "issue": 151, "status": "done", "branch": "claude/issue-151-objectos-rebrand", "pr": "https://github.com/objectstack-ai/mobile/pull/164", "session": "session_01QSeKYnW1Xf6HDSWz1eGAqv", "premise_still_valid": true, "summary": "Premise held on origin/main 8c6f13a (Blocked-by #150 closed). Changed the app identity in app.config.ts and app.json: name ObjectOS, scheme default objectos, ios.bundleIdentifier and android.package ai.objectos.mobile, slug objectos-mobile. app.json now also spells the two native ids. Slug decision recorded in the PR: no EAS project is bound (no extra.eas.projectId or owner; the EAS Build and Update runs on 8c6f13a skipped every step because EXPO_TOKEN is unset, runs 41412302838 and 41412302837), so the move is cheap and revertible. Whether an expo.dev project with the old slug exists is NOT MEASURED. Also updated: incoming-link docblock, +native-intent docblock, .env.example, test fixtures (including exp+objectos-mobile dev-client) plus one scheme-agnostic pin, the en/zh/ar server-picker subtitle, and README/ROADMAP/docs. Changeset added (patch). Bridge names, API paths, @objectstack/* names, persisted storage keys and the ObjectStackShell UA token were kept, as categories listed in the PR body. Card assignee left untouched. The welcome title and sign-in footnote named on the card do not exist on main (no locale keys or screens), so they were not renamed here.", "tests": "head 44b7269: npx jest --ci --maxWorkers=2 → Test Suites: 26 passed, 26 total; Tests: 284 passed, 284 total; PASS __tests__/lib/shell/incoming-link.test.ts (new case: acme-crm://console/apps/crm → /apps/crm and acme-crm://open?route=%2Fapps → /apps). No tested behaviour changed (config/copy/comments), so no ablation. npx expo config --type public --json (EXPO_PUBLIC_APP_SCHEME unset, no .env) → ObjectOS objectos-mobile objectos ai.objectos.mobile ai.objectos.mobile.", "gates": [ { "cmd": "npx tsc --noEmit", "exit": 0, "head": "44b7269", "note": "under os-verify-lock, VERDICT command-exit 0; --listFiles: 88 non-node_modules files incl. both incoming-link files" }, { "cmd": "npx eslint . --ext .ts,.tsx", "exit": 0, "head": "44b7269", "note": "VERDICT command-exit 0; eslint 8.57.1; --format json on the 4 changed TS files: 0 errors 0 warnings" }, { "cmd": "npx jest --ci --maxWorkers=2", "exit": 0, "head": "44b7269", "note": "VERDICT command-exit 0; 26/26 suites, 284/284 tests" }, { "cmd": "npx expo export --platform ios --output-dir SCRATCH/expo-dist", "exit": 0, "head": "44b7269", "note": "VERDICT command-exit 0; iOS Bundled 3826 modules, entry hbc 7.9MB" }, { "cmd": "PR check-runs (read once at report time)", "exit": null, "head": "44b7269", "note": "Code Quality=in_progress; Lint & Type Check=in_progress" } ], "gates_exit_file": "/tmp/claude-0/-home-user/b8d41080-bc0f-5479-b39a-9ebb93157dc8/scratchpad/issue-151/gates.txt", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm (Clause-②: no)", "line_budget": "n/a — no skills/** or ratcheted ledger touched; diff +72 -45 across 16 files", "files_changed": [ ".changeset/151-objectos-rebrand.md", ".env.example", "README.md", "ROADMAP.md", "__tests__/lib/shell/incoming-link.test.ts", "app.config.ts", "app.json", "app/+native-intent.tsx", "docs/DEPLOYMENT.md", "docs/DEVICE-TESTING.md", "docs/HYBRID-SHELL.md", "docs/PUSH-NOTIFICATIONS.md", "lib/shell/incoming-link.ts", "locales/ar.json", "locales/en.json", "locales/zh.json" ], "deviations": [ "surface: app/+native-intent.tsx outside the claim surface; its docblock spelled objectstack:// links (the card's ask 'code and comments that name the scheme'); declared in PR body", "surface: .env.example outside the claim surface; it spelled the scheme default (dispatch assumption 2 anticipated it); declared in PR body", "jest gate run with --maxWorkers=2 (container resource discipline); test set unchanged", "expo export written to the scratchpad via --output-dir so the worktree stays clean", "eas.json not touched: it names no slug or scheme" ], "mcp_calls": "0", "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches → fleet-write run 41443604731 → POST /repos/objectstack-ai/mobile/pulls, read-back identical 7553 bytes); relay post-stamped comment on objectstack-ai/mobile#151. git push of the branch is not a REST write.", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: none · noted, not filed — lib/app-lock.ts prompts 'Unlock ObjectStack'; the module is dormant (its only importer is __tests__/lib/app-lock.test.ts), so the string is not shown today; belongs to whoever wires ROADMAP Phase 4 biometric lock (PR Acceptance notes)", "carrier: maintainer · noted, not filed — the WebView UA token ObjectStackShell/ and the reply global __objectstackNativeResolve are wire identifiers like the ruled-unchanged bridge names; a rename belongs with that separate bridge-naming decision (objectstack d9885f5d has zero consumers of ObjectStackShell; control ObjectStackNative hits)" ] }objectstack-fleet commentedon Nov 2, 2026
repo:mobile#1 · os-justin · session_01QSeKYnW1Xf6HDSWz1eGAqv
ACCEPT → PR #164 comment 6577017396 (head
44b7269). Ready for review; the maintainer is requested. The maintainer merges (a merge tomainruns EAS). Then this card closes throughFixes #151.objectstack-fleet commentedon Nov 2, 2026
repo:mobile#1 · os-justin · session_01QSeKYnW1Xf6HDSWz1eGAqv
Landed. #164 merged at
7cb17d1. It was merged byos-zhuangafter that account's approval on head44b7269.merged=true, merge commit7cb17d17cb17d1success, but every build and publish step wasskipped(the token is unset). Nothing was built or published.State:
pm:dispatchedis removed and the card closedcompletedviaFixes #151. The card that waits on this one: #156 (still waits for #154). #159 was held behind it onlocales/*.jsonand is now released from that. It still waits for #154.