Repository navigation
Description
director#1 · zhuangjianguo · session_01QsR2jV5sBSzCYNEDgpYLJw
Blocked-by: #29617
Unlock-action: re-check #29617 when it is closed (server slice resumes; claim 6589102677 released)
Filing gate: ② a maintainer decision. The maintainer, on docs.objectos.ai #334 question 1 (batch #452 item 5), verbatim: 「Cloud/Enterprise 租户怎么导出本体?同意,同时立开发卡。」 — ruling 6568804196 (docs.objectos.ai #334): the docs narrow their "exportable" sentences to a planned capability now, and the platform builds the capability. This card is that capability. ⛔ Not a claim. Grade and lane are triage's; the read and the command are a new served surface, so the spec slice comes first.
Business reason: ObjectOS's positioning (E1 in apps/docs/lib/positioning.ts of docs.objectos.ai, and six docs pages) promises a customer that the ontology they build on ObjectOS Cloud or Enterprise is theirs: they can export it and run it on the Apache-2.0 runtime. Today no door does that. A customer who asks "how do I take my ontology out" gets no command and no page. Exit right is the promise that makes "no lock-in" true; until this lands the docs say "planned".
Reader who acts: domain:spec for the shape (packages/spec/src/api/export.zod.ts / package-lifecycle.zod.ts, Metadata-protocol: added, Clause-②: yes (widening), CONTRACT_REVIEW_TIER), then domain:server (packages/runtime/src/domains/packages.ts, packages/cli). The docs page "export your ontology" follows on docs.objectos.ai #334 once this lands.
Dedupe (open AND closed): ontology export → 10 hits, none about an export door (#27261 federation, #26140/#22951/#22172/#21838 positioning prose, the rest unrelated); export in:title is:open → 0; "deployment export" OR "tenant export" OR "export all packages" → 0 relevant (#24143 and #8484 are the CSV data export). Nearest shipped neighbour: GET /packages/:id/export (ADR-0070, per-package layer #28409, pair override declarations ADR-0146 D8.3), which is one package at a time.
维护者速读
- 改了什么(本卡要做的):给平台加一个「导出整个租户本体」的门:一次调用导出这个部署里所有已安装的包(基础包、它们的
.custom配对包、环境级定制),得到一组可以在开源运行时上直接安装的包;配一个os package export命令调用它。 - 为什么:官网和文档承诺「本体是你的,可以导出到开源运行时跑」,今天没有任何入口;docs Remove ObjectStackKernel legacy code and update to microkernel-only architecture #334 按您的裁定先把文案收窄成「规划中」,这张卡把它做成真的。
- 先看:今天只有按包导出
GET /packages/:id/export(27 种元数据类型,一次一个包);CLI 只有package install/package publish。 - 需要你做的:无;分诊定级定车道后由 spec 席先定形状。
Measured (origin/main 9a9823d9, read-only)
GET /packages/:id/exportexists (packages/runtime/src/domains/packages.ts:402): the whole-package export of one package, 27 metadata types, reading that package's own layer (metadata-protocol: one effective read — package-less, base-named, layered, the env-wide list and export serve the.customdeclared override, and a withdrawn public form stays withdrawn #28409) and carrying a pair's override declarations (ADR-0146 D8.3). It is gated by the builder roles likeGET /packages/:id.- There is no read that exports every package a deployment holds, and nothing that names the set of installed packages as one exportable bundle with their dependency order.
packages/cli/src/commands/package/holdsinstall.tsandpublish.tsonly;os package exportdoes not exist (docs.objectos.ai Implement MiniKernel architecture with plugin-based ObjectQL #332 removed a mention of it).- Secrets: feat(spec)!: the connector write door refuses an inline secret on every instance auth kind; the metadata read redacts connector credential positions #28596 withholds connector credential positions on read; an export must inherit that (a bundle never carries a credential, a
credentialRefis kept as the reference it is).
Wanted
- The shape (spec first). One served read that answers the deployment's whole ontology as a bundle: the list of installed packages in dependency order, and for each the same body
GET /packages/:id/exportserves today (so the per-package export stays the single producer and the bundle composes it). The.custompair of each base is included as its own package with its override declarations; environment-scope customizations are included under the package that owns them, as the per-package export already places them. Whether this is a new route (for exampleGET /packages/export) or a new member of an existing read is the spec card's call; the response shape is declared inpackages/spec/src/api, and the liveness row andMetadata-protocol: addedfollow. - The command.
os package export [--out DIR]calls that read and writes one directory per package, each installable withos package installon an open runtime, in the dependency order the read gives. A refusal (no builder standing, a package that cannot be exported) is loud and names the package. - Nothing secret leaves. The bundle carries no credential value: the feat(spec)!: the connector write door refuses an inline secret on every instance auth kind; the metadata read redacts connector credential positions #28596 withholding applies on this read as on every other, and
credentialRefnames survive as references. A test proves a connector withauth.credentialRefexports with the reference and without the secret. - Round trip. A test installs the exported bundle on a fresh runtime and reads the same objects, fields, flows, apps and permission sets back (names and counts), base and pair alike.
Done criteria
os package exporton a deployment with a base, its.custompair and a third package that extends the base produces three installable packages;os package installof the bundle on a fresh runtime yields the same metadata names and counts (test).- A connector with
auth.credentialRefexports with the reference and without any credential value (test). - The served read's response is declared in
packages/spec/src/apiand validated by the route (Metadata-protocol: added,CONTRACT_REVIEW_TIERrecord on the PR). - docs.objectos.ai Remove ObjectStackKernel legacy code and update to microkernel-only architecture #334 gets its "export your ontology" page as a follow-up once this lands (the docs lane files it; not this card's scope).
Dedupe words: ontology export, tenant export, whole-deployment export, os package export, export bundle, exit right.
Ruling-ref: docs.objectos.ai #334 comment 6568804196 (batch #452 item 5, Q1 → B + development card).
Related: docs.objectos.ai #334, #28409 (per-package export layer), ADR-0070, ADR-0146 D8, #28596 (credential withholding).
Activity
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: priority:p1 · domain:spec · pm:queue · 2026-11-02T05:09Z
⛔ Not a claim.
Metadata-protocol: added) and a newos package exportcommand, which is a new public surface, so it is p1 under 「协议新增定 p1」. The maintainer's ruling quoted from docs.objectos.ai Remove ObjectStackKernel legacy code and update to microkernel-only architecture #334 approves building it, and the card leaves the route-versus-member choice to the spec seat underCONTRACT_REVIEW_TIER, so it goes topm:queueindomain:spec. The read in packages/runtime/src/domains/packages.ts and the packages/cli command follow as a server slice behindBlocked-by:. The done criteria are all in this repo; if the hosted runtime needs a cloud-side change, that half moves todomain:cloud.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:spec#1 · os-steve · session_01ADHkmPi25XXKx92Xmg4viS
Claim: PM loop round 1 · 2026-11-02T05:20Z
Session:
session_01ADHkmPi25XXKx92Xmg4viS(seat); dev = card threadsession_01ADHkmScwpkMFTAD5HHubn1Account:
os-steveBranch:
claude/project-thread-weie9bWorktree: the card thread's own checkout of
objectstack-ai/objectstackDomain:
domain:specSeat:
domain:spec#1File surface:
packages/spec/src/api/package-lifecycle.zod.ts(a bundle response composingPackageExportManifestSchema) and the package route declaration (package-api.zod.ts/package-api-assembled.zod.ts, whichever carriesGET /packages/:id/export) and their tests; the liveness, authorable and api-surface ledger rows the spec gates name; regeneratedcontent/docs/references/**; root.changeset/; notpackages/runtime, notpackages/cli(the server slice,Blocked-by:this PR) (stop on breach; explain in the report)Container & model:
M,mode:thread,model: default — the tier is the PM's per-card call (floor sonnet · default opus · ceiling fable); one CONTRACT_REVIEW_TIER review (a new served read) before landing,effort: xhighClause-②: yes (widening)
Metadata-protocol: added
Responsibility:
n/a — not a defect cardThread-read: 6569574210
Premise: holds (on origin/main
62b3ec36onlyGET /packages/:id/exportexists, one package at a time; no read answers the deployment's installed set as one bundle;packages/cli/src/commands/package/holdsinstall.tsandpublish.tsonly)Serial constraints cleared: none (the seat's other in-flight cards #28864, #28934, #28914, #28912, #28896 hold disjoint files)
Ruling-ref: 6568804196 (docs.objectos.ai #334, maintainer 「Cloud/Enterprise 租户怎么导出本体?同意,同时立开发卡。」); triage 6569574210 leaves route-versus-member to the spec seat. This PR is
Part of #28914. Every new public name (route path, schema name, key) waits for the maintainer's approval before landing.objectstack-fleet commentedon Nov 2, 2026
domain:spec#1 · os-steve · session_01ADHkmScwpkMFTAD5HHubn1
os-dev-report
{ "issue": 28914, "status": "done", "branch": "claude/project-thread-weie9b", "pr": "https://github.com/objectstack-ai/objectstack/pull/29100", "session": "session_01ADHkmScwpkMFTAD5HHubn1", "premise_still_valid": true, "summary": "Spec slice of #28914. `PackageExportBundleSchema` (plus `PackageExportBundle` / `PackageExportBundleParsed`) in packages/spec/src/api/package-lifecycle.zod.ts declares the data of `GET /api/v1/packages/export`: `{ packages: PackageExportManifest[] }`, strict at the top level, each entry exactly the per-package export (the element IS `PackageExportManifestSchema`, pinned by identity), every package but the platform's own (manifest scope `system`), in ADR-0141 D5 dependency order so a `.custom` pair follows its base; no credential value, `credentialRef` stays a reference. Pure widening: no existing shape or accept set changes and no runtime serves the route yet. Draft PR #29100, head 2882de4a (origin/main 12aad143 merged in; branch delta vs main unchanged at 11 files +221/-8).", "tests": "Head 2882de4a, each heavy run under os-verify-lock (VERDICT command-exit 0 each): turbo build of the runtime+cli closures; `pnpm --filter @objectstack/spec check:generated` exit 0 (all artifacts current); `pnpm --filter @objectstack/spec test` Test Files 790 passed (790), Tests 23362 passed, 1 todo; `pnpm --filter @objectstack/spec typecheck` exit 0. Consumer suites on 0493264f (same branch delta, origin/main ab085a04): `pnpm --filter @objectstack/runtime test` Test Files 513 passed (513), Tests 8267 passed, 19 skipped, typecheck exit 0; `pnpm --filter @objectstack/cli exec vitest run --project unit` Test Files 368 passed (368), Tests 5196 passed, typecheck exit 0; the same three suites also green on 020adeb0 before any merge. New tests: package-lifecycle.test.ts 30/30 (5 new). Ablations on 020adeb0 via ablation-replace.mjs: dropping `.strict()` on the bundle -> 1 failed | 29 passed (the strictness test); swapping the composed element for a hand-copied open object -> 1 failed | 29 passed (only the identity pin catches it); both restored, blob == HEAD, `git diff HEAD` empty. Reverse type probe against the rebuilt .d.ts: a bundle literal compiles, `{ packages: [], cycles: [] }` is TS2353; probe deleted. eslint --max-warnings=0 on the two changed .ts files exit 0.", "gates": "`node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` on 2882de4a: 103 commands; all 103 `:: exit 0` (exit codes captured before any pipe). `dispatch-gates --ran`: \"103 derived famil(ies) accounted for — 103 run, 0 NOT-MEASURED (a DERIVED zero — all 103 recorded an exit code and none of them is 3)\", exit 0. Same 103 all exit 0 on 0493264f. `node scripts/check-changeset-no-major.mjs --base origin/main --event` (the PR body, offline) on 2882de4a: exit 0, LEVEL AXIS `yes (widening)` + `added`, `@objectstack/spec: minor`. Local-only: `check:skill-frame-freshness` exit 0; `check:dev-prereqs` exit 1 is a box precondition (35 ui/ dists unbuilt in this container), not a reading about the diff. CI check-runs not cited: the order says not to wait on CI.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "5 — all reads: issue_read get #28914, issue_read get_comments #28914 (x2), pull_request_read get #28920, pull_request_read get #29100. No MCP write tool.", "api_writes": "2 so far through the fleet relay: pr_create (draft #29100, no assignees, no labels; read-back 15046 bytes sent = stored) and this os-dev-report comment on #28914 via post-stamped.mjs. Plus `git push` of the branch (not a REST write).", "open_questions": [ { "question": "Approve the new public names: route `GET /api/v1/packages/export`; schema `PackageExportBundleSchema` with types `PackageExportBundle` / `PackageExportBundleParsed`; key `packages`.", "options": ["A approve as written", "B rename before landing (name the replacement)"], "recommendation": "A, because they sit beside `PackageExportManifestSchema` and the existing `packages` key of `GET /packages`; `export` can never be a package id (MANIFEST_ID_PATTERN needs two dot-separated segments), so the path cannot collide with `/packages/:id`." }, { "question": "Which packages the bundle carries.", "options": ["A every package but the platform's own (manifest scope `system`), enabled or not (this PR)", "B every package `GET /packages` lists, the consumer skipping what the target already has"], "recommendation": "A, because the card's done criterion (a base, its pair and a third package produce three installable packages) holds only if the platform packages every runtime ships for itself are left out; B pushes a skip rule onto every consumer." }, { "question": "The per-package export (`assemblePackageManifest`, packages/runtime/src/domains/packages.ts) drops `manifest.namespace` and `manifest.dependencies`; a reinstalled `.custom` pair would derive namespace `custom` from its id and lose its base edge.", "options": ["A the server slice measures the round trip first and, if a pair fails, a spec card adds both as declared fixed keys of `PackageExportManifestSchema`", "B add them to `PackageExportManifestSchema` in this PR now"], "recommendation": "A, because declaring keys no producer emits yet would be declared-not-enforced, and the measurement belongs to the slice that runs the round-trip test." } ], "out_of_scope_findings": [ "namespace/dependencies dropped by the per-package export (read, not reproduced: no round trip runs today) · carrier: #28914 server slice · noted, not filed" ], "handoff_slices": [ "runtime handler: mount `GET /api/v1/packages/export` in packages/runtime/src/domains/packages.ts — the per-package export's read gate (studio.access or setup.access, or system), closed empty query set (any parameter -> 400 VALIDATION_ERROR naming it), every package but scope `system`, ordered by `orderHydrationBatch` (packages/core/src/hydration-order.ts), each entry from `assemblePackageManifest`, whole or absent (a package that cannot be assembled fails the read, naming it)", "route ledger: a packages/runtime/src/route-ledger.ts row with responseSchema `PackageExportBundleSchema`, the authz census move, and the `PackageApiContracts` entry in the same change that mounts it", "client SDK: a `client.packages` method for the bundle and its unwrap-misfire.pin.test.ts roster row", "cli: `os package export` in packages/cli (writes one installable package per entry, in order) plus its tier wiring", "tests: round trip (base, its `.custom` pair with overrides, a third package -> three installable packages that reinstall on a fresh runtime) and credential (no credential value in the bundle; `credentialRef` survives as a reference)", "docs (the PR's Skills-docs follow-up): content/docs/deployment/cli.mdx (`os package export`) and content/docs/concepts/metadata-lifecycle.mdx (export paragraph names only the per-package route)", "measurement owed by the server slice: open question 3 (namespace/dependencies on the round trip)" ], "files_changed": [ "packages/spec/src/api/package-lifecycle.zod.ts (+71)", "packages/spec/src/api/package-lifecycle.test.ts (+96)", ".changeset/28914-package-export-bundle.md (+14, @objectstack/spec minor)", "generated by check:generated --fix: content/docs/references/api/package-lifecycle.mdx, content/docs/references/index.mdx, docs/audits/2026-07-unknown-key-strictness-ledger.counts/api.md, packages/spec/api-surface/api.json, packages/spec/authorable-surface/api.json, packages/spec/declaration-map/api.json, packages/spec/export-origins/api.json, packages/spec/json-schema.manifest/api.json" ], "line_budget": "No PM line budget (no skills/** touched). Size M: 11 files, +221/-8 vs main; hand-written +181 (schema 71, tests 96, changeset 14), generated +40/-8.", "deviations": [ "No package-api edit: neither package-api.zod.ts nor package-api-assembled.zod.ts declares the per-package export route, and PackageApiContracts says a route is declared only in the change that mounts it; the declaration lives in the schema docblock and goes to the ledger with the server slice.", "No liveness row: liveness ledgers are per metadata type (packages/spec/liveness/TYPE.json); an API response schema has none. check:liveness exit 0.", "Two origin/main merges, both through os-regen-merge.sh: ab085a04 into 0493264f before the PR opened, then 12aad143 into 77b86c59 after it (the PR had gone dirty on generated artifacts). On the second, step 3's commit was refused by the pre-commit hook (artifacts stale after the merge); regenerated with `check:generated --fix` and committed as 2882de4a. Main's new entries survived and the branch delta is unchanged. The PR body (written once) cites 0493264f; this report carries the 2882de4a readings for the seat to append.", "runtime and cli consumer suites were not re-run on 2882de4a: the second merge changed only main's own files, the branch touches neither package, and CI Test Core runs them on the head.", "Report layout: signature on line 1 and `os-dev-report` on line 2, as os-dev.md and post-stamped.mjs require, where the standard order says line 1.", "On 0493264f's first gate pass `pnpm check:dual-build-cjs-loads` exited 3 (no dist for connector-slack, organizations, service-print in this container); built those three and re-ran: exit 0, recorded as exit 0. On 2882de4a it was exit 0 first time.", "cli `integration` vitest project not run locally (the diff touches no cli file); left to CI." ] }Stamped 2026-11-02T08:05Z.
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:spec#1 · os-steve · session_01ADHkmPi25XXKx92Xmg4viS
Decision needed · new public names · 2026-11-02T14:40Z
维护者速读
GET /api/v1/packages/export;schemaPackageExportBundleSchema(类型PackageExportBundle);字段packages。PackageExportManifestSchema、GET /packages的packages字段对齐;export不可能是包 id,不会和/packages/:id冲突。PR feat(spec): declare the whole-deployment export, every installed package as installable packages in one read (PackageExportBundleSchema) #29100 按此落地。PackageExportBundleSchema) #29100 契约复审 PASS(record 在 PR 上),只等这个名字决定;保持草稿。Seat recommendation: A. The seat lands PR #29100 once the ruling is on this card.
objectstack-fleet commentedon Nov 2, 2026
domain:spec#1 · os-steve · session_01ADHkmPi25XXKx92Xmg4viS
Decision withdrawn · 2026-11-02T17:05Z
The seat withdraws its "Decision needed" comment 6579953358. That question was only about names (
GET /api/v1/packages/export,PackageExportBundleSchema,packages). pm-dispatch has no maintainer gate for choosing a public name: the seat picks it, and only a real semantic or contract split goes to the maintainer. No such split is open here. The seat keeps the recommended names and lands PR #29100 on its CONTRACT_REVIEW_TIER PASS.needs-user-decisionis removed.13 remaining items
objectstack-fleet commentedon Nov 3, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: unblocked · p1 kept ·
pm:blocked→pm:queue· 2026-11-03T01:58Z⛔ Not a claim.
Blocked-by: #29617is closed: PR feat(spec,runtime): a package export carries its namespace and dependencies, so a reinstalled .custom pair keeps both (#29617) #29651 merged, so the.customexport carriesnamespace/dependencies. The server slice resumes from freshorigin/main, as the card'sUnlock-actionsays.Generated by Claude Code
objectstack-fleet commentedon Nov 3, 2026
domain:server#4 · os-warren · session_01JQwxbacSXJQqAztgt4UMrS
Claim: PM loop · server slice resumed · 2026-11-03T02:20Z
Session:
session_01JQwxbacSXJQqAztgt4UMrS(seat); dev = card threadsession_01JQwxbWrCtyQtTGt4iYTTvXAccount:
os-warrenBranch:
claude/project-thread-ahcrjb(a project card thread pushes only its assigned branch; measured platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-28914Domain:
domain:server(hand-off 6588925516 fromdomain:spec#1)Seat:
domain:server#4File surface:
packages/runtime/src/domains/packages.ts(the newGET /api/v1/packages/exportroute beside the per-package export), the route ledger row,packages/cli(the command, the client method, theunwrap-misfire.pin.test.tsroster row), the[PLANNED — not yet served]marker and its pinning test inpackages/spec/src/api/package-lifecycle.zod.ts/package-lifecycle.test.tsplus any generated surface that text regenerates,content/docs/deployment/cli.mdx,content/docs/concepts/metadata-lifecycle.mdx, tests, changesets (stop on breach; explain in the report). No new spec key.Container & model:
L,mode:thread(the os-dev agent type is not loaded in seat sessions),model: TIER_DEFAULT,effort: project default (the maintainer sets effort)Clause-②: yes (a new served route; dev confirms from the diff)
Metadata-protocol: none
Responsibility:
n/a — feature, server slice after spec PR #29100Thread-read: 6593456143
Premise: spec slice landed (PR #29100,
f1d795b1a5); the round-trip blocker #29617 landed as PR #29651 (a6a369efae), so an export carriesnamespaceanddependencies; fresh fromorigin/mainc9636f1eSerial constraints cleared: #29617 closed (PR #29651); #29649 (export path of
packages.ts) merged as PR #2968733ee9aa1; theprotocol.tsfreeze lifted (6588593530). Contract review owed on the spec marker face before the queue.objectstack-fleet commentedon Nov 3, 2026
domain:server#4 · os-warren · session_01JQwxbWrCtyQtTGt4iYTTvX
os-dev-report
Server slice built and opened as draft PR #29755:
GET /api/v1/packages/export,client.packages.exportAll(),os package export [--out DIR], the[PLANNED]marker dropped. Both Done tests pass on two showcase boots (round trip of base +.custompair + a third package;credentialRefexported, secret absent). The marker drop is the published-schema face the seat's contract review reads.{ "issue": 28914, "status": "done", "branch": "claude/project-thread-ahcrjb", "pr": "https://github.com/objectstack-ai/objectstack/pull/29755", "session": "session_01JQwxbWrCtyQtTGt4iYTTvX", "premise_still_valid": true, "summary": "Server slice of #28914, on top of PR #29100 (spec) and PR #29651 (namespace and dependencies on each export). The runtime dispatcher serves GET /api/v1/packages/export (packages/runtime/src/domains/packages.ts, assemblePackageExportBundle, matched and mounted ahead of GET /packages/:id): the per-package export's read gate, a closed empty query set (400 VALIDATION_ERROR naming the parameter), every registry row whose source is not code with disabled rows included, ordered by orderHydrationBatch over declaredDependencyIds, each entry from assemblePackageManifest only, whole or absent (a thrown assembly keeps its status with the message naming the package; a null one answers 500 naming it). Route-ledger row (packages.exportAll, PackageExportBundleSchema) with its census sentence; client.packages.exportAll() plus its unwrap-misfire roster row; os package export [--out DIR] writing DIR/NN-ID/objectstack.json in the order served, each installable with os package install; the [PLANNED] marker dropped and its spec test flipped; cli.mdx and metadata-lifecycle.mdx taught; one changeset (runtime, client, cli, spec patch).", "tests": "Head 43a7c550 (suites on 699399a4; 43a7c550 changes only the route-ledger census digit). New: runtime src/domains/packages-export-bundle.test.ts Tests 10 passed (10); cli test/package-export.test.ts Tests 6 passed (6), including each written file posted unchanged as the manifest by the real os package install; dogfood test/package-export-bundle-round-trip.dogfood.test.ts Tests 5 passed (5) over two showcase boots (base + .custom pair with a published override + a third package extending the base: exactly three entries, base first, the pair keeps namespace exportbase_custom and its base edge; installed in order on a fresh showcase through install-local, the target's bundle answers the same ids, order, namespace, dependencies and per-collection names and counts; a connector exports its credentialRef and the secret it resolves to appears nowhere in the response). Suites, each VERDICT command-exit 0: spec Test Files 803 passed (803), Tests 23792 passed, 1 todo; client 54/54 files, 695 tests; cli --project unit 376/376 files, 5295 tests; runtime 532/532 files, 8535 passed, 19 skipped; typecheck exit 0 for spec, client, cli, runtime, dogfood. Ablation on 699399a4 via ablation-replace.mjs (runtime tests read packages.ts from source): order sorter replaced by listing order gives 2 failed of 10; the code-source filter disabled gives 2 failed of 10; both restored, blob equals HEAD 8a46b0cd25ab, git diff HEAD empty.", "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack: 111 derived, same list on 699399a4 and 43a7c550. First pass: 107 exit 0; check:route-ledger-census exit 1 (census sentence 116 vs 117 rows, fixed with its --fix in 43a7c550, then exit 0); check:skill-examples and check:dual-build-cjs-loads exit 3 (unbuilt dists), exit 0 after building them; check-plugin-teardown-shape.mjs --self-test exit 3 on both heads (fixture commit outside the shallow clone), NOT MEASURED. Re-run on 43a7c550, exit 0 each: route-ledger-census, skill-examples, dual-build-cjs-loads, type-check-debt, query-options-erasure, route-envelope, dispatcher-error-vocabulary, system-context-census, spec-docblock-symbol-anchors, nul-bytes, and pnpm lint (eslint . --no-inline-config). dispatch-gates --ran: 111 derived famil(ies) accounted for, 110 run, 1 NOT-MEASURED (1 derived from a recorded exit 3), exit 0. CI check-runs: in_progress at report time, not waited on.", "dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2: pr_create (draft #29755 through the fleet relay, 13612 bytes sent = stored, no assignees, no labels) and this os-dev-report comment on #28914 through post-stamped.mjs. Plus git push of the branch (not a REST write). REST reads: issue 28914, its comments, claim 6593769624, pulls 29100 and 29651 with their files, pull 29755 read-back.", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: none · assemblePackageManifest treats a per-type read error as an unsupported type and skips it (continue), so the bundle inherits a silently missing collection if the protocol throws for one type; observed in reading, not reproduced; noted in the PR's Acceptance notes, not filed" ], "deviations": [ "Claim line Clause-② yes (a new served route) written as yes (widening) in the PR body and changeset: the AGENTS.md closed arm set has only (widening) and (narrowing).", "Changeset level patch on all four packages: Metadata-protocol none takes patch under the AGENTS.md level rule.", "cli integration tier not run locally (the diff touches no integration-tier file or spawn entry); left to CI.", "The PR body carries the os-dev headings plus the template's Why and Human Minimum; Before Submitting left unchecked." ], "body_amendments": [] }Generated by Claude Code
docs(spec): the package-lifecycle header names only the whole-deploym…
objectstack-fleet commentedon Nov 3, 2026
domain:server#4 · os-warren · session_01JQwxbacSXJQqAztgt4UMrS
Landing record · #28914 · PR #29755 · 2026-11-03T05:02Z
git ls-remote origin 'refs/heads/gh-readonly-queue/main/pr-29755-*'git merge-base --is-ancestor b3d14150 origin/maingit grep -c assemblePackageExportBundle origin/main -- packages/runtime/src/domains/packages.tsRelease: claim
6593769624(session_01JQwxbacSXJQqAztgt4UMrS, card threadsession_01JQwxbWrCtyQtTGt4iYTTvX, branchclaude/project-thread-ahcrjb) · full landingProduce: PR #29755 merged as
b3d14150at 2026-11-03T05:01Z. A tenant can now export its whole ontology in one read.GET /api/v1/packages/exportanswers every installed non-codepackage, each exactly asGET /packages/:id/exportanswers it, dependencies first.client.packages.exportAll()andos package export [--out DIR]call it, and the CLI writes one installable directory per package. The[PLANNED]marker is offPackageExportBundleSchema. A base, its.custompair and an extending package round-trip onto a fresh runtime with namespace and dependencies kept. AcredentialRefconnector exports the reference and no secret. The contract review PASS (CONTRACT_REVIEW_TIER) and ACCEPT are on the PR.Fixes #28914closed this card as completed.pm:dispatchedremoved; the card is closed.