From e29279e02c14e129c6966ab72d867b0a2528912a Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 21 Jul 2026 12:43:38 +0000 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20update=20repo=20references=20for=20?= =?UTF-8?q?framework=20=E2=86=92=20objectstack=20rename?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace objectstack-ai/framework → objectstack-ai/objectstack across package.json repository/bugs URLs, docs, CHANGELOG, and skills-install commands. Rename framework.code-workspace → objectstack.code-workspace and update the repo's own clone/worktree instructions (cd objectstack, ../objectstack-). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_011kPznpkdptgo2hvW7wMDNw --- .claude/skills/dogfood-verification/SKILL.md | 2 +- .claude/workflows/docs-accuracy-audit.js | 2 +- .github/workflows/lint.yml | 2 +- AGENTS.md | 4 +- CHANGELOG.md | 10 +-- README.md | 6 +- .../blog/context-window-is-the-constraint.mdx | 4 +- content/docs/ai/agents.mdx | 4 +- content/docs/ai/connect-mcp.mdx | 2 +- content/docs/ai/skills-reference.mdx | 6 +- content/docs/ai/skills.mdx | 4 +- content/docs/api/client-sdk.mdx | 10 +-- content/docs/automation/approvals.mdx | 4 +- content/docs/automation/flows.mdx | 4 +- content/docs/concepts/metadata-driven.mdx | 2 +- content/docs/concepts/metadata-lifecycle.mdx | 20 +++--- content/docs/data-modeling/analytics.mdx | 2 +- content/docs/data-modeling/formulas.mdx | 4 +- .../docs/deployment/environment-variables.mdx | 2 +- .../docs/deployment/production-readiness.mdx | 6 +- content/docs/deployment/self-hosting.mdx | 2 +- content/docs/deployment/tenancy-modes.mdx | 2 +- .../build-with-claude-code.mdx | 4 +- content/docs/getting-started/examples.mdx | 4 +- content/docs/getting-started/index.mdx | 2 +- .../docs/getting-started/quick-reference.mdx | 2 +- .../getting-started/your-first-project.mdx | 4 +- content/docs/kernel/services-checklist.mdx | 2 +- content/docs/permissions/access-recipes.mdx | 4 +- content/docs/permissions/authentication.mdx | 4 +- content/docs/plugins/packages.mdx | 66 +++++++++---------- .../docs/protocol/objectql/state-machine.mdx | 2 +- content/docs/protocol/objectui/layout-dsl.mdx | 6 +- content/docs/references/ui/portal.mdx | 2 +- .../docs/releases/implementation-status.mdx | 2 +- content/docs/releases/index.mdx | 4 +- content/docs/releases/v9.mdx | 2 +- content/docs/ui/audience-based-interfaces.mdx | 6 +- content/docs/ui/create-vs-edit-form.mdx | 4 +- content/docs/ui/doc-pages.mdx | 2 +- content/docs/ui/field-grouping-and-order.mdx | 4 +- content/docs/ui/forms.mdx | 4 +- content/docs/ui/public-data-collection.mdx | 4 +- docker/Dockerfile | 2 +- ...0020-state-machine-converge-and-enforce.md | 2 +- .../0021-analytics-dataset-semantic-layer.md | 4 +- docs/adr/0038-build-verification-loop.md | 2 +- ...040-unified-assistant-and-agent-binding.md | 2 +- docs/adr/0042-approval-sla-escalation.md | 2 +- docs/adr/0043-actionable-approval-links.md | 2 +- .../0044-approval-send-back-for-revision.md | 2 +- ...54-runtime-proof-for-authorable-surface.md | 12 ++-- ...057-system-data-lifecycle-and-retention.md | 14 ++-- ...hird-party-backward-compatibility-gates.md | 16 ++--- docs/adr/0070-package-first-authoring.md | 6 +- ...0087-metadata-protocol-upgrade-contract.md | 2 +- ...-06-handwritten-docs-accuracy-followups.md | 4 +- examples/app-showcase/README.md | 2 +- examples/app-showcase/src/coverage.ts | 4 +- .../app-showcase/src/docs/showcase_index.md | 2 +- .../src/docs/showcase_index.zh.md | 2 +- .../src/ui/pages/capability-map.page.ts | 2 +- ...de-workspace => objectstack.code-workspace | 0 packages/adapters/hono/package.json | 4 +- packages/apps/account/package.json | 4 +- packages/apps/setup/package.json | 4 +- packages/apps/studio/package.json | 4 +- packages/cli/package.json | 4 +- packages/cli/src/commands/init.ts | 2 +- packages/client-react/package.json | 4 +- packages/client/package.json | 4 +- packages/cloud-connection/package.json | 4 +- packages/console/README.md | 2 +- packages/console/package.json | 6 +- packages/core/package.json | 4 +- packages/create-objectstack/CHANGELOG.md | 4 +- packages/create-objectstack/README.md | 2 +- packages/create-objectstack/package.json | 4 +- packages/create-objectstack/src/index.ts | 8 +-- .../src/template-consistency.test.ts | 12 ++-- .../src/templates/AGENTS.md | 6 +- packages/formula/package.json | 4 +- packages/lint/package.json | 4 +- packages/mcp/package.json | 4 +- packages/metadata-core/package.json | 4 +- packages/metadata-fs/package.json | 4 +- packages/metadata-protocol/package.json | 4 +- packages/metadata/package.json | 4 +- packages/objectql/package.json | 4 +- packages/observability/package.json | 4 +- packages/platform-objects/package.json | 4 +- packages/plugins/driver-memory/package.json | 4 +- packages/plugins/driver-mongodb/package.json | 4 +- packages/plugins/driver-sql/package.json | 4 +- .../plugins/driver-sqlite-wasm/package.json | 4 +- packages/plugins/plugin-audit/package.json | 4 +- packages/plugins/plugin-auth/package.json | 4 +- packages/plugins/plugin-dev/package.json | 4 +- .../plugins/plugin-hono-server/package.json | 4 +- packages/plugins/plugin-security/CHANGELOG.md | 4 +- packages/plugins/plugin-security/package.json | 4 +- packages/plugins/plugin-webhooks/package.json | 2 +- packages/qa/dogfood/README.md | 4 +- packages/qa/http-conformance/package.json | 4 +- packages/rest/package.json | 4 +- packages/runtime/package.json | 4 +- packages/sdui-parser/package.json | 4 +- .../services/service-analytics/package.json | 4 +- .../services/service-automation/package.json | 4 +- packages/services/service-cache/package.json | 4 +- .../service-cluster-redis/package.json | 2 +- .../services/service-cluster/package.json | 2 +- .../services/service-datasource/package.json | 4 +- packages/services/service-i18n/package.json | 4 +- packages/services/service-job/package.json | 4 +- .../services/service-knowledge/package.json | 4 +- .../services/service-messaging/package.json | 4 +- .../services/service-package/package.json | 4 +- packages/services/service-queue/package.json | 4 +- .../services/service-realtime/package.json | 4 +- .../services/service-settings/package.json | 2 +- .../services/service-storage/package.json | 4 +- packages/spec/package.json | 4 +- packages/spec/src/ui/portal.zod.ts | 2 +- .../trigger-record-change/package.json | 4 +- .../triggers/trigger-schedule/package.json | 4 +- packages/types/package.json | 4 +- packages/verify/package.json | 4 +- packages/vscode-objectstack/package.json | 4 +- skills/README.md | 2 +- 130 files changed, 294 insertions(+), 294 deletions(-) rename framework.code-workspace => objectstack.code-workspace (100%) diff --git a/.claude/skills/dogfood-verification/SKILL.md b/.claude/skills/dogfood-verification/SKILL.md index 1e7159e2df..712bb5951f 100644 --- a/.claude/skills/dogfood-verification/SKILL.md +++ b/.claude/skills/dogfood-verification/SKILL.md @@ -9,7 +9,7 @@ description: > a change in the running app. NOT a customer-published skill — this is internal agent tooling (lives in .claude/, never in the published `skills/` dir). metadata: - # Hides this skill from interactive `npx skills add objectstack-ai/framework` + # Hides this skill from interactive `npx skills add objectstack-ai/objectstack` # discovery. NOTE: the skills CLI's `--all` implies `--skill '*'`, which # includes internal skills — so the hard boundary against leaking into # customer projects is the `/skills` subpath in every advertised install diff --git a/.claude/workflows/docs-accuracy-audit.js b/.claude/workflows/docs-accuracy-audit.js index 05e35e08f6..2147c0630e 100644 --- a/.claude/workflows/docs-accuracy-audit.js +++ b/.claude/workflows/docs-accuracy-audit.js @@ -41,7 +41,7 @@ const HOUSE_FACTS = `ESTABLISHED CORRECTIONS from prior doc-accuracy audits (PR - Console/portal path is /_console — NOT /_studio. - REST data path is /api/v1/data/{object} — NOT /api/v1/{object}. REST routes carry the /v1 prefix. - Env vars are OS_AUTH_SECRET (not AUTH_SECRET) and OS_PORT (not PORT); nested keys use single underscore unless the schema says otherwise. Mock-server toggle is VITE_USE_MOCK_SERVER (no VITE_RUNTIME_MODE or ?mode= switch). -- The repo is github.com/objectstack-ai/framework (NOT objectstack-ai/spec). Fix broken cross-repo links/paths accordingly. +- The repo is github.com/objectstack-ai/objectstack (NOT objectstack-ai/spec). Fix broken cross-repo links/paths accordingly. - Package names: @objectstack/ (e.g. @objectstack/service-cache, NOT @objectstack/services/service-cache). Some types only export via subpaths (e.g. @objectstack/spec/ui). - Auto-generated reference docs live in content/docs/references/ and are OUT OF SCOPE — never edit them.` diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 13b5f20012..a8779caade 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -157,7 +157,7 @@ jobs: # Same class, same reasoning, different surface: skills/*/references/_index.md # and the objectstack-ui react-blocks contract are generated from # packages/spec/src and committed, and nothing regenerated them either. These - # ship to third parties via `npx skills add objectstack-ai/framework`, so the + # ship to third parties via `npx skills add objectstack-ai/objectstack`, so the # drift is served straight to consumers' agents — 6 of 113 schema pointers named # files the spec had already deleted or renamed. # diff --git a/AGENTS.md b/AGENTS.md index 60a9ab2062..15064791cf 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -72,7 +72,7 @@ Other scripts: `objectui:bump` (pull only), `objectui:build`, `objectui:clean`. When renaming a legacy var, use `readEnvWithDeprecation('OS_NEW', 'LEGACY')` from `@objectstack/types` (keeps legacy working one release). Third-party exceptions kept as-is: `NODE_ENV`, `HOME`, `OPENAI_API_KEY`, `TURSO_*`, OAuth `*_CLIENT_ID/SECRET`, `RESEND_API_KEY`, `POSTMARK_TOKEN`, `AI_GATEWAY_*`, `SMTP_*`. See #1382. 10. **File issues for out-of-scope findings — don't silently expand scope or leave them buried.** When you hit a bug, gap, or unenforced capability that's unrelated to the current task, or too large to fix in scope, open a GitHub issue (`gh issue create`) with a clear repro/decision and link it from your PR. Corollary: **never advertise or demo a capability the runtime doesn't actually deliver** (declared ≠ enforced) — fix it, trim it, or file an issue, but don't fake coverage. Example: the spec once declared 9 validation-rule types while the write-path validator enforced only 3 (`state_machine`/`script`/`cross_field`); the gap was filed as #1475 rather than demoed in the showcase, then closed by **trimming** what could never be enforced (`unique`/`async`/`custom`) and **implementing** the rest — the spec now declares 6 and `rule-validator.ts` handles all 6. Note how narrow that claim stayed even so: the evaluator was wired into insert and single-id update only, so a bulk `updateMany` silently skipped every rule — a second `declared ≠ enforced` gap one layer down, at the **call site** rather than the `switch`; filed as #3106 and closed by evaluating the bulk match set per row. A `case` label is not enforcement; check the **call site**. -11. **Worktree-first — never edit on the shared `main` checkout.** This repo is edited by **multiple agents at once**; the shared `main` tree has its HEAD switched and reset *under you*, silently clobbering uncommitted work. Before your **first file edit**, you MUST be in a dedicated worktree on a feature branch: `git worktree add ../framework- -b main && cd ../framework- && pnpm install`. A PreToolUse hook (`.claude/hooks/guard-main-checkout.sh`) **enforces** this — it blocks `Edit`/`Write`/`NotebookEdit` unless the edited file is in a dedicated **worktree** — a feature branch on the *shared* checkout is **not** enough (it still gets switched under you) — and it checks the **edited file's own repo**, so sibling repos (`objectui`/`cloud`) you touch are covered too (override for a deliberate non-task fix with `OS_ALLOW_MAIN_EDITS=1`). Full playbook below. +11. **Worktree-first — never edit on the shared `main` checkout.** This repo is edited by **multiple agents at once**; the shared `main` tree has its HEAD switched and reset *under you*, silently clobbering uncommitted work. Before your **first file edit**, you MUST be in a dedicated worktree on a feature branch: `git worktree add ../objectstack- -b main && cd ../objectstack- && pnpm install`. A PreToolUse hook (`.claude/hooks/guard-main-checkout.sh`) **enforces** this — it blocks `Edit`/`Write`/`NotebookEdit` unless the edited file is in a dedicated **worktree** — a feature branch on the *shared* checkout is **not** enough (it still gets switched under you) — and it checks the **edited file's own repo**, so sibling repos (`objectui`/`cloud`) you touch are covered too (override for a deliberate non-task fix with `OS_ALLOW_MAIN_EDITS=1`). Full playbook below. 12. **Contract-first — fix the metadata, not the runtime.** This is a metadata-driven framework: `packages/spec` is the one contract between metadata *producers* and the runtime/renderers that *consume* it. When a piece of metadata "doesn't work," ask **first**: *is it spec-compliant? is this the long-term-correct direction?* If the metadata is wrong, fix it at the **producer** and **reject it at authoring/publish** (validation / lint) so the error surfaces loudly — do **not** add a lenient alias or `??` fallback in the consumer (a node executor, the REST layer, a renderer) to tolerate off-spec input. A tolerant fallback fossilizes the wrong convention into a second de-facto contract, dilutes the spec, and hides the producer's bug — one strict contract beats N dialects. This is an **internal** contract (we own both ends), so "be liberal in what you accept" (Postel) does **not** apply — that's for untrusted boundaries. Change the **spec** only when the spec itself is genuinely wrong, and then deliberately (edit the Zod schema + migrate), never by accreting consumer-side fallbacks. The existing `cfg.filter ?? cfg.filters` / `cfg.objectName ?? cfg.object` in the flow executors are **debt to pay down, not a pattern to copy**. *Worked example:* an AI-authored `create_record` used `fieldValues` / `today()` / `{{trigger.record.id}}` while the executor reads `fields` / `{TODAY()}` / `{record.id}` → the fix was correcting the authoring skill + a publish-gate lint that rejects the wrong shape (cloud#688), **not** a `cfg.fields ?? cfg.fieldValues` runtime alias (framework#2419, rejected). Strengthens #5. --- @@ -80,7 +80,7 @@ Other scripts: `objectui:bump` (pull only), `objectui:build`, `objectui:clean`. ## Multi-agent working discipline This repo is worked on by **multiple agents in parallel**. **Use one git -worktree per agent/task** (`git worktree add ../framework- -b `; +worktree per agent/task** (`git worktree add ../objectstack- -b `; run `pnpm install` in the new tree) so file systems are physically isolated — this is mandatory, not a preference (Prime Directive #11), and a PreToolUse hook blocks edits made while on the shared `main` branch. Working in the shared `main` diff --git a/CHANGELOG.md b/CHANGELOG.md index cbd85a5236..09f2eefd29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -643,7 +643,7 @@ required for the new Public Forms endpoints to apply guest defaults. ### Removed — Cloud control plane moved to private `objectstack-ai/cloud` repo -The framework repository (`objectstack-ai/framework`) is now open-core only. +The framework repository (`objectstack-ai/objectstack`) is now open-core only. The hosted Cloud control plane — `apps/cloud` and `@objectstack/service-cloud` — has been extracted to a separate, private repository (`objectstack-ai/cloud`). Production traffic on @@ -1247,7 +1247,7 @@ Followup to M10.30a. Walked every Setup menu in a real tenant; produced verdict - **Client Hono integration test timeout** — Fixed `afterAll` hook timeout in `client.hono.test.ts` by racing `kernel.shutdown()` against a 10s deadline. The shutdown can hang when pino's worker-thread flush callback never fires in CI, so the race ensures the hook completes within the 30s vitest limit. - **CI: Replace `pnpm/action-setup@v6` with corepack** — Switched all GitHub Actions workflows (`ci.yml`, `lint.yml`, `release.yml`, `validate-deps.yml`, `pr-automation.yml`) from `pnpm/action-setup@v6` to `corepack enable` to fix persistent `ERR_PNPM_BROKEN_LOCKFILE` errors. Corepack reads the exact `packageManager` field from `package.json` (including SHA verification), ensuring the correct pnpm version is used in CI. Also bumped pnpm store cache keys to v3 and added a pnpm version verification step. - **Broken pnpm lockfile** — Regenerated `pnpm-lock.yaml` from scratch to fix `ERR_PNPM_BROKEN_LOCKFILE` ("expected a single document in the stream, but found more") that was causing all CI jobs to fail. The previous merge of PR #1117 only included workflow cache key changes but did not carry over the regenerated lockfile. -- **service-ai: Fix navigation item labels using deprecated i18n object format** — Replaced `{ key, defaultValue }` i18n objects with plain string labels in `AIServicePlugin`'s Setup App navigation contributions, completing the `I18nLabelSchema` migration from [#1054](https://github.com/objectstack-ai/framework/issues/1054). +- **service-ai: Fix navigation item labels using deprecated i18n object format** — Replaced `{ key, defaultValue }` i18n objects with plain string labels in `AIServicePlugin`'s Setup App navigation contributions, completing the `I18nLabelSchema` migration from [#1054](https://github.com/objectstack-ai/objectstack/issues/1054). ### Added - **MCP Runtime Server Plugin (`plugin-mcp-server`)** — New kernel plugin that exposes ObjectStack @@ -1327,7 +1327,7 @@ Followup to M10.30a. Walked every Setup menu in a real tenant; produced verdict - Supports custom model selection via `AI_MODEL` environment variable - Consistent behavior across CLI, Vercel, Docker, and custom deployments - Dynamic import failures are handled as soft errors with automatic fallback - ([#1067](https://github.com/objectstack-ai/framework/issues/1067)) + ([#1067](https://github.com/objectstack-ai/objectstack/issues/1067)) - **Metadata Versioning & History** — Comprehensive version history tracking and rollback capabilities for metadata items. Key features include: @@ -1359,7 +1359,7 @@ Followup to M10.30a. Walked every Setup menu in a real tenant; produced verdict union type has been replaced with `z.string()`. i18n translation keys will be auto-generated by the framework at registration time; developers only need to provide the default-language string value. Translations are managed through translation files, not inline i18n objects. - ([#1054](https://github.com/objectstack-ai/framework/issues/1054)) + ([#1054](https://github.com/objectstack-ai/objectstack/issues/1054)) **Migration:** Replace any `label: { key: '...', defaultValue: 'X' }` with `label: 'X'`. Existing plain-string labels require no changes. @@ -1371,7 +1371,7 @@ Followup to M10.30a. Walked every Setup menu in a real tenant; produced verdict - `@objectstack/plugin-audit` — navigation item labels ### Documentation -- **README rewrite** — Rewrote `README.md` to accurately reflect the `objectstack-ai/framework` +- **README rewrite** — Rewrote `README.md` to accurately reflect the `objectstack-ai/objectstack` repository. Updates include: corrected title ("ObjectStack Framework"), updated badges (v4.0.1, 6,507 tests passing), fixed stale clone URL (`spec.git` → `framework.git`), added all missing packages (`driver-sql`, `driver-turso`, `plugin-audit`, `plugin-setup`, diff --git a/README.md b/README.md index 88580e3901..a115d90962 100644 --- a/README.md +++ b/README.md @@ -186,8 +186,8 @@ See [Self-Hosted Deployment](https://objectstack.ai/docs/deployment/self-hosting ## Working on the framework itself ```bash -git clone https://github.com/objectstack-ai/framework.git -cd framework +git clone https://github.com/objectstack-ai/objectstack.git +cd objectstack pnpm install # Node 18+, pnpm 8+ (corepack enable) pnpm build # build all packages pnpm dev # run the showcase example (REST + Console on :3000) @@ -374,7 +374,7 @@ Run locally: `pnpm docs:dev` ## Community - ⭐ **Star this repo** if ObjectStack is useful — it helps others find it. -- 🐛 Questions, bugs, or feature requests → [open an issue](https://github.com/objectstack-ai/framework/issues). +- 🐛 Questions, bugs, or feature requests → [open an issue](https://github.com/objectstack-ai/objectstack/issues). - 🤝 Want to contribute? See [CONTRIBUTING.md](./CONTRIBUTING.md). ## License diff --git a/content/blog/context-window-is-the-constraint.mdx b/content/blog/context-window-is-the-constraint.mdx index 44d022dd20..b96e4af876 100644 --- a/content/blog/context-window-is-the-constraint.mdx +++ b/content/blog/context-window-is-the-constraint.mdx @@ -32,7 +32,7 @@ truth is that "how many lines would the traditional version have been?" is a counterfactual nobody can measure — because that version doesn't exist. Here's what *can* be measured. This is a real, working CRM in this repository — -[`examples/app-crm`](https://github.com/objectstack-ai/framework/tree/main/examples/app-crm): +[`examples/app-crm`](https://github.com/objectstack-ai/objectstack/tree/main/examples/app-crm): accounts, contacts, leads, opportunities with line items, activities. Views, a dashboard, a lead-conversion flow, permission sets, an action, translations. @@ -148,4 +148,4 @@ Small enough to fit. Strict enough to be worth fitting. That's the whole bet. **Try the measurement yourself:** `npm create objectstack@latest my-app`, build something with your agent, then count the lines. If the whole app doesn't fit in your agent's context window, we'd like to hear about it — that's a bug in the -target format, and the format is [open](https://github.com/objectstack-ai/framework). +target format, and the format is [open](https://github.com/objectstack-ai/objectstack). diff --git a/content/docs/ai/agents.mdx b/content/docs/ai/agents.mdx index dabbca6a9d..a776328921 100644 --- a/content/docs/ai/agents.mdx +++ b/content/docs/ai/agents.mdx @@ -25,7 +25,7 @@ framework, which uses `@objectstack/mcp` (BYO-AI) instead. The next two sections describe that ObjectOS runtime. -Per [ADR-0063](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0063-two-kernel-agents-skills-are-the-extension-primitive.md) +Per [ADR-0063](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0063-two-kernel-agents-skills-are-the-extension-primitive.md) the ObjectOS runtime ships **exactly two** platform agents, bound by the *surface* the user is in — the user never picks from a roster: @@ -117,7 +117,7 @@ your Actions / Flows / queries; it then attaches to `ask`. Every skill declares `surface: 'ask' | 'build' | 'both'`, and an agent's tool set is the **union of its surface-compatible skills' tools** — there is no global fall-through, so a skill reaches an agent only when their surfaces match -([ADR-0064](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0064-tool-scoping-to-agent.md)). +([ADR-0064](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0064-tool-scoping-to-agent.md)). Both `surface:'ask'` and `surface:'build'` skills run only where the in-UI AI runtime exists — **ObjectOS**. On the open framework there is no in-product agent to attach them to; author capability diff --git a/content/docs/ai/connect-mcp.mdx b/content/docs/ai/connect-mcp.mdx index 3f74dc6399..5e8c95baa5 100644 --- a/content/docs/ai/connect-mcp.mdx +++ b/content/docs/ai/connect-mcp.mdx @@ -149,7 +149,7 @@ This is the default policy, not a ceiling. A finer, **metadata-declared** exposu config (opt objects out, curate the exposed set, promote a few high-value actions to typed per-action tools) is the planned next step, consistent with ADR-0097's "what is exposed should itself be authorable" — tracked in -[#3167](https://github.com/objectstack-ai/framework/issues/3167). +[#3167](https://github.com/objectstack-ai/objectstack/issues/3167). ## The security model diff --git a/content/docs/ai/skills-reference.mdx b/content/docs/ai/skills-reference.mdx index 09e914edd6..449df50bec 100644 --- a/content/docs/ai/skills-reference.mdx +++ b/content/docs/ai/skills-reference.mdx @@ -15,7 +15,7 @@ ObjectStack ships a set of **domain-specific skills** that teach AI assistants ( ## Installing skills -Skills install into a project from the [skills.sh](https://skills.sh) registry, reading the `skills/` directory of the [`objectstack-ai/framework`](https://github.com/objectstack-ai/framework) repository. +Skills install into a project from the [skills.sh](https://skills.sh) registry, reading the `skills/` directory of the [`objectstack-ai/objectstack`](https://github.com/objectstack-ai/objectstack) repository. **New projects — installed automatically.** `create-objectstack` runs the install step for you during scaffolding: @@ -26,10 +26,10 @@ npm create objectstack@latest my-app **Existing projects — install the whole bundle:** ```bash -npx skills add objectstack-ai/framework/skills --all +npx skills add objectstack-ai/objectstack/skills --all ``` -Run the same command again at any time to pull the latest versions — `--all` is idempotent, so updating is one command regardless of how many skills the bundle contains. To choose which skills to add instead of the full set, run `npx skills add objectstack-ai/framework/skills` without `--all`. (The `/skills` subpath scopes discovery to the published catalog — always keep it in the command.) +Run the same command again at any time to pull the latest versions — `--all` is idempotent, so updating is one command regardless of how many skills the bundle contains. To choose which skills to add instead of the full set, run `npx skills add objectstack-ai/objectstack/skills` without `--all`. (The `/skills` subpath scopes discovery to the published catalog — always keep it in the command.) Skills are versioned as **one bundle**. You do not track or update each skill individually — `--all` always installs the matching set for the `@objectstack/spec` version in your project. diff --git a/content/docs/ai/skills.mdx b/content/docs/ai/skills.mdx index d647eda205..055f7857be 100644 --- a/content/docs/ai/skills.mdx +++ b/content/docs/ai/skills.mdx @@ -27,14 +27,14 @@ See [Agents](/docs/ai/agents#you-extend-the-platform-with-skills-not-agents) for ## Installing skills -Skills are distributed through the [skills.sh](https://skills.sh) registry from the [`objectstack-ai/framework`](https://github.com/objectstack-ai/framework) repository's `skills/` directory. +Skills are distributed through the [skills.sh](https://skills.sh) registry from the [`objectstack-ai/objectstack`](https://github.com/objectstack-ai/objectstack) repository's `skills/` directory. ```bash # New project — create-objectstack installs skills automatically npm create objectstack@latest my-app # Existing project — add the whole bundle (re-run to update) -npx skills add objectstack-ai/framework/skills --all +npx skills add objectstack-ai/objectstack/skills --all ``` The bundle is versioned and updated as **one unit** — `--all` is idempotent, so you never track skills individually. For the full per-skill catalog and install options, see the [AI Skills Reference](/docs/ai/skills-reference#installing-skills). diff --git a/content/docs/api/client-sdk.mdx b/content/docs/api/client-sdk.mdx index c471c30305..c7094e5332 100644 --- a/content/docs/api/client-sdk.mdx +++ b/content/docs/api/client-sdk.mdx @@ -104,7 +104,7 @@ if (discovery.services?.auth?.enabled) { ## Protocol Coverage -The `@objectstack/client` SDK aims to implement the ObjectStack API protocol specification. The core namespaces are listed below; the client also exposes additional namespaces (`approvals`, `organizations`, `oauth`, `projects`/environments) — see [`index.ts`](https://github.com/objectstack-ai/framework/blob/main/packages/client/src/index.ts) for the full surface: +The `@objectstack/client` SDK aims to implement the ObjectStack API protocol specification. The core namespaces are listed below; the client also exposes additional namespaces (`approvals`, `organizations`, `oauth`, `projects`/environments) — see [`index.ts`](https://github.com/objectstack-ai/objectstack/blob/main/packages/client/src/index.ts) for the full surface: | Namespace | Status | Methods | Purpose | |:----------|:------:|:--------|:--------| @@ -125,7 +125,7 @@ The `@objectstack/client` SDK aims to implement the ObjectStack API protocol spe | **ai** | ✅ | 3 | AI services (NLQ, suggest, insights) | -**Protocol compliance & verification**: See [`CLIENT_SPEC_COMPLIANCE.md`](https://github.com/objectstack-ai/framework/blob/main/packages/client/CLIENT_SPEC_COMPLIANCE.md) for detailed method-by-method verification and [`CLIENT_SERVER_INTEGRATION_TESTS.md`](https://github.com/objectstack-ai/framework/blob/main/packages/client/CLIENT_SERVER_INTEGRATION_TESTS.md) for comprehensive integration test specifications. +**Protocol compliance & verification**: See [`CLIENT_SPEC_COMPLIANCE.md`](https://github.com/objectstack-ai/objectstack/blob/main/packages/client/CLIENT_SPEC_COMPLIANCE.md) for detailed method-by-method verification and [`CLIENT_SERVER_INTEGRATION_TESTS.md`](https://github.com/objectstack-ai/objectstack/blob/main/packages/client/CLIENT_SERVER_INTEGRATION_TESTS.md) for comprehensive integration test specifications. --- @@ -555,9 +555,9 @@ Integration tests verify end-to-end communication with a live ObjectStack server For detailed information about the client's protocol implementation: -- **[Protocol Compliance Matrix](https://github.com/objectstack-ai/framework/blob/main/packages/client/CLIENT_SPEC_COMPLIANCE.md)** — Method-by-method verification of all API methods across 13 namespaces -- **[Integration Test Specifications](https://github.com/objectstack-ai/framework/blob/main/packages/client/CLIENT_SERVER_INTEGRATION_TESTS.md)** — Comprehensive test cases for client-server communication -- **[Package README](https://github.com/objectstack-ai/framework/blob/main/packages/client/README.md)** — Developer navigation and API reference +- **[Protocol Compliance Matrix](https://github.com/objectstack-ai/objectstack/blob/main/packages/client/CLIENT_SPEC_COMPLIANCE.md)** — Method-by-method verification of all API methods across 13 namespaces +- **[Integration Test Specifications](https://github.com/objectstack-ai/objectstack/blob/main/packages/client/CLIENT_SERVER_INTEGRATION_TESTS.md)** — Comprehensive test cases for client-server communication +- **[Package README](https://github.com/objectstack-ai/objectstack/blob/main/packages/client/README.md)** — Developer navigation and API reference --- diff --git a/content/docs/automation/approvals.mdx b/content/docs/automation/approvals.mdx index 47eab51636..9133560ae6 100644 --- a/content/docs/automation/approvals.mdx +++ b/content/docs/automation/approvals.mdx @@ -404,8 +404,8 @@ Separating *who configures* from *who approves* from *as whom it runs* is the sa ## Runnable example -- Flows: [`examples/app-showcase/src/automation/flows`](https://github.com/objectstack-ai/framework/tree/main/examples/app-showcase/src/automation/flows). -- Approval schema: [`packages/spec/src/automation/approval.zod.ts`](https://github.com/objectstack-ai/framework/blob/main/packages/spec/src/automation/approval.zod.ts). +- Flows: [`examples/app-showcase/src/automation/flows`](https://github.com/objectstack-ai/objectstack/tree/main/examples/app-showcase/src/automation/flows). +- Approval schema: [`packages/spec/src/automation/approval.zod.ts`](https://github.com/objectstack-ai/objectstack/blob/main/packages/spec/src/automation/approval.zod.ts). ## Anti-patterns diff --git a/content/docs/automation/flows.mdx b/content/docs/automation/flows.mdx index 26de02c16a..5b670d7309 100644 --- a/content/docs/automation/flows.mdx +++ b/content/docs/automation/flows.mdx @@ -382,7 +382,7 @@ This is the **aggregating-node** pattern (Camunda multi-instance / Step Function `Map`): the run keeps a single program counter and pauses once, so it needs no concurrent-token machinery. Durable pause **inside** a hand-drawn `parallel` branch or `loop` iteration — where two unrelated positions pause independently — -is a separate, larger capability ([ADR-0039](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0039-token-scope-tree-execution.md) +is a separate, larger capability ([ADR-0039](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0039-token-scope-tree-execution.md) Track B); the aggregating node covers the common parallel/batch-approval demand without it. Worked example: `showcase_invoice_signoff` in the showcase app. @@ -413,7 +413,7 @@ The run holds a **single program counter** the whole time: only one item's approval is open at any moment; when it is decided the engine **re-enters** the map node to start the next item. v1 is sequential and fail-fast (the first item whose subflow fails fails the map). Concurrent fan-out (all items at once) is the -larger [ADR-0039](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0039-token-scope-tree-execution.md) +larger [ADR-0039](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0039-token-scope-tree-execution.md) Track B work. Worked example: `showcase_release_signoff` → `showcase_one_task_signoff`. ### Nested pause — pausing inside a subflow diff --git a/content/docs/concepts/metadata-driven.mdx b/content/docs/concepts/metadata-driven.mdx index 26b871be8c..85e852d6a0 100644 --- a/content/docs/concepts/metadata-driven.mdx +++ b/content/docs/concepts/metadata-driven.mdx @@ -210,7 +210,7 @@ React Flutter A simple CRUD feature that takes ~300 lines of hand-written code is ~30 lines of metadata. But per-feature ratios are the least interesting part. Here is the measurement that matters — the CRM bundled in this repo -([`examples/app-crm`](https://github.com/objectstack-ai/framework/tree/main/examples/app-crm): +([`examples/app-crm`](https://github.com/objectstack-ai/objectstack/tree/main/examples/app-crm): six objects, views, a dashboard, a lead-conversion flow, permission sets, actions, translations): diff --git a/content/docs/concepts/metadata-lifecycle.mdx b/content/docs/concepts/metadata-lifecycle.mdx index ce36ba37d2..4bcadaedce 100644 --- a/content/docs/concepts/metadata-lifecycle.mdx +++ b/content/docs/concepts/metadata-lifecycle.mdx @@ -5,7 +5,7 @@ description: How metadata flows through Repository → Change Log → Cache → # Metadata Lifecycle & HMR -This page documents the metadata data path introduced by [ADR-0008](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0008-metadata-repository-and-change-log.md) and refined by [ADR-0005](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0005-metadata-customization-overlay.md). It is the canonical event stream that powers Studio Hot Module Replacement (HMR), REST writes, and future cloud editing. +This page documents the metadata data path introduced by [ADR-0008](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0008-metadata-repository-and-change-log.md) and refined by [ADR-0005](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0005-metadata-customization-overlay.md). It is the canonical event stream that powers Studio Hot Module Replacement (HMR), REST writes, and future cloud editing. **TL;DR** — Every write goes through a single `MetadataRepository.put()` call. The repository appends to a change log, emits a watch event with a monotonic `seq`, and broadcasts over SSE to the Studio UI. The Studio's `useMetadataHmr` hook displays the latest `seq` in the status badge and re-fetches affected views. @@ -49,12 +49,12 @@ Reads walk top-to-bottom: the first non-null layer wins. Writes always route to | Primitive | Package | Purpose | | :--- | :--- | :--- | -| **Repository** | `@objectstack/metadata-core` | CRUD + watch interface over a single metadata source. `InMemoryRepository` and `LayeredRepository` ship from `@objectstack/metadata-core`; `FileSystemRepository` from `@objectstack/metadata-fs`; `SysMetadataRepository` from `@objectstack/metadata-protocol` (re-exported by `@objectstack/objectql` for back-compat, per [ADR-0076](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0076-objectql-core-tiering.md)). | +| **Repository** | `@objectstack/metadata-core` | CRUD + watch interface over a single metadata source. `InMemoryRepository` and `LayeredRepository` ship from `@objectstack/metadata-core`; `FileSystemRepository` from `@objectstack/metadata-fs`; `SysMetadataRepository` from `@objectstack/metadata-protocol` (re-exported by `@objectstack/objectql` for back-compat, per [ADR-0076](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0076-objectql-core-tiering.md)). | | **Change Log** | `@objectstack/metadata-core` | Append-only log of every mutation, tagged with a monotonic `seq`. Watchers can replay from any `since`. | | **Cache** | `@objectstack/metadata-core` | In-memory snapshot of the registry, keyed by `MetaRef`. Invalidated by change-log events. | -| **Registry** | *(per consumer)* | Not a single package — each consumer owns a typed projection over the cache (e.g. `SchemaRegistry` in `@objectstack/objectql`), per [ADR-0008 §2.9](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0008-metadata-repository-and-change-log.md#29-registry-layer). | +| **Registry** | *(per consumer)* | Not a single package — each consumer owns a typed projection over the cache (e.g. `SchemaRegistry` in `@objectstack/objectql`), per [ADR-0008 §2.9](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0008-metadata-repository-and-change-log.md#29-registry-layer). | -`MetaRef = (type, name, org)`. As of [ADR-0008 §0 amendment (2026-04-13)](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0008-metadata-repository-and-change-log.md#0-2026-04-13-amendment--drop-project-and-branch-from-metaref), `project` and `branch` are removed from the runtime tuple. Project survives only as an artifact-packaging concept on the `objectstack.json` envelope; branching is left to Git. +`MetaRef = (type, name, org)`. As of [ADR-0008 §0 amendment (2026-04-13)](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0008-metadata-repository-and-change-log.md#0-2026-04-13-amendment--drop-project-and-branch-from-metaref), `project` and `branch` are removed from the runtime tuple. Project survives only as an artifact-packaging concept on the `objectstack.json` envelope; branching is left to Git. --- @@ -84,7 +84,7 @@ first step of any Studio/API authoring action is to target a *writable* package "base"): a create/update aimed at a read-only package is rejected, and the author is asked to pick or create a writable base first. New objects, fields, views, and flows are namespaced into that package — which is exactly what `os package publish` -later ships. See [ADR-0070](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0070-package-first-authoring.md). +later ships. See [ADR-0070](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0070-package-first-authoring.md). > Note: "package" here is the runtime **authoring base** (a `package_id`-bearing > container of metadata), distinct from the npm `@objectstack/*` packages listed in @@ -103,9 +103,9 @@ In shared-database multi-tenancy, **most metadata types must not be per-org cust | `object`, `field` | ❌ | Defines the table schema. Overriding would break existing data. | | `datasource` | ❌ | Connection strings; multi-tenant isolation is enforced at a higher layer. | -There is no `workflow` metadata type (per [ADR-0020](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0020-state-machine-converge-and-enforce.md), record state machines are a `state_machine` validation). The runtime gate is implemented in `OVERLAY_ALLOWED_TYPES` (derived from the registry) and enforced by `SysMetadataRepository.put()`. Denied types return `403 not_overridable`. +There is no `workflow` metadata type (per [ADR-0020](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0020-state-machine-converge-and-enforce.md), record state machines are a `state_machine` validation). The runtime gate is implemented in `OVERLAY_ALLOWED_TYPES` (derived from the registry) and enforced by `SysMetadataRepository.put()`. Denied types return `403 not_overridable`. -See [ADR-0005](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0005-metadata-customization-overlay.md) for the full design and amendments. +See [ADR-0005](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0005-metadata-customization-overlay.md) for the full design and amendments. --- @@ -127,9 +127,9 @@ The hash is `sha256:` + 64-hex of a canonical (sorted-keys, no-undefined) JSON s ## Cross-references -- [ADR-0005: Metadata customization overlay](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0005-metadata-customization-overlay.md) — overlay semantics, whitelist, conflict rules. -- [ADR-0008 §0 amendment (2026-04): project/branch removal](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0008-metadata-repository-and-change-log.md#0-2026-04-13-amendment--drop-project-and-branch-from-metaref) — why `MetaRef.project` and `MetaRef.branch` are dead. -- [ADR-0008: Metadata Repository & Change Log](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0008-metadata-repository-and-change-log.md) — the four-primitive architecture. +- [ADR-0005: Metadata customization overlay](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0005-metadata-customization-overlay.md) — overlay semantics, whitelist, conflict rules. +- [ADR-0008 §0 amendment (2026-04): project/branch removal](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0008-metadata-repository-and-change-log.md#0-2026-04-13-amendment--drop-project-and-branch-from-metaref) — why `MetaRef.project` and `MetaRef.branch` are dead. +- [ADR-0008: Metadata Repository & Change Log](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0008-metadata-repository-and-change-log.md) — the four-primitive architecture. - [IMetadataService Contract](/docs/kernel/contracts/metadata-service) — the runtime API plugins call. - [North Star](/docs/concepts/north-star) — the product shape these primitives serve. diff --git a/content/docs/data-modeling/analytics.mdx b/content/docs/data-modeling/analytics.mdx index 9146be1126..b5528d5cd0 100644 --- a/content/docs/data-modeling/analytics.mdx +++ b/content/docs/data-modeling/analytics.mdx @@ -5,7 +5,7 @@ description: The dataset semantic layer (ADR-0021) — define a metric once, bin # Analytics Datasets -> **Related ADR:** [ADR-0021 — Analytics: one semantic `dataset` layer](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0021-analytics-dataset-semantic-layer.md) +> **Related ADR:** [ADR-0021 — Analytics: one semantic `dataset` layer](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0021-analytics-dataset-semantic-layer.md) A **dataset** is a named, reusable analytical definition — a base object, the relationships to include, and the declared **dimensions** (groupable axes) and diff --git a/content/docs/data-modeling/formulas.mdx b/content/docs/data-modeling/formulas.mdx index 45749e8c5f..104bfdb3b2 100644 --- a/content/docs/data-modeling/formulas.mdx +++ b/content/docs/data-modeling/formulas.mdx @@ -183,7 +183,7 @@ All functions are pure given a pinned `now`, which is what makes | `min(a, b)` / `max(a, b)` | dyn | Smaller / larger operand (numeric comparison) | Add new helpers in -[`packages/formula/src/stdlib.ts`](https://github.com/objectstack-ai/framework/blob/main/packages/formula/src/stdlib.ts). +[`packages/formula/src/stdlib.ts`](https://github.com/objectstack-ai/objectstack/blob/main/packages/formula/src/stdlib.ts). Keep them pure, dependency-free, and AI-readable. ### Variable scope @@ -548,5 +548,5 @@ agent-callable `validate_expression` tool), so an expression is checked before i - [Field Metadata](/docs/data-modeling/fields) — declaring `type: 'formula'` fields - [Seed Data](/docs/data-modeling/seed-data) — using `cel\`...\`` for dynamic install-time values - [Hook Bodies](/docs/automation/hook-bodies) — when to use a JS hook vs a CEL `condition` -- [`packages/formula/`](https://github.com/objectstack-ai/framework/tree/main/packages/formula) — engine + stdlib source +- [`packages/formula/`](https://github.com/objectstack-ai/objectstack/tree/main/packages/formula) — engine + stdlib source - [North Star](/docs/concepts/north-star) — architecture principles (typed metadata over custom DSLs) diff --git a/content/docs/deployment/environment-variables.mdx b/content/docs/deployment/environment-variables.mdx index 6c8cf36c5a..5a78ee27c9 100644 --- a/content/docs/deployment/environment-variables.mdx +++ b/content/docs/deployment/environment-variables.mdx @@ -282,7 +282,7 @@ that bypassed write hooks, `rebuildSearchCompanion` (from |:---|:---|:---|:---| | `OS_MARKETPLACE_CACHE` | enum | `on` | `off` disables the in-memory marketplace listing cache. | | `OS_MARKETPLACE_PUBLIC_BASE_URL` | url | — | Public base URL of the marketplace registry (proxied from this runtime when set). | -| `OS_METADATA_WRITABLE` | csv | — (none) | Comma-separated metadata type names (e.g. `hook,validation`) granted a runtime escape hatch that treats them as `allowOrgOverride: true`, letting artifact-backed items of those protected types be overridden per-org outside their static registry declaration. See [ADR-0005](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0005-metadata-customization-overlay.md). | +| `OS_METADATA_WRITABLE` | csv | — (none) | Comma-separated metadata type names (e.g. `hook,validation`) granted a runtime escape hatch that treats them as `allowOrgOverride: true`, letting artifact-backed items of those protected types be overridden per-org outside their static registry declaration. See [ADR-0005](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0005-metadata-customization-overlay.md). | --- diff --git a/content/docs/deployment/production-readiness.mdx b/content/docs/deployment/production-readiness.mdx index 7d6edf4378..d56754a147 100644 --- a/content/docs/deployment/production-readiness.mdx +++ b/content/docs/deployment/production-readiness.mdx @@ -16,12 +16,12 @@ defaults, adapter recipes, go-live checklist) follow the deep-dive links. | Concern | Default | Deep dive | | :--- | :--- | :--- | -| Security response headers (CSP / XCTO / X-Frame-Options / …) | **On** | [HARDENING.md](https://github.com/objectstack-ai/framework/blob/main/docs/HARDENING.md) | +| Security response headers (CSP / XCTO / X-Frame-Options / …) | **On** | [HARDENING.md](https://github.com/objectstack-ai/objectstack/blob/main/docs/HARDENING.md) | | HSTS | Off (opt-in once TLS is confirmed) | HARDENING.md | | Rate limiting (token bucket) | Off (opt-in via adapter) | HARDENING.md | | CSRF | Adapter-layer (bearer-auth = N/A) | HARDENING.md | | Auth / session / JWT lifecycle | On via `@objectstack/plugin-auth` (better-auth) | HARDENING.md | -| Metrics (counter / histogram / gauge) | Noop (no adapter) | [OBSERVABILITY.md](https://github.com/objectstack-ai/framework/blob/main/docs/OBSERVABILITY.md) | +| Metrics (counter / histogram / gauge) | Noop (no adapter) | [OBSERVABILITY.md](https://github.com/objectstack-ai/objectstack/blob/main/docs/OBSERVABILITY.md) | | Error reporting (5xx only) | Noop (no adapter) | OBSERVABILITY.md | | Request id (`X-Request-Id`) | Auto-generated when enabled | OBSERVABILITY.md | | W3C Trace Context (`traceparent`) | Parser exported; SDK wiring is host's job | OBSERVABILITY.md | @@ -63,7 +63,7 @@ That's it — every route the dispatcher mounts now: Rate limiting is the one piece you wire at the adapter layer (Fastify preHandler, Hono middleware, etc.) because that's where you have reliable access to the caller's IP and authenticated identity. See -the [HARDENING.md recipes](https://github.com/objectstack-ai/framework/blob/main/docs/HARDENING.md#rate-limiting). +the [HARDENING.md recipes](https://github.com/objectstack-ai/objectstack/blob/main/docs/HARDENING.md#rate-limiting). ## Go-live checklist diff --git a/content/docs/deployment/self-hosting.mdx b/content/docs/deployment/self-hosting.mdx index fbf393c27b..692751c9b0 100644 --- a/content/docs/deployment/self-hosting.mdx +++ b/content/docs/deployment/self-hosting.mdx @@ -117,7 +117,7 @@ straight from release storage instead of a mount.) For a self-contained deployable image, extend it. The Dockerfile below (plus the compose stack in the next section and a `.dockerignore`) ships ready-made in the project scaffold — -[`create-objectstack`](https://github.com/objectstack-ai/framework/tree/main/packages/create-objectstack/src/templates/blank) +[`create-objectstack`](https://github.com/objectstack-ai/objectstack/tree/main/packages/create-objectstack/src/templates/blank) (`npm create objectstack`) writes all three into your new project's root. ```dockerfile title="Dockerfile" diff --git a/content/docs/deployment/tenancy-modes.mdx b/content/docs/deployment/tenancy-modes.mdx index 5a16ccb74b..ace8da8aa9 100644 --- a/content/docs/deployment/tenancy-modes.mdx +++ b/content/docs/deployment/tenancy-modes.mdx @@ -10,7 +10,7 @@ whether organization boundaries isolate data, how new users are placed into an organization, and which organization-management UI is available. This page describes the runtime contract introduced by -[ADR-0093](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0093-tenancy-mode-and-membership-lifecycle.md). +[ADR-0093](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0093-tenancy-mode-and-membership-lifecycle.md). --- diff --git a/content/docs/getting-started/build-with-claude-code.mdx b/content/docs/getting-started/build-with-claude-code.mdx index 942b017eba..e31244390c 100644 --- a/content/docs/getting-started/build-with-claude-code.mdx +++ b/content/docs/getting-started/build-with-claude-code.mdx @@ -56,7 +56,7 @@ The scaffolder does more than copy files. It: - derives a **namespace** from the name (`support-desk` → `support_desk`), so every object you create is named `support_desk_*`; - installs dependencies; -- runs `npx skills add objectstack-ai/framework/skills --all` to install the **AI skills +- runs `npx skills add objectstack-ai/objectstack/skills --all` to install the **AI skills bundle**; - writes an **`AGENTS.md`** (and `.github/copilot-instructions.md`) that teach your coding agent the project layout, the naming rules, and — critically — *to run @@ -335,7 +335,7 @@ Two habits keep this reliable as the app grows: translations all go through the same `npm run validate` — the agent should run it after each change, exactly as `AGENTS.md` instructs. - **Keep the skills current.** After upgrading `@objectstack/spec`, re-run - `npx skills add objectstack-ai/framework/skills --all` so the agent authors + `npx skills add objectstack-ai/objectstack/skills --all` so the agent authors against the schemas you actually run. The full catalog is documented in the [AI Skills Reference](/docs/ai/skills-reference). diff --git a/content/docs/getting-started/examples.mdx b/content/docs/getting-started/examples.mdx index 692b1c76be..ddcd838101 100644 --- a/content/docs/getting-started/examples.mdx +++ b/content/docs/getting-started/examples.mdx @@ -49,8 +49,8 @@ metadata, run `os validate`, and verify in the Console — the loop in The fastest way to explore all examples at once: ```bash -git clone https://github.com/objectstack-ai/framework.git -cd framework +git clone https://github.com/objectstack-ai/objectstack.git +cd objectstack pnpm install pnpm dev:showcase # or: pnpm dev:todo / pnpm dev:crm ``` diff --git a/content/docs/getting-started/index.mdx b/content/docs/getting-started/index.mdx index 1e89a346b7..bc8b6b36db 100644 --- a/content/docs/getting-started/index.mdx +++ b/content/docs/getting-started/index.mdx @@ -163,7 +163,7 @@ scaffolds a project with its own TypeScript toolchain and npm scripts. **pnpm and TypeScript versions only matter for the framework monorepo.** If you -clone [`objectstack-ai/framework`](https://github.com/objectstack-ai/framework) +clone [`objectstack-ai/objectstack`](https://github.com/objectstack-ai/objectstack) itself (to contribute, or to run the bundled examples), you'll additionally need pnpm 8+ (`corepack enable` pulls the pinned 10.x) — and the repo builds against TypeScript 6.x. diff --git a/content/docs/getting-started/quick-reference.mdx b/content/docs/getting-started/quick-reference.mdx index 5b1ae711a2..1b726ea9e8 100644 --- a/content/docs/getting-started/quick-reference.mdx +++ b/content/docs/getting-started/quick-reference.mdx @@ -304,4 +304,4 @@ import type { View } from '@objectstack/spec/ui'; - [Protocol Reference Index](/docs/references) - Full protocol documentation - [Data Modeling](/docs/data-modeling) - Deep dive into data modeling - [UI Engine](/docs/ui) - UI development guide -- [Contributing Guide](https://github.com/objectstack-ai/framework/blob/main/CONTRIBUTING.md) - How to contribute to protocols +- [Contributing Guide](https://github.com/objectstack-ai/objectstack/blob/main/CONTRIBUTING.md) - How to contribute to protocols diff --git a/content/docs/getting-started/your-first-project.mdx b/content/docs/getting-started/your-first-project.mdx index 79a9cc8d31..2d3d546768 100644 --- a/content/docs/getting-started/your-first-project.mdx +++ b/content/docs/getting-started/your-first-project.mdx @@ -44,7 +44,7 @@ The scaffolder (`create-objectstack`) does four things: renamed to carry that prefix (`my_app_note`), which is what `os validate` later enforces. 2. **Installs dependencies** (pnpm if available, otherwise npm). -3. **Installs the AI skills bundle** (`npx skills add objectstack-ai/framework/skills --all`) +3. **Installs the AI skills bundle** (`npx skills add objectstack-ai/objectstack/skills --all`) so a coding agent is productive in the project from the first prompt. 4. **Writes `AGENTS.md`** (and `.github/copilot-instructions.md`) with the project conventions — including the rule to run `npm run validate` after @@ -279,7 +279,7 @@ automation) — the agent loads the matching skill per task. The full loop, and per-domain prompt catalog, is on [Build with Claude Code](/docs/getting-started/build-with-claude-code#beyond-the-first-app--one-skill-per-metadata-domain). If you upgrade `@objectstack/spec` later, re-run -`npx skills add objectstack-ai/framework/skills --all` to keep the agent in +`npx skills add objectstack-ai/objectstack/skills --all` to keep the agent in sync with the schemas you run. ## Next steps diff --git a/content/docs/kernel/services-checklist.mdx b/content/docs/kernel/services-checklist.mdx index 85fc26a31a..d4276eee66 100644 --- a/content/docs/kernel/services-checklist.mdx +++ b/content/docs/kernel/services-checklist.mdx @@ -427,7 +427,7 @@ When a plugin registers a service, the discovery endpoint automatically updates: description="Full protocol implementation matrix" /> diff --git a/content/docs/permissions/access-recipes.mdx b/content/docs/permissions/access-recipes.mdx index 924cd53b7f..bbae0b22c6 100644 --- a/content/docs/permissions/access-recipes.mdx +++ b/content/docs/permissions/access-recipes.mdx @@ -62,8 +62,8 @@ Keeping capability, assignment and requirement decoupled means resources stay st ## Runnable example -- Built-in permission sets: [`default-permission-sets.ts`](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/plugin-security/src/objects/default-permission-sets.ts) (`member_default` shows owner-scoped RLS; tenant isolation is now the Layer 0 tenant wall in `tenant-layer.ts`, ADR-0095 D1). -- Security objects: [`packages/plugins/plugin-security/src/objects`](https://github.com/objectstack-ai/framework/tree/main/packages/plugins/plugin-security/src/objects). +- Built-in permission sets: [`default-permission-sets.ts`](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/plugin-security/src/objects/default-permission-sets.ts) (`member_default` shows owner-scoped RLS; tenant isolation is now the Layer 0 tenant wall in `tenant-layer.ts`, ADR-0095 D1). +- Security objects: [`packages/plugins/plugin-security/src/objects`](https://github.com/objectstack-ai/objectstack/tree/main/packages/plugins/plugin-security/src/objects). ## Anti-patterns diff --git a/content/docs/permissions/authentication.mdx b/content/docs/permissions/authentication.mdx index 8afba819f6..f546cbad5d 100644 --- a/content/docs/permissions/authentication.mdx +++ b/content/docs/permissions/authentication.mdx @@ -1022,6 +1022,6 @@ This ensures that registration and sign-in flows do not return 404 errors in MSW Complete working examples are available in the repository: -- [Basic Auth Example](https://github.com/objectstack-ai/framework/tree/main/packages/plugins/plugin-auth/examples/basic-usage.ts) -- [Todo App with Auth](https://github.com/objectstack-ai/framework/tree/main/examples/app-todo) +- [Basic Auth Example](https://github.com/objectstack-ai/objectstack/tree/main/packages/plugins/plugin-auth/examples/basic-usage.ts) +- [Todo App with Auth](https://github.com/objectstack-ai/objectstack/tree/main/examples/app-todo) - [CRM App with Auth](https://github.com/objectstack-ai/hotcrm) diff --git a/content/docs/plugins/packages.mdx b/content/docs/plugins/packages.mdx index 3d3e3e54b8..64dcc9b4c3 100644 --- a/content/docs/plugins/packages.mdx +++ b/content/docs/plugins/packages.mdx @@ -5,7 +5,7 @@ description: Complete guide to all ObjectStack packages, services, drivers, plug # Package Overview -ObjectStack is organized into **71 package manifests** across multiple categories. This guide provides an overview of the framework packages, services, drivers, plugins, and adapters in the [framework repository](https://github.com/objectstack-ai/framework/tree/main/packages). +ObjectStack is organized into **71 package manifests** across multiple categories. This guide provides an overview of the framework packages, services, drivers, plugins, and adapters in the [framework repository](https://github.com/objectstack-ai/objectstack/tree/main/packages). ### Package categories at a glance @@ -44,7 +44,7 @@ import { ObjectSchema, Field } from '@objectstack/spec/data'; - **Purpose**: ObjectKernel with dependency injection, lifecycle hooks, and event bus - **Exports**: `ObjectKernel`, `LiteKernel`, `Plugin` interface, service management - **When to use**: Bootstrap your application, manage plugins and services -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/core/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/core/README.md) ```typescript import { ObjectKernel } from '@objectstack/core'; @@ -58,7 +58,7 @@ const kernel = new ObjectKernel(); - **Purpose**: High-level runtime bootstrap and plugin composition - **Exports**: Runtime configuration, plugin loaders, capability system - **When to use**: Use with `defineStack()` for application setup -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/runtime/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/runtime/README.md) ### @objectstack/objectql @@ -67,7 +67,7 @@ const kernel = new ObjectKernel(); - **Purpose**: ObjectQL query engine with filters, aggregations, and window functions - **Exports**: Query parser, filter engine, schema registry - **When to use**: Advanced query operations, custom data access patterns -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/objectql/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/objectql/README.md) ### @objectstack/metadata @@ -76,7 +76,7 @@ const kernel = new ObjectKernel(); - **Purpose**: Load, validate, and manage metadata from files or runtime - **Exports**: Metadata loaders, serializers, overlay system, validation - **When to use**: Dynamic metadata loading, multi-source metadata composition -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/metadata/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/metadata/README.md) ### @objectstack/rest @@ -85,7 +85,7 @@ const kernel = new ObjectKernel(); - **Purpose**: Automatic REST API generation based on object definitions - **Exports**: REST server, route generators, middleware - **When to use**: Expose ObjectStack data via REST API -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/rest/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/rest/README.md) ### @objectstack/formula @@ -113,7 +113,7 @@ const kernel = new ObjectKernel(); - **Purpose**: Type-safe client for ObjectStack REST API with batching and error handling - **Exports**: `ObjectStackClient`, query builders, error classes - **When to use**: Any JavaScript/TypeScript application (Node, React, Vue, Angular, etc.) -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/client/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/client/README.md) ```typescript import { ObjectStackClient } from '@objectstack/client'; @@ -127,7 +127,7 @@ const client = new ObjectStackClient({ baseUrl: 'https://api.example.com' }); - **Purpose**: React hooks for queries, mutations, real-time subscriptions - **Exports**: `useQuery`, `useMutation`, `useRealtimeConnection`, `useView`, `useObject`, `useMetadata`, etc. - **When to use**: React applications -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/client-react/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/client-react/README.md) ```typescript import { useQuery, useMutation } from '@objectstack/client-react'; @@ -143,7 +143,7 @@ import { useQuery, useMutation } from '@objectstack/client-react'; - **Purpose**: Fast in-memory data storage with full ObjectQL support - **When to use**: Development, testing, demos (data is lost on restart) -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/driver-memory/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/driver-memory/README.md) ```typescript import { InMemoryDriver } from '@objectstack/driver-memory'; @@ -156,7 +156,7 @@ import { InMemoryDriver } from '@objectstack/driver-memory'; - **Purpose**: Production-ready SQL database support with migrations - **Supports**: PostgreSQL, MySQL, SQLite, and all Knex-compatible databases - **When to use**: Traditional relational database deployments -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/driver-sql/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/driver-sql/README.md) ```typescript import { SqlDriver } from '@objectstack/driver-sql'; @@ -173,7 +173,7 @@ const driver = new SqlDriver({ - **Purpose**: SQLite running entirely in WebAssembly (no native bindings), with optional `fs`-backed persistence - **Modes**: In-memory (`:memory:`) or a file path persisted via the `persist` option - **When to use**: Environments without native SQLite, edge/browser runtimes, lightweight local-first storage -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/driver-sqlite-wasm/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/driver-sqlite-wasm/README.md) ```typescript import { SqliteWasmDriver } from '@objectstack/driver-sqlite-wasm'; @@ -186,7 +186,7 @@ const driver = new SqliteWasmDriver({ filename: ':memory:' }); - **Purpose**: Native MongoDB driver for ObjectQL with document-flavored objects - **When to use**: Existing MongoDB infrastructure, document-shaped data -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/driver-mongodb/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/driver-mongodb/README.md) --- @@ -200,7 +200,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Aggregations, time series, funnels, dashboards - **When to use**: Business intelligence, reporting, metrics dashboards -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/services/service-analytics/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/services/service-analytics/README.md) ### @objectstack/service-automation @@ -208,7 +208,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Autolaunched, screen, and scheduled flows with visual builder support - **When to use**: Business process automation, approval workflows, scheduled tasks -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/services/service-automation/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/services/service-automation/README.md) ### @objectstack/service-cache @@ -217,7 +217,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Adapters**: Memory (dev), Redis (production) - **Features**: TTL, namespaces, pattern matching, statistics - **When to use**: Performance optimization, reduce database load -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/services/service-cache/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/services/service-cache/README.md) ### @objectstack/service-messaging @@ -239,7 +239,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Multi-language support, interpolation, pluralization, fallback chains - **When to use**: Multi-language applications, global deployments -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/services/service-i18n/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/services/service-i18n/README.md) ### @objectstack/service-job @@ -247,7 +247,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Cron expressions, intervals, one-time jobs, retry logic, history - **When to use**: Background tasks, scheduled reports, cleanup jobs -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/services/service-job/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/services/service-job/README.md) ### @objectstack/service-queue @@ -255,7 +255,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Priority queues, retry, rate limiting, worker pools, job events - **When to use**: Async processing, email sending, report generation, webhooks -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/services/service-queue/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/services/service-queue/README.md) ### @objectstack/service-realtime @@ -263,7 +263,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Channels, presence, broadcasting, typing indicators, cursor tracking - **When to use**: Real-time dashboards, collaborative editing, live notifications -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/services/service-realtime/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/services/service-realtime/README.md) ### @objectstack/service-storage @@ -271,7 +271,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Upload, download, signed URLs, multipart uploads, metadata - **When to use**: File attachments, document management, media storage -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/services/service-storage/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/services/service-storage/README.md) ### @objectstack/service-package @@ -279,7 +279,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Upsert by `(id, version)`, SHA-256 integrity hash, `latest` resolution, bulk list/delete - **When to use**: Marketplace backends, internal tenant-facing registries, CI-driven metadata distribution -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/services/service-package/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/services/service-package/README.md) ### @objectstack/service-settings @@ -287,7 +287,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Per-org / per-user settings, Zod-validated namespaces, default fallbacks - **When to use**: Application/feature configuration that must be editable at runtime -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/services/service-settings/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/services/service-settings/README.md) --- @@ -299,7 +299,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Email/password, OAuth providers, session management, RBAC - **When to use**: User authentication and authorization -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/plugin-auth/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/plugin-auth/README.md) ### @objectstack/plugin-security @@ -307,7 +307,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Role-based access control, object/field permissions, row-level security, `owner_id` auto-stamp - **When to use**: Multi-user applications with access control requirements -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/plugin-security/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/plugin-security/README.md) ### @objectstack/organizations (enterprise) @@ -322,7 +322,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: CRUD audit logs, field-level changes, security events, compliance reports - **When to use**: SOC 2, HIPAA, GDPR compliance, security monitoring -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/plugin-audit/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/plugin-audit/README.md) ### @objectstack/mcp @@ -330,7 +330,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: AI tools, data resources, prompt templates for Claude, Cursor, Cline - **When to use**: AI agent integration, MCP-compatible tools -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/mcp/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/mcp/README.md) ### @objectstack/plugin-hono-server @@ -338,7 +338,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Lightweight HTTP server, middleware support, edge-compatible - **When to use**: Serve ObjectStack REST API with Hono -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/plugin-hono-server/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/plugin-hono-server/README.md) ### @objectstack/plugin-dev @@ -346,7 +346,7 @@ All services implement contracts from `@objectstack/spec/contracts` and are kern - **Features**: Metadata validation, schema introspection, debugging tools - **When to use**: Development and debugging -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/plugin-dev/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/plugin-dev/README.md) ### @objectstack/plugin-approvals @@ -394,7 +394,7 @@ The open edition ships the **Hono** adapter. Hono runs on Node.js, Bun, Deno, an **Hono Adapter** — the supported HTTP adapter; edge-native and multi-runtime. - **Use case**: Node.js, Bun, Deno, Cloudflare Workers, Vercel Edge -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/adapters/hono/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/adapters/hono/README.md) --- @@ -406,7 +406,7 @@ The open edition ships the **Hono** adapter. Hono runs on Node.js, Bun, Deno, an - **Commands**: `serve`, `dev`, `start`, `doctor`, `compile`, `build`, `validate`, `generate`, `package`, `meta`, … (binary is `os` / `objectstack`) - **When to use**: Development, deployment, project management -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/cli/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/cli/README.md) ```bash npx os serve --dev @@ -418,7 +418,7 @@ npx os serve --dev - **Templates**: `blank` (default, bundled), plus remote templates `todo`, `compliance`, `content`, `contracts`, `procurement` - **When to use**: Start a new ObjectStack project -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/create-objectstack/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/create-objectstack/README.md) ```bash npx create-objectstack my-app @@ -430,7 +430,7 @@ npx create-objectstack my-app - **Features**: Syntax highlighting, autocomplete, validation for metadata files - **When to use**: Enhanced development experience in VS Code -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/vscode-objectstack/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/vscode-objectstack/README.md) --- @@ -442,7 +442,7 @@ npx create-objectstack my-app - **Exports**: Type helpers, utility types, branded types - **When to use**: Imported automatically by other packages -- **README**: [View README](https://github.com/objectstack-ai/framework/blob/main/packages/types/README.md) +- **README**: [View README](https://github.com/objectstack-ai/objectstack/blob/main/packages/types/README.md) --- diff --git a/content/docs/protocol/objectql/state-machine.mdx b/content/docs/protocol/objectql/state-machine.mdx index 7ac0c3d438..7b51276e53 100644 --- a/content/docs/protocol/objectql/state-machine.mdx +++ b/content/docs/protocol/objectql/state-machine.mdx @@ -8,7 +8,7 @@ description: Define strict business logic constraints prevents AI hallucinations The **State Machine** (`state_machine` validation rule) lets you define the "Constitution" of a record's lifecycle: the legal `status` transitions a record may take. It is a **flat, textbook finite-state-machine** transition table that the write path enforces. - Per [ADR-0020](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0020-state-machine-converge-and-enforce.md), a state machine is **one of the object's `validations`** — a rule with `type: 'state_machine'`. There is no top-level `stateMachine`/`stateMachines` property on an object, and the older XState-style shape (hierarchical states, `on`/`cond`/`actions`, `meta.aiInstructions`) was retired. A flat `{ from: [to] }` transition table is the only enforced shape. + Per [ADR-0020](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0020-state-machine-converge-and-enforce.md), a state machine is **one of the object's `validations`** — a rule with `type: 'state_machine'`. There is no top-level `stateMachine`/`stateMachines` property on an object, and the older XState-style shape (hierarchical states, `on`/`cond`/`actions`, `meta.aiInstructions`) was retired. A flat `{ from: [to] }` transition table is the only enforced shape. ## Why State Machines? diff --git a/content/docs/protocol/objectui/layout-dsl.mdx b/content/docs/protocol/objectui/layout-dsl.mdx index bc7a2b515a..b46d7f0b81 100644 --- a/content/docs/protocol/objectui/layout-dsl.mdx +++ b/content/docs/protocol/objectui/layout-dsl.mdx @@ -43,9 +43,9 @@ by default** and disabled per-deployment with the `OS_PAGE_REACT=off` env variable. Both tiers can embed the platform's real data components (``, ``, charts, metrics). -> **Learn more:** [ADR-0080](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0080-ai-authored-ui-jsx-source.md) +> **Learn more:** [ADR-0080](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0080-ai-authored-ui-jsx-source.md) > (the `html` tier — parse ≠ execute; the registry is the contract) and -> [ADR-0081](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0081-trusted-react-page-tier.md) +> [ADR-0081](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0081-trusted-react-page-tier.md) > (the trusted `react` tier). The rest of this page covers the structured mode. ## Layout Hierarchy @@ -796,7 +796,7 @@ interface ResponsiveColumns { ### Visibility Rule Visibility is a single **CEL expression** string, not a structured rule object. -Since [ADR-0089](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0089-unify-visibility-predicate-naming.md) the one canonical key is **`visibleWhen`** across every +Since [ADR-0089](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0089-unify-visibility-predicate-naming.md) the one canonical key is **`visibleWhen`** across every layer — data fields, view form sections/fields, and page components — aligning with the `readonlyWhen` / `requiredWhen` family. The element is shown only when the expression evaluates truthy. diff --git a/content/docs/references/ui/portal.mdx b/content/docs/references/ui/portal.mdx index 5cca677724..bd355d86e9 100644 --- a/content/docs/references/ui/portal.mdx +++ b/content/docs/references/ui/portal.mdx @@ -63,7 +63,7 @@ grid). See framework issue -https://github.com/objectstack-ai/framework/issues/1294 +https://github.com/objectstack-ai/objectstack/issues/1294 for the design rationale. diff --git a/content/docs/releases/implementation-status.mdx b/content/docs/releases/implementation-status.mdx index f1fd7f370f..77016c08f7 100644 --- a/content/docs/releases/implementation-status.mdx +++ b/content/docs/releases/implementation-status.mdx @@ -530,7 +530,7 @@ Implementation spans every layer of the platform. Core infrastructure, data mode description="Build with ObjectStack" /> diff --git a/content/docs/releases/index.mdx b/content/docs/releases/index.mdx index 88b481c7e3..049fd688b1 100644 --- a/content/docs/releases/index.mdx +++ b/content/docs/releases/index.mdx @@ -34,11 +34,11 @@ These pages are curated summaries. For exhaustive, per-package detail: - **Framework packages** — every package ships a `CHANGELOG.md` generated from [changesets](https://github.com/changesets/changesets), visible on npm and in - the [framework repository](https://github.com/objectstack-ai/framework). + the [framework repository](https://github.com/objectstack-ai/objectstack). - **Console UI** — the [objectui CHANGELOG](https://github.com/objectstack-ai/objectui/blob/main/CHANGELOG.md) follows Keep a Changelog. - **Design decisions** — breaking changes reference their - [ADRs](https://github.com/objectstack-ai/framework/tree/main/docs/adr), which + [ADRs](https://github.com/objectstack-ai/objectstack/tree/main/docs/adr), which record the rationale. ## Versioning policy diff --git a/content/docs/releases/v9.mdx b/content/docs/releases/v9.mdx index 7f39d08b7c..6ebd3cbd26 100644 --- a/content/docs/releases/v9.mdx +++ b/content/docs/releases/v9.mdx @@ -42,7 +42,7 @@ Removed from the spec: 4. A flat record listing (the former `tabular` report or inline list) is not an analytics dataset — model it as an object-bound **ListView** (ADR-0017). -> Rationale: [ADR-0021 — Analytics: one semantic dataset layer](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0021-analytics-dataset-semantic-layer.md) +> Rationale: [ADR-0021 — Analytics: one semantic dataset layer](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0021-analytics-dataset-semantic-layer.md) ### 2. `ChartTypeSchema` trimmed to distinctly-renderable families diff --git a/content/docs/ui/audience-based-interfaces.mdx b/content/docs/ui/audience-based-interfaces.mdx index d2f3fd6075..faa76ea42c 100644 --- a/content/docs/ui/audience-based-interfaces.mdx +++ b/content/docs/ui/audience-based-interfaces.mdx @@ -18,7 +18,7 @@ description: The same data serves different audiences. Give end users a curated | **End user (consumer)** | a curated **App** → `page` / `view` (interface mode) | `App.requiredPermissions`, permission-set `tabPermissions`, nav-item gating | | **Builder / admin** | **Setup / Studio**, raw object tables (data mode) | capabilities: `setup.access`, `studio.access`, `manage_metadata` | -The built-in permission sets already encode this split: `member_default` and `viewer_readonly` do **not** carry `studio.access` / `manage_metadata`, so Studio and schema-design surfaces are invisible to them; `admin_full_access` carries both, while `organization_admin` gets `setup.access` only — the Setup shell is reachable but Studio and schema design stay hidden from org-scoped admins (see [`default-permission-sets.ts`](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/plugin-security/src/objects/default-permission-sets.ts)). +The built-in permission sets already encode this split: `member_default` and `viewer_readonly` do **not** carry `studio.access` / `manage_metadata`, so Studio and schema-design surfaces are invisible to them; `admin_full_access` carries both, while `organization_admin` gets `setup.access` only — the Setup shell is reachable but Studio and schema design stay hidden from org-scoped admins (see [`default-permission-sets.ts`](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/plugin-security/src/objects/default-permission-sets.ts)). ### 1. Gate the app and its navigation @@ -59,8 +59,8 @@ This is the lesson from Airtable's surfaces: the **Automations tab is visible to ## Runnable example -- Permission sets: [`default-permission-sets.ts`](https://github.com/objectstack-ai/framework/blob/main/packages/plugins/plugin-security/src/objects/default-permission-sets.ts) — `member_default` / `viewer_readonly` vs `organization_admin` / `admin_full_access`. -- Apps: [`examples/app-showcase/src/ui/apps`](https://github.com/objectstack-ai/framework/tree/main/examples/app-showcase/src/ui/apps). +- Permission sets: [`default-permission-sets.ts`](https://github.com/objectstack-ai/objectstack/blob/main/packages/plugins/plugin-security/src/objects/default-permission-sets.ts) — `member_default` / `viewer_readonly` vs `organization_admin` / `admin_full_access`. +- Apps: [`examples/app-showcase/src/ui/apps`](https://github.com/objectstack-ai/objectstack/tree/main/examples/app-showcase/src/ui/apps). ## Anti-patterns diff --git a/content/docs/ui/create-vs-edit-form.mdx b/content/docs/ui/create-vs-edit-form.mdx index 36bc565808..768b9c7d45 100644 --- a/content/docs/ui/create-vs-edit-form.mdx +++ b/content/docs/ui/create-vs-edit-form.mdx @@ -101,8 +101,8 @@ Rule of thumb: **"different field subset" → derive. "different layout or flow" ## Runnable example -- Object: [`examples/app-showcase/src/data/objects/contact.object.ts`](https://github.com/objectstack-ai/framework/blob/main/examples/app-showcase/src/data/objects/contact.object.ts) — flat, grouped, intent-tagged field set. -- Views: [`examples/app-showcase/src/ui/views/contact.view.ts`](https://github.com/objectstack-ai/framework/blob/main/examples/app-showcase/src/ui/views/contact.view.ts) — full edit form + sparse `formViews.create` + `addRecord` binding. +- Object: [`examples/app-showcase/src/data/objects/contact.object.ts`](https://github.com/objectstack-ai/objectstack/blob/main/examples/app-showcase/src/data/objects/contact.object.ts) — flat, grouped, intent-tagged field set. +- Views: [`examples/app-showcase/src/ui/views/contact.view.ts`](https://github.com/objectstack-ai/objectstack/blob/main/examples/app-showcase/src/ui/views/contact.view.ts) — full edit form + sparse `formViews.create` + `addRecord` binding. ## Anti-patterns diff --git a/content/docs/ui/doc-pages.mdx b/content/docs/ui/doc-pages.mdx index 51e4852baf..e69772e49c 100644 --- a/content/docs/ui/doc-pages.mdx +++ b/content/docs/ui/doc-pages.mdx @@ -161,5 +161,5 @@ renders at `/docs/crm_index`. - See the in-repo authoring reference in the showcase package: `examples/app-showcase/src/docs/showcase_docs_guide.md`. -- Read [ADR-0046](https://github.com/objectstack-ai/framework/blob/main/docs/adr/0046-package-docs-as-metadata.md) +- Read [ADR-0046](https://github.com/objectstack-ai/objectstack/blob/main/docs/adr/0046-package-docs-as-metadata.md) for the full design rationale and rollout phases. diff --git a/content/docs/ui/field-grouping-and-order.mdx b/content/docs/ui/field-grouping-and-order.mdx index 841a38aed9..24dadcc58d 100644 --- a/content/docs/ui/field-grouping-and-order.mdx +++ b/content/docs/ui/field-grouping-and-order.mdx @@ -68,8 +68,8 @@ Keeping grouping off the field (beyond an optional semantic hint) is what lets * ## Runnable example -- [`examples/app-showcase/src/data/objects/contact.object.ts`](https://github.com/objectstack-ai/framework/blob/main/examples/app-showcase/src/data/objects/contact.object.ts) — fields tagged with `group`. -- [`examples/app-showcase/src/ui/views/contact.view.ts`](https://github.com/objectstack-ai/framework/blob/main/examples/app-showcase/src/ui/views/contact.view.ts) — sections that materialise those groups. +- [`examples/app-showcase/src/data/objects/contact.object.ts`](https://github.com/objectstack-ai/objectstack/blob/main/examples/app-showcase/src/data/objects/contact.object.ts) — fields tagged with `group`. +- [`examples/app-showcase/src/ui/views/contact.view.ts`](https://github.com/objectstack-ai/objectstack/blob/main/examples/app-showcase/src/ui/views/contact.view.ts) — sections that materialise those groups. ## Anti-patterns diff --git a/content/docs/ui/forms.mdx b/content/docs/ui/forms.mdx index 084eb429e9..cde840bd17 100644 --- a/content/docs/ui/forms.mdx +++ b/content/docs/ui/forms.mdx @@ -390,7 +390,7 @@ entry (`/forms/:name`). ## See also -- [`skills/objectstack-ui/SKILL.md`](https://github.com/objectstack-ai/framework/tree/main/skills/objectstack-ui) — full FormView schema reference. -- [`skills/objectstack-data/SKILL.md`](https://github.com/objectstack-ai/framework/tree/main/skills/objectstack-data) — object, hook + permission-set authoring patterns. +- [`skills/objectstack-ui/SKILL.md`](https://github.com/objectstack-ai/objectstack/tree/main/skills/objectstack-ui) — full FormView schema reference. +- [`skills/objectstack-data/SKILL.md`](https://github.com/objectstack-ai/objectstack/tree/main/skills/objectstack-data) — object, hook + permission-set authoring patterns. - [Hook & Action Bodies](/docs/automation/hook-bodies) — what runs in the sandbox vs. the host. - [Security](/docs/permissions) — RBAC, profiles, and the `anonymous` execution context. diff --git a/content/docs/ui/public-data-collection.mdx b/content/docs/ui/public-data-collection.mdx index 0567f307ad..8b6a170748 100644 --- a/content/docs/ui/public-data-collection.mdx +++ b/content/docs/ui/public-data-collection.mdx @@ -57,8 +57,8 @@ Authorization is **derived from the declaration**, not configured separately — ## Runnable example -- Object: [`examples/app-showcase/src/data/objects/inquiry.object.ts`](https://github.com/objectstack-ai/framework/blob/main/examples/app-showcase/src/data/objects/inquiry.object.ts). -- Public form: [`examples/app-showcase/src/ui/views/inquiry.view.ts`](https://github.com/objectstack-ai/framework/blob/main/examples/app-showcase/src/ui/views/inquiry.view.ts). +- Object: [`examples/app-showcase/src/data/objects/inquiry.object.ts`](https://github.com/objectstack-ai/objectstack/blob/main/examples/app-showcase/src/data/objects/inquiry.object.ts). +- Public form: [`examples/app-showcase/src/ui/views/inquiry.view.ts`](https://github.com/objectstack-ai/objectstack/blob/main/examples/app-showcase/src/ui/views/inquiry.view.ts). ## Anti-patterns diff --git a/docker/Dockerfile b/docker/Dockerfile index b1e2739049..bed697ffea 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -30,7 +30,7 @@ ARG OS_CLI_VERSION=latest RUN npm install -g @objectstack/cli@${OS_CLI_VERSION} \ && npm cache clean --force -LABEL org.opencontainers.image.source="https://github.com/objectstack-ai/framework" \ +LABEL org.opencontainers.image.source="https://github.com/objectstack-ai/objectstack" \ org.opencontainers.image.title="ObjectStack" \ org.opencontainers.image.description="Official ObjectStack runtime: os start + your compiled objectstack.json artifact" \ org.opencontainers.image.licenses="Apache-2.0" diff --git a/docs/adr/0020-state-machine-converge-and-enforce.md b/docs/adr/0020-state-machine-converge-and-enforce.md index 0e3a981ffe..022d8b0f94 100644 --- a/docs/adr/0020-state-machine-converge-and-enforce.md +++ b/docs/adr/0020-state-machine-converge-and-enforce.md @@ -162,7 +162,7 @@ The proposal's intent is fully delivered — converge to the `state_machine` rul ## Addendum — completing D3 for the whole `validations` union (#1475) -This ADR enforced `state_machine` / `cross_field` / `script` and left the other six rule types declarative "until a later phase." [#1475](https://github.com/objectstack-ai/framework/issues/1475) finished that phase, applying the same "no advertised-but-unenforced capability" principle to the rest of the union. The "nine types" figure quoted in the problem statement above is therefore now **six**: +This ADR enforced `state_machine` / `cross_field` / `script` and left the other six rule types declarative "until a later phase." [#1475](https://github.com/objectstack-ai/objectstack/issues/1475) finished that phase, applying the same "no advertised-but-unenforced capability" principle to the rest of the union. The "nine types" figure quoted in the problem statement above is therefore now **six**: - **Enforced (added by #1475):** `format` (regex / named email·url·phone·json), `json_schema` (ajv-compiled), `conditional` (recursive `when` → `then`/`otherwise`). These join the three this ADR shipped — all are deterministic, synchronous, side-effect-free predicates over one record, the contract that makes them safe on the write path. - **Removed from the schema:** `unique`, `async`, `custom`. Each needs I/O or a handler model a write-path rule must not carry, so it was trimmed rather than left a silent no-op, and redirected to the layer that already does it correctly: uniqueness → a unique **index** (`ObjectSchema.indexes`, `partial` for scope) or field-level `unique: true`; async/remote → the client form layer; custom code → a `beforeInsert`/`beforeUpdate` lifecycle hook. diff --git a/docs/adr/0021-analytics-dataset-semantic-layer.md b/docs/adr/0021-analytics-dataset-semantic-layer.md index 78beb891db..f545eae0fa 100644 --- a/docs/adr/0021-analytics-dataset-semantic-layer.md +++ b/docs/adr/0021-analytics-dataset-semantic-layer.md @@ -1,6 +1,6 @@ # ADR-0021: Analytics — one semantic `dataset` layer, `report` / `dashboard` become pure presentation -**Status**: **Accepted & shipped — Phase 2 closed 2026-06-10.** The author-surface convergence is live: the single semantic `dataset` form is the only analytics form, and the three legacy inline-query shapes are **removed** as of `@objectstack/spec` **9.0.0** (PRs [#1676](https://github.com/objectstack-ai/framework/pull/1676) cutover + [#1677](https://github.com/objectstack-ai/framework/pull/1677) major changeset, both merged). See **"Implementation status"** at the end for the per-workstream close-out and what was deferred. _(Prior: revised 2026-05-31 — implementation scan folded in, gating decisions **D-A / D-B / D-C resolved** + open questions Q1–Q3 closed, optimised for the AI-authors / human-reviews design center.)_ +**Status**: **Accepted & shipped — Phase 2 closed 2026-06-10.** The author-surface convergence is live: the single semantic `dataset` form is the only analytics form, and the three legacy inline-query shapes are **removed** as of `@objectstack/spec` **9.0.0** (PRs [#1676](https://github.com/objectstack-ai/objectstack/pull/1676) cutover + [#1677](https://github.com/objectstack-ai/objectstack/pull/1677) major changeset, both merged). See **"Implementation status"** at the end for the per-workstream close-out and what was deferred. _(Prior: revised 2026-05-31 — implementation scan folded in, gating decisions **D-A / D-B / D-C resolved** + open questions Q1–Q3 closed, optimised for the AI-authors / human-reviews design center.)_ **Deciders**: ObjectStack Protocol Architects **Builds on**: [ADR-0019](./0019-app-as-consumer-unit.md) + [ADR-0020](./0020-state-machine-converge-and-enforce.md) (the "one engine, fold the parasitic concept into its host" principle — applied here to analytics), [ADR-0017](./0017-object-has-many-view.md) (object-bound ListView is the row-level lens), [ADR-0010](./0010-nl-to-flow-authoring.md) + [ADR-0011](./0011-actions-as-ai-tools.md) (AI authoring is the design center) **Consumers**: `@objectstack/spec` (`ui/report.zod.ts`, `ui/dashboard.zod.ts`, `ui/view.zod.ts`, `data/query.zod.ts`, `kernel/metadata-type-schemas.ts`), `@objectstack/objectql` (query engine), `@objectstack/analytics-service`, all `examples/*` @@ -428,7 +428,7 @@ The rollout was executed as a **dual-form → reconcile → single-form cutover* | WS | Scope | Status | |---|---|---| | **WS0** | Design close-out (D-A/D-B/D-C, Q1–Q3) | ✅ done (2026-05-31) | -| **WS1** | Spec / schema — `ui/dataset.zod.ts` added; `report`/`dashboard`/`view` reshaped; inline-query fields + `ListChartConfig` query fields + `WidgetMeasure` **removed**; seed `Dataset`→`Seed`/`defineSeed` rename | ✅ done — inline removal merged in [#1676](https://github.com/objectstack-ai/framework/pull/1676); spec **9.0.0** major declared in [#1677](https://github.com/objectstack-ai/framework/pull/1677) | +| **WS1** | Spec / schema — `ui/dataset.zod.ts` added; `report`/`dashboard`/`view` reshaped; inline-query fields + `ListChartConfig` query fields + `WidgetMeasure` **removed**; seed `Dataset`→`Seed`/`defineSeed` rename | ✅ done — inline removal merged in [#1676](https://github.com/objectstack-ai/objectstack/pull/1676); spec **9.0.0** major declared in [#1677](https://github.com/objectstack-ai/objectstack/pull/1677) | | **WS2** | Runtime — dataset → Cube/analytics lowering; `compareTo` time-shift; date-bucketing. Two runtime bugs the reconciliation gate caught were fixed (`objectql-strategy`: same-field `$gte/$lte` range overwrite; ignored `timeDimensions`) | ✅ done for the **shipped surface** (single-object datasets + date dimensions, reconciled 0-mismatch). ⚠️ **Deferred:** the cross-object join path + per-joined-object RLS hardening (D-C) — no shipped dataset exercises a relationship join yet; the headline `revenue by account.region` use case is the first follow-up | | **WS3** | Frontend (`objectui`) — DatasetWidget binds dataset+values, forwards `runtimeFilter` (date-macro resolved), drops legacy string `compareTo`; console re-bumped | ✅ done (objectui #1612; console re-bump framework #1675) | | **WS4** | Migration + tests — examples (todo/crm/showcase) + platform-objects + objectql write-path fixtures migrated; focused dataset-form test suites; record-list reports reclassified as ListViews | ✅ done (merged in #1676) | diff --git a/docs/adr/0038-build-verification-loop.md b/docs/adr/0038-build-verification-loop.md index 3994c35c14..e2121e5ef6 100644 --- a/docs/adr/0038-build-verification-loop.md +++ b/docs/adr/0038-build-verification-loop.md @@ -4,7 +4,7 @@ **Status**: Proposed (2026-06-11) — cloud-owned; framework slice partially implemented (2026-07-16 audit): L3 runtime probes shipped and tested (`metadata-protocol/src/build-probes.ts`, `RuntimeBuildIssue` contract); L2 half-present (dataset compile only); L1/L4/L5 + `ai_eval_*` storage are cloud-only and not verifiable in this repo. **Deciders**: ObjectStack Protocol Architects -**Builds on**: [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (drafts as the staging layer — this ADR **replaces its human-approval assumption for AI builds** with a machine gate; HITL stays for destructive actions), [ADR-0021](./0021-analytics-dataset-semantic-layer.md) (datasets — what most verification probes exercise), ADR-0037 / [framework#1694](https://github.com/objectstack-ai/framework/pull/1694) (Live Canvas — the *human-visibility* complement to this ADR's *machine-verification*) +**Builds on**: [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (drafts as the staging layer — this ADR **replaces its human-approval assumption for AI builds** with a machine gate; HITL stays for destructive actions), [ADR-0021](./0021-analytics-dataset-semantic-layer.md) (datasets — what most verification probes exercise), ADR-0037 / [framework#1694](https://github.com/objectstack-ai/objectstack/pull/1694) (Live Canvas — the *human-visibility* complement to this ADR's *machine-verification*) **Consumers**: `@objectstack/service-analytics` + `@objectstack/objectql` (verification probes), `../cloud/service-ai-studio` (graph lint, `verify_build` tool, self-correction protocol, eval intelligence), `../objectui` (build health card in chat), `ai_eval_cases`/`ai_eval_runs` (existing, currently-unused storage) **Premise**: pre-launch, no back-compat debt — specify the target end-state directly. diff --git a/docs/adr/0040-unified-assistant-and-agent-binding.md b/docs/adr/0040-unified-assistant-and-agent-binding.md index 3511b09b60..b6ac70721d 100644 --- a/docs/adr/0040-unified-assistant-and-agent-binding.md +++ b/docs/adr/0040-unified-assistant-and-agent-binding.md @@ -6,7 +6,7 @@ **Status**: **Superseded by [ADR-0063](./0063-two-kernel-agents-skills-are-the-extension-primitive.md)** — original: Proposed (2026-06-11) **Deciders**: ObjectStack Protocol Architects -**Builds on**: [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (draft-gated authoring tools the assistant drives), [ADR-0038](./0038-build-verification-loop.md) (the verify-fix-reverify discipline carried by skills), ADR-0037 / [framework#1694](https://github.com/objectstack-ai/framework/pull/1694) (Live Canvas — the surface the unified assistant builds into) +**Builds on**: [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (draft-gated authoring tools the assistant drives), [ADR-0038](./0038-build-verification-loop.md) (the verify-fix-reverify discipline carried by skills), ADR-0037 / [framework#1694](https://github.com/objectstack-ai/objectstack/pull/1694) (Live Canvas — the surface the unified assistant builds into) **Consumers**: `@objectstack/spec` (agent/skill types — clarified, not changed), `@objectstack/service-ai` (default agent composition), `../cloud/service-ai-studio` (authoring skills attach to the platform assistant), `../objectui` (chat surfaces drop the agent picker) **Premise**: pre-launch, no back-compat debt — specify the target end-state directly. diff --git a/docs/adr/0042-approval-sla-escalation.md b/docs/adr/0042-approval-sla-escalation.md index 77bc8e36b9..cfb4bc1a56 100644 --- a/docs/adr/0042-approval-sla-escalation.md +++ b/docs/adr/0042-approval-sla-escalation.md @@ -3,7 +3,7 @@ **Status**: Accepted — implemented (proposed 2026-06-12 · calibrated 2026-06-12) **Deciders**: ObjectStack Protocol Architects **Builds on**: [ADR-0019](./0019-approval-as-flow-node.md) (approval as flow node), [ADR-0041](./0041-flow-trigger-family.md) (triggers vs jobs vs hooks — this is the canonical "jobs, not trigger" case), thread interactions (#1740) -**Closes**: [#1742](https://github.com/objectstack-ai/framework/issues/1742) +**Closes**: [#1742](https://github.com/objectstack-ai/objectstack/issues/1742) **Consumers**: `@objectstack/plugin-approvals` (scanner + execution), `@objectstack/service-job` (the clock), Console inbox (timeline rendering) --- diff --git a/docs/adr/0043-actionable-approval-links.md b/docs/adr/0043-actionable-approval-links.md index 0e89789312..0b31412696 100644 --- a/docs/adr/0043-actionable-approval-links.md +++ b/docs/adr/0043-actionable-approval-links.md @@ -3,7 +3,7 @@ **Status**: Accepted — implemented (proposed 2026-06-12 · calibrated 2026-06-12) **Deciders**: ObjectStack Protocol Architects **Builds on**: [ADR-0042](./0042-approval-sla-escalation.md) (reserved system actors, audit-first discipline), thread interactions (#1740), [ADR-0012/0030](./0030-notification-platform-convergence.md) (messaging + outbox) -**Closes**: [#1743](https://github.com/objectstack-ai/framework/issues/1743) +**Closes**: [#1743](https://github.com/objectstack-ai/objectstack/issues/1743) **Consumers**: `@objectstack/plugin-approvals` (token store + redemption + pages), messaging templates, future email channel wiring --- diff --git a/docs/adr/0044-approval-send-back-for-revision.md b/docs/adr/0044-approval-send-back-for-revision.md index 04daa20197..826ab50340 100644 --- a/docs/adr/0044-approval-send-back-for-revision.md +++ b/docs/adr/0044-approval-send-back-for-revision.md @@ -3,7 +3,7 @@ **Status**: Accepted — engine + model implemented; designer pending (objectui) (proposed 2026-06-12 · calibrated 2026-06-12) **Deciders**: ObjectStack Protocol Architects **Builds on**: [ADR-0019](./0019-approval-as-flow-node.md) (approval as a durable-pause flow node), [ADR-0039](./0039-token-scope-tree-execution.md) (single-program-counter suspend model), thread interactions (#1740), [ADR-0042](./0042-approval-sla-escalation.md) (audit-first discipline) -**Closes**: [#1744](https://github.com/objectstack-ai/framework/issues/1744) +**Closes**: [#1744](https://github.com/objectstack-ai/objectstack/issues/1744) **Consumers**: `@objectstack/spec` (flow edge type, branch labels, contracts), `@objectstack/service-automation` (back-edge traversal), `@objectstack/plugin-approvals` (send-back / resubmit runtime), REST, Console approvals inbox --- diff --git a/docs/adr/0054-runtime-proof-for-authorable-surface.md b/docs/adr/0054-runtime-proof-for-authorable-surface.md index 46bc7e304e..c55b2743a7 100644 --- a/docs/adr/0054-runtime-proof-for-authorable-surface.md +++ b/docs/adr/0054-runtime-proof-for-authorable-surface.md @@ -3,8 +3,8 @@ **Status**: Accepted (2026-06-18) **Deciders**: ObjectStack Protocol Architects **Builds on**: [ADR-0049](./0049-no-unenforced-security-properties.md) (enforce-or-remove gate), [ADR-0005](./0005-metadata-customization-overlay.md) (artifact vs runtime), [ADR-0053](./0053-date-and-datetime-semantics.md) (the domain of the motivating regression) -**Consumers**: `@objectstack/spec` (liveness ledger `packages/spec/liveness/.json`), the Spec Liveness Check CI gate (#1919), `@objectstack/dogfood` (the runtime gate, [#2020](https://github.com/objectstack-ai/framework/pull/2020)), `@objectstack/verify` (the published proof engine + CLI, [#2041](https://github.com/objectstack-ai/framework/pull/2041)), spec authors, platform contributors. -**Surfaced by**: PR [#2018](https://github.com/objectstack-ai/framework/pull/2018) — "organization timezone drives analytics date bucketing" was **green on every static gate** (build, ~900 unit tests, spec-liveness, CodeQL) yet broken end-to-end across three integration seams; and the field-type capability-matrix dogfood ([#2022](https://github.com/objectstack-ai/framework/pull/2022)), which on its first run found `rating`/`slider`/`toggle` reading back wrong-typed. +**Consumers**: `@objectstack/spec` (liveness ledger `packages/spec/liveness/.json`), the Spec Liveness Check CI gate (#1919), `@objectstack/dogfood` (the runtime gate, [#2020](https://github.com/objectstack-ai/objectstack/pull/2020)), `@objectstack/verify` (the published proof engine + CLI, [#2041](https://github.com/objectstack-ai/objectstack/pull/2041)), spec authors, platform contributors. +**Surfaced by**: PR [#2018](https://github.com/objectstack-ai/objectstack/pull/2018) — "organization timezone drives analytics date bucketing" was **green on every static gate** (build, ~900 unit tests, spec-liveness, CodeQL) yet broken end-to-end across three integration seams; and the field-type capability-matrix dogfood ([#2022](https://github.com/objectstack-ai/objectstack/pull/2022)), which on its first run found `rating`/`slider`/`toggle` reading back wrong-typed. --- @@ -50,7 +50,7 @@ Three gates already guard the authorable surface, each at a different layer: |---|---|---| | **AI-authoring guardrails** (build-time lint, broken→error / fragile→warning) | *Is the authored metadata valid?* | Valid ≠ correct at runtime. | | **Spec liveness ledger** (ADR-0049 + #1919) | *Does any code read this property?* | A consumer existing ≠ the integrated path being correct. | -| **Dogfood gate** ([#2020](https://github.com/objectstack-ai/framework/pull/2020)) | *Does authoring it produce correct runtime behavior?* | Coverage is currently incidental — whatever the example apps happen to exercise. | +| **Dogfood gate** ([#2020](https://github.com/objectstack-ai/objectstack/pull/2020)) | *Does authoring it produce correct runtime behavior?* | Coverage is currently incidental — whatever the example apps happen to exercise. | The liveness ledger's evidence is a static pointer (`packages/spec/liveness/.json`, e.g. `field:line`). It is excellent at @@ -58,7 +58,7 @@ killing *dead* surface (parsed, no consumer). It is **blind to integration correctness**: #2018's properties all had valid consumer pointers and were classified live, yet the end-to-end result was wrong. The same blindness let `rating`/`slider`/`toggle` be live (they persist) while reading back as the -wrong JS type — found only when [#2022](https://github.com/objectstack-ai/framework/pull/2022) +wrong JS type — found only when [#2022](https://github.com/objectstack-ai/objectstack/pull/2022) wrote one and read it back over the real API. The cost is asymmetric for *this* platform. When a human authors metadata and it @@ -106,7 +106,7 @@ grows coverage where silent runtime breakage is plausible, not everywhere. ### 3. Phasing - **Phase 1 (in progress).** Capability-matrix proofs for the two classes with a - demonstrated break: field types ([#2022](https://github.com/objectstack-ai/framework/pull/2022), field-zoo) and analytics ([#2018](https://github.com/objectstack-ai/framework/pull/2018), tz bucketing). + demonstrated break: field types ([#2022](https://github.com/objectstack-ai/objectstack/pull/2022), field-zoo) and analytics ([#2018](https://github.com/objectstack-ai/objectstack/pull/2018), tz bucketing). - **Phase 2.** Extend the matrix to flow nodes, form widgets, and RLS patterns (the member-edit-others by-id-write hole, #1994, is the seed RLS proof — it also drives a multi-user harness capability reused by every later RLS proof). @@ -164,7 +164,7 @@ the proof corpus stays CI-cheap as it grows. The proof *mechanism* this ADR assigns to `@objectstack/dogfood` has since been extracted into a published, app-agnostic package: **`@objectstack/verify`** -([#2041](https://github.com/objectstack-ai/framework/pull/2041)) — `bootStack` +([#2041](https://github.com/objectstack-ai/objectstack/pull/2041)) — `bootStack` (the real in-process stack via Hono request-injection), `deriveCrudCases` (a runtime contract auto-derived from any app's metadata), `runCrudVerification` (write → read → assert type fidelity), and `runRlsProofs` (the #1994 diff --git a/docs/adr/0057-system-data-lifecycle-and-retention.md b/docs/adr/0057-system-data-lifecycle-and-retention.md index 848995804a..9457b5713b 100644 --- a/docs/adr/0057-system-data-lifecycle-and-retention.md +++ b/docs/adr/0057-system-data-lifecycle-and-retention.md @@ -1,6 +1,6 @@ # ADR-0057: System data has a lifecycle — declarative retention, rotation, and reclamation for platform-generated objects -**Status**: Accepted — **P0–P4 implemented** (P0 shipped with this ADR, [#2079](https://github.com/objectstack-ai/framework/pull/2079); P1–P4 in [#2791](https://github.com/objectstack-ai/framework/pull/2791), tracked in [#2786](https://github.com/objectstack-ai/framework/issues/2786)) (proposed 2026-06-20 · implemented 2026-07-10) +**Status**: Accepted — **P0–P4 implemented** (P0 shipped with this ADR, [#2079](https://github.com/objectstack-ai/objectstack/pull/2079); P1–P4 in [#2791](https://github.com/objectstack-ai/objectstack/pull/2791), tracked in [#2786](https://github.com/objectstack-ai/objectstack/issues/2786)) (proposed 2026-06-20 · implemented 2026-07-10) **Deciders**: ObjectStack Protocol Architects **Builds on**: [ADR-0052](./0052-audit-is-not-the-activity-feed.md) (decomposed audit / activity / collaboration into bounded contexts — this ADR adds the *orthogonal* axis those contexts never specified: **how long each one lives and how its space is reclaimed**), [ADR-0049](./0049-no-unenforced-security-properties.md) (enforce-or-remove — a declared `retention` that drives no sweeper is dead surface; this ADR wires it to a runtime consumer), [ADR-0030](./0030-notification-platform-convergence.md) (notification objects are messaging-owned with their own lifecycle), [ADR-0021](./0021-analytics-dataset-semantic-layer.md) (precedent for moving event-shaped data off the primary OLTP store) **Consumers**: `@objectstack/spec` (`lifecycle` object property + `LifecycleClass`), `@objectstack/objectql` (LifecycleService: Reaper / Rotator / Archiver), `@objectstack/plugin-audit` (audit/activity exclusion of telemetry objects — shipped P0), `@objectstack/driver-sql` (`auto_vacuum=INCREMENTAL` default + incremental-vacuum hook — shipped P0), `@objectstack/dogfood` (storage-growth regression gate), platform spec-liveness gate @@ -235,15 +235,15 @@ engine — splitting their storage would split their brain. ## 4. Rollout -P1–P4 are tracked in [#2786](https://github.com/objectstack-ai/framework/issues/2786). +P1–P4 are tracked in [#2786](https://github.com/objectstack-ai/objectstack/issues/2786). | Phase | Scope | Status | |---|---|---| -| **P0 — stop the bleed** | (a) exclude operational/plumbing objects from the audit+activity writer (`plugin-audit` `SKIP_OBJECTS`); (b) SQLite `auto_vacuum=INCREMENTAL` driver default; (c) showcase digest interval 20s→60s, flagged demo-only | **shipped with this ADR ([#2079](https://github.com/objectstack-ai/framework/pull/2079))** | -| **P1 — contract** | `lifecycleClass` + `lifecycle` spec; LifecycleService Reaper; spec-liveness enforcement; dogfood growth gate | **implemented ([#2791](https://github.com/objectstack-ai/framework/pull/2791))** | -| **P2 — rotation/TTL** | Rotator (shard + DROP) for high-freq telemetry; transient TTL expiry | **implemented ([#2791](https://github.com/objectstack-ai/framework/pull/2791))** | -| **P3 — separation** | telemetry/audit on a dedicated datasource; Archiver cold-store | **implemented ([#2791](https://github.com/objectstack-ai/framework/pull/2791))** | -| **P4 — governance** | per-table storage quotas, growth alerts, tenant-level retention overrides | **implemented ([#2791](https://github.com/objectstack-ai/framework/pull/2791))** | +| **P0 — stop the bleed** | (a) exclude operational/plumbing objects from the audit+activity writer (`plugin-audit` `SKIP_OBJECTS`); (b) SQLite `auto_vacuum=INCREMENTAL` driver default; (c) showcase digest interval 20s→60s, flagged demo-only | **shipped with this ADR ([#2079](https://github.com/objectstack-ai/objectstack/pull/2079))** | +| **P1 — contract** | `lifecycleClass` + `lifecycle` spec; LifecycleService Reaper; spec-liveness enforcement; dogfood growth gate | **implemented ([#2791](https://github.com/objectstack-ai/objectstack/pull/2791))** | +| **P2 — rotation/TTL** | Rotator (shard + DROP) for high-freq telemetry; transient TTL expiry | **implemented ([#2791](https://github.com/objectstack-ai/objectstack/pull/2791))** | +| **P3 — separation** | telemetry/audit on a dedicated datasource; Archiver cold-store | **implemented ([#2791](https://github.com/objectstack-ai/objectstack/pull/2791))** | +| **P4 — governance** | per-table storage quotas, growth alerts, tenant-level retention overrides | **implemented ([#2791](https://github.com/objectstack-ai/objectstack/pull/2791))** | P0 alone removes ~76 % of the row growth (audit/activity exclusion) and a further 3× (interval), and lets space be reclaimed — without any schema change diff --git a/docs/adr/0059-third-party-backward-compatibility-gates.md b/docs/adr/0059-third-party-backward-compatibility-gates.md index 91fa4baa02..231cc28a3f 100644 --- a/docs/adr/0059-third-party-backward-compatibility-gates.md +++ b/docs/adr/0059-third-party-backward-compatibility-gates.md @@ -4,7 +4,7 @@ **Deciders**: ObjectStack Protocol Architects **Builds on**: [ADR-0054](./0054-runtime-proof-for-authorable-surface.md) (prove-it-runs for the authorable surface), [ADR-0049](./0049-no-unenforced-security-properties.md) (enforce-or-remove) **Consumers**: `@objectstack/spec` (the public API surface + `api-surface.json` snapshot), `@objectstack/downstream-contract` (the frozen fixture), the TypeScript Type Check + Test Core CI gates, the Release workflow, spec authors, platform contributors, and every third party consuming a published release. -**Surfaced by**: [#2035](https://github.com/objectstack-ai/framework/issues/2035) — 16 writable domains had no `defineX` factory, so third parties authored them as bare output-type literals; and [#2023](https://github.com/objectstack-ai/framework/issues/2023), where a root-import resolved to `any` and silently swallowed ~30 real type errors in the examples. +**Surfaced by**: [#2035](https://github.com/objectstack-ai/objectstack/issues/2035) — 16 writable domains had no `defineX` factory, so third parties authored them as bare output-type literals; and [#2023](https://github.com/objectstack-ai/objectstack/issues/2023), where a root-import resolved to `any` and silently swallowed ~30 real type errors in the examples. --- @@ -68,13 +68,13 @@ something the change is **not allowed to edit**. ### 1. Every writable domain has a `defineX` factory; bare output-type literals are banned in authoring surfaces `defineX(config: z.input): X { return XSchema.parse(config); }` -is the single authoring entry for every writable domain ([#2088](https://github.com/objectstack-ai/framework/pull/2088) +is the single authoring entry for every writable domain ([#2088](https://github.com/objectstack-ai/objectstack/pull/2088) completed the remaining 16). It is the only form that is simultaneously input-shape ergonomic, validated at authoring time, and — being a *value* import — impossible to silently degrade to `any`. A `no-restricted-syntax` lint guard bans bare `: DomainType` exported-const literals across `examples/**` and -`packages/apps/**` ([#2088](https://github.com/objectstack-ai/framework/pull/2088), -[#2097](https://github.com/objectstack-ai/framework/pull/2097)). +`packages/apps/**` ([#2088](https://github.com/objectstack-ai/objectstack/pull/2088), +[#2097](https://github.com/objectstack-ai/objectstack/pull/2097)). ### 2. `objectstack validate` is the third party's authoritative self-gate @@ -85,18 +85,18 @@ the same check earlier and into the editor; it does not replace it. ### 3. The framework proves backward compatibility with two frozen in-repo gates + one live pre-publish gate -- **Depth — `@objectstack/downstream-contract`** ([#2089](https://github.com/objectstack-ai/framework/pull/2089), - [#2095](https://github.com/objectstack-ai/framework/pull/2095)). A fixture +- **Depth — `@objectstack/downstream-contract`** ([#2089](https://github.com/objectstack-ai/objectstack/pull/2089), + [#2095](https://github.com/objectstack-ai/objectstack/pull/2095)). A fixture authored the way an external consumer does — builder + factories + **bare literals** — across all 16 writable domains, typed with the spec's own input aliases and run through each schema's `.parse()` plus a `defineStack` assembly. Catches a narrowed/removed schema property on any domain. -- **Breadth — the API-surface snapshot** ([#2092](https://github.com/objectstack-ai/framework/pull/2092)). +- **Breadth — the API-surface snapshot** ([#2092](https://github.com/objectstack-ai/objectstack/pull/2092)). `packages/spec/api-surface.json` records every exported `name (kind)` of all 16 public entry points. `check:api-surface` fails on any drift; a removal is breaking, an addition still requires regenerating the snapshot, so no change to the public surface is silent. -- **Live — the pre-publish hotcrm smoke** ([#2093](https://github.com/objectstack-ai/framework/pull/2093)). +- **Live — the pre-publish hotcrm smoke** ([#2093](https://github.com/objectstack-ai/objectstack/pull/2093)). The Release workflow clones `objectstack-ai/hotcrm` at a pinned tag, installs it against the **published** packages, overlays the about-to-publish spec, and runs hotcrm's own `typecheck` + `validate`. A red blocks the publish. diff --git a/docs/adr/0070-package-first-authoring.md b/docs/adr/0070-package-first-authoring.md index f6770ded79..d301a302e7 100644 --- a/docs/adr/0070-package-first-authoring.md +++ b/docs/adr/0070-package-first-authoring.md @@ -8,7 +8,7 @@ **Premise**: pre-launch — specify the target end-state. The platform already has the **package** primitive (ADR-0048) and a runtime overlay store (ADR-0005); what is missing is a *contract* that ties every runtime-authored item to a writable package and forbids package-less ("orphan") metadata. The **Airtable model** is the north star: you create a **base** (= a writable software package) first, then author objects/fields/views/flows **into it**; the base is the unit you organise, version, export, and **delete**. Items below are tagged **[existing]** / **[new]**. > **Trigger**: a business-user dogfood pass of Studio surfaced a family of related defects whose common root is the *absence of a package-first contract*: -> 1. **Read-only-after-publish** ([framework#2252](https://github.com/objectstack-ai/framework/pull/2252)): authoring a new object while a *code* package was selected stamped the new row with that code package's `package_id`, so it read back as "code-provided" and locked itself read-only the moment it was published — the user could not edit what they had just created. +> 1. **Read-only-after-publish** ([framework#2252](https://github.com/objectstack-ai/objectstack/pull/2252)): authoring a new object while a *code* package was selected stamped the new row with that code package's `package_id`, so it read back as "code-provided" and locked itself read-only the moment it was published — the user could not edit what they had just created. > 2. **The orphan pile / no delete unit** ([objectui#1946](https://github.com/objectstack-ai/objectui/pull/1946)): the band-aid for (1) coerces such writes to `package_id = null`. That correctly unblocks editing, but it scatters runtime metadata into a package-less bucket that the package-scoped Studio lists filter *out* — items become hard to find and, critically, **there is no container to delete**: "how do I clean up a pile of loose metadata?" > 3. **AI authoring can still orphan**: `../cloud`'s `service-ai-studio` resolves a target package with smart fallbacks (active package -> single-app package -> **auto-created `com.workspace`**) and rejects read-only code packages, but it never *requires* the user/agent to choose a base first — so it can silently default into a catch-all dumping ground. > @@ -18,7 +18,7 @@ Built across the three surfaces and verified end-to-end in a real environment via the AI build flow. -- **P1 — Kernel (D1/D2)** — `@objectstack/objectql` ([framework#2285](https://github.com/objectstack-ai/framework/pull/2285)): `isWritablePackage` predicate; a runtime-only create targeting a read-only code/installed package is **rejected** with `writable_package_required` (422) instead of coerced to `null`. +- **P1 — Kernel (D1/D2)** — `@objectstack/objectql` ([framework#2285](https://github.com/objectstack-ai/objectstack/pull/2285)): `isWritablePackage` predicate; a runtime-only create targeting a read-only code/installed package is **rejected** with `writable_package_required` (422) instead of coerced to `null`. - **P2 — Studio (D3)** — `../objectui` ([objectui#1970](https://github.com/objectstack-ai/objectui/pull/1970)): a create-flow gate that prompts/redirects to a writable base; `isLocalScope` / `writableBaseOptions` helpers; surfaces `writable_package_required` as an actionable error. - **P3 — AI (D3)** — `../cloud` `service-ai-studio` ([cloud#479](https://github.com/objectstack-ai/cloud/pull/479), [cloud#481](https://github.com/objectstack-ai/cloud/pull/481); tests [cloud#480](https://github.com/objectstack-ai/cloud/pull/480)): drops the shared `com.workspace` catch-all and auto-creates an **intentional named** base via `protocol.installPackage` (a real, Studio-visible package); single-writable-base coherence groups an incremental build into one base; an explicit platform/system `packageId` is discarded; empty field props are sanitized. - **Live dogfood (real LLM + runtime)**: a one-sentence magic build plus iterative business-user changes (add a related object, add a field) all landed in **one** app base (`app.iojn`), live and editable — no `com.workspace`, no orphans. @@ -106,7 +106,7 @@ A metadata-customizable deployment is **single-tenant** (an *environment*; `proj ## Rollout (tracked separately — see the package-first epic) -1. ✅ Kernel D1/D2 predicate + `writable_package_required` rejection (`@objectstack/objectql`) — [framework#2285](https://github.com/objectstack-ai/framework/pull/2285). +1. ✅ Kernel D1/D2 predicate + `writable_package_required` rejection (`@objectstack/objectql`) — [framework#2285](https://github.com/objectstack-ai/objectstack/pull/2285). 2. ✅ Studio D3 create-flow + selector default (`../objectui`) — [objectui#1970](https://github.com/objectstack-ai/objectui/pull/1970). (PackagesPage delete/duplicate moves to D4.) 3. ✅ AI D3 in `service-ai-studio` (drop fallback, named base, skills) — [cloud#479](https://github.com/objectstack-ai/cloud/pull/479), [cloud#481](https://github.com/objectstack-ai/cloud/pull/481); tests [cloud#480](https://github.com/objectstack-ai/cloud/pull/480). 4. ⏳ D4 package-as-unit (delete-cascade, export/duplicate). diff --git a/docs/adr/0087-metadata-protocol-upgrade-contract.md b/docs/adr/0087-metadata-protocol-upgrade-contract.md index e103484278..80fcddb68f 100644 --- a/docs/adr/0087-metadata-protocol-upgrade-contract.md +++ b/docs/adr/0087-metadata-protocol-upgrade-contract.md @@ -4,7 +4,7 @@ **Deciders**: ObjectStack Protocol Architects **Builds on**: [ADR-0059](./0059-third-party-backward-compatibility-gates.md) (layered backward-compat gates — this ADR is its consumer-facing sequel), [ADR-0078](./0078-no-silently-inert-metadata.md) (no declarable-but-unenforced metadata — the un-checked `engines.protocol` is exactly this class), [ADR-0025](./0025-plugin-package-distribution.md) (§3.2 `engines.protocol` / `engines.platform` compatibility ranges, §3.10 #3 protocol-first check order), [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (the authoring population this ADR designs for), [ADR-0049](./0049-no-unenforced-security-properties.md) (enforce-or-remove), [ADR-0054](./0054-runtime-proof-for-authorable-surface.md) (prove-it-runs), AGENTS.md Prime Directive #12 (contract-first, no consumer-side dialect fallbacks — §"Why the conversion layer does not violate PD #12" draws the line) **Consumers**: `@objectstack/spec` (protocol version constant, conversion layer, deprecation/change registries), `@objectstack/cli` (`validate`, `doctor`, `migrate meta`), the runtime metadata loader (handshake + conversion), `@objectstack/mcp` (the AI-native change/migration surface), `@objectstack/create-objectstack`, the Release workflow, and every third-party consumer — whose maintainer is assumed to be an **AI agent** -**Surfaced by**: recurring third-party breakage on protocol upgrades — the [#2035](https://github.com/objectstack-ai/framework/issues/2035) / [#2023](https://github.com/objectstack-ai/framework/issues/2023) class that motivated ADR-0059 — plus two observations: `PluginEnginesSchema.protocol` (`packages/spec/src/kernel/manifest.zod.ts`) is declared, documented, and **checked nowhere**, so a version mismatch surfaces as an arbitrary downstream crash; and the consumer population has shifted — this platform's metadata is AI-authored by design (ADR-0033, ADR-0059 context), so an upgrade paradigm optimized for *human attention* (warnings, changelogs, prose guides) optimizes the wrong scarce resource +**Surfaced by**: recurring third-party breakage on protocol upgrades — the [#2035](https://github.com/objectstack-ai/objectstack/issues/2035) / [#2023](https://github.com/objectstack-ai/objectstack/issues/2023) class that motivated ADR-0059 — plus two observations: `PluginEnginesSchema.protocol` (`packages/spec/src/kernel/manifest.zod.ts`) is declared, documented, and **checked nowhere**, so a version mismatch surfaces as an arbitrary downstream crash; and the consumer population has shifted — this platform's metadata is AI-authored by design (ADR-0033, ADR-0059 context), so an upgrade paradigm optimized for *human attention* (warnings, changelogs, prose guides) optimizes the wrong scarce resource --- diff --git a/docs/audits/2026-06-handwritten-docs-accuracy-followups.md b/docs/audits/2026-06-handwritten-docs-accuracy-followups.md index a57780440c..c65cde6df4 100644 --- a/docs/audits/2026-06-handwritten-docs-accuracy-followups.md +++ b/docs/audits/2026-06-handwritten-docs-accuracy-followups.md @@ -37,7 +37,7 @@ Out of scope here (generated, DO-NOT-EDIT); fix by regenerating from spec in a d 80 of 82 docs carry residual notes (210 items total). ### `guides/airtable-dashboard-analysis.mdx` -- Related Issues links (#712-714) point at github.com/objectstack-ai/spec/issues/* (header line 11 and Section 7). The established prior says the repo is objectstack-ai/framework, not objectstack-ai/spec. The audit left these unchanged as historical Feb-2026 issue-tracker references and I could not confirm whether a separate objectstack-ai/spec repo ever hosted issues #712-714, so I did not fabricate a rewrite. Flag for human follow-up: if no objectstack-ai/spec repo exists, these are dead cross-repo links. +- Related Issues links (#712-714) point at github.com/objectstack-ai/spec/issues/* (header line 11 and Section 7). The established prior says the repo is objectstack-ai/objectstack, not objectstack-ai/spec. The audit left these unchanged as historical Feb-2026 issue-tracker references and I could not confirm whether a separate objectstack-ai/spec repo ever hosted issues #712-714, so I did not fabricate a rewrite. Flag for human follow-up: if no objectstack-ai/spec repo exists, these are dead cross-repo links. - The doc frames colorVariant/actionType/header/globalFilters.optionsFrom as 'NEW'/'proposed' Feb-2026 enhancements, but these schemas are now actually IMPLEMENTED in packages/spec/src/ui/dashboard.zod.ts (WidgetColorVariantSchema:16, WidgetActionTypeSchema:30, DashboardHeaderActionSchema:42, header at :68, GlobalFilter optionsFrom). The proposed enum VALUES also differ from the implemented ones (e.g. actionType doc lists external|internal|custom vs real script|url|modal|flow|api; colorVariant doc lists green/red/yellow/indigo/pink vs real default/blue/teal/orange/purple/success/warning/danger; header action 'type: primary|secondary|ghost' has no counterpart field in DashboardHeaderActionSchema). Left unchanged because the opening explicitly frames the section as the original gap-analysis proposals, not current authoring — defensible but the framing is now stale since the work shipped. - Inline widget query fields (object/valueField/aggregate/categoryField) used throughout the examples are superseded by the ADR-0021 dataset/dimensions/values shape (dashboard.zod.ts ~148-160). The opening Callout documents this supersession, so left as-is. - objectui-side package names (@objectstack/plugin-dashboard, plugin-report, plugin-charts) in Section 4 were not verified against the sibling objectui repo (out of scope for the framework repo); presented as proposed component homes. @@ -209,7 +209,7 @@ Out of scope here (generated, DO-NOT-EDIT); fix by regenerating from spec in a d ### `guides/objectql-migration.mdx` - Step 1 / Step 5 reference the migration-target version `@objectstack/objectql` `^3.1.0` and `v3.1`. Not cross-checked against packages/objectql/package.json — these are external/aspirational version statements rather than in-repo API claims; flagged for human follow-up only. -- All FROM-side claims about legacy `@objectql/core` (^4.x) and `@objectql/types` (MetadataRegistry sync register/get, ObjectQLPlugin as RuntimePlugin composing ValidatorPlugin/FormulaPlugin/QueryPlugin, install()/onStart()) describe external packages absent from github.com/objectstack-ai/framework and are unverifiable here. The TO-side equivalents were all confirmed against code. +- All FROM-side claims about legacy `@objectql/core` (^4.x) and `@objectql/types` (MetadataRegistry sync register/get, ObjectQLPlugin as RuntimePlugin composing ValidatorPlugin/FormulaPlugin/QueryPlugin, install()/onStart()) describe external packages absent from github.com/objectstack-ai/objectstack and are unverifiable here. The TO-side equivalents were all confirmed against code. ### `guides/plugin-chatbot-integration.mdx` - Line 122-124 troubleshooting: 'register models on the AIService.modelRegistry'. modelRegistry is a real property (ai-service.ts:120,152,191) but listModels() delegates to adapter.listModels() (ai-service.ts:494-498), so models registered on modelRegistry will NOT surface via GET /api/v1/ai/models unless the adapter also reports them. The guidance is slightly misleading but not strictly wrong since the property exists; audit correctly left as unresolved. diff --git a/examples/app-showcase/README.md b/examples/app-showcase/README.md index 4d4f276230..cb1c8e0456 100644 --- a/examples/app-showcase/README.md +++ b/examples/app-showcase/README.md @@ -89,7 +89,7 @@ pnpm verify > third parties author skills/tools, never agents), and the open framework > exposes AI via `@objectstack/mcp` only. Rather than fake a demo, the > coverage manifest **waives** `agent`/`tool`/`skill` with tracking issue -> [#2610](https://github.com/objectstack-ai/framework/issues/2610). +> [#2610](https://github.com/objectstack-ai/objectstack/issues/2610). ## The coverage manifest — how "confirm" works diff --git a/examples/app-showcase/src/coverage.ts b/examples/app-showcase/src/coverage.ts index 19bfc7e01e..6afef38fe5 100644 --- a/examples/app-showcase/src/coverage.ts +++ b/examples/app-showcase/src/coverage.ts @@ -39,8 +39,8 @@ export type KindCoverage = | { status: 'waived'; reason: string; issue: string }; const ISSUE = { - aiDeferred: 'https://github.com/objectstack-ai/framework/issues/2610', - noAuthoringSurface: 'https://github.com/objectstack-ai/framework/issues/2613', + aiDeferred: 'https://github.com/objectstack-ai/objectstack/issues/2610', + noAuthoringSurface: 'https://github.com/objectstack-ai/objectstack/issues/2613', } as const; /** diff --git a/examples/app-showcase/src/docs/showcase_index.md b/examples/app-showcase/src/docs/showcase_index.md index 1b1e798bf8..8f5273ca60 100644 --- a/examples/app-showcase/src/docs/showcase_index.md +++ b/examples/app-showcase/src/docs/showcase_index.md @@ -39,4 +39,4 @@ One walkthrough per protocol domain, mirroring the `src/` layout: deliberately absent here: agents are platform-owned (ADR-0063) and the open framework exposes AI via MCP only. The coverage manifest records the waiver — see -[framework#2610](https://github.com/objectstack-ai/framework/issues/2610). +[framework#2610](https://github.com/objectstack-ai/objectstack/issues/2610). diff --git a/examples/app-showcase/src/docs/showcase_index.zh.md b/examples/app-showcase/src/docs/showcase_index.zh.md index 1084ce1b14..b016c69e36 100644 --- a/examples/app-showcase/src/docs/showcase_index.zh.md +++ b/examples/app-showcase/src/docs/showcase_index.zh.md @@ -32,4 +32,4 @@ ObjectStack 协议的活体一致性夹具:每种字段类型、视图类型、 **AI(agent / tool / skill)**是第六个协议域,这里刻意没有演示:agent 由平台 自有(ADR-0063),开源框架只经 MCP 暴露 AI 能力。覆盖清单以豁免条目如实记账—— -见 [framework#2610](https://github.com/objectstack-ai/framework/issues/2610)。 +见 [framework#2610](https://github.com/objectstack-ai/objectstack/issues/2610)。 diff --git a/examples/app-showcase/src/ui/pages/capability-map.page.ts b/examples/app-showcase/src/ui/pages/capability-map.page.ts index ecfc553cb1..cea4e04c82 100644 --- a/examples/app-showcase/src/ui/pages/capability-map.page.ts +++ b/examples/app-showcase/src/ui/pages/capability-map.page.ts @@ -81,7 +81,7 @@ ${card('security', 'Roles, permissions & sharing', 'A role hierarchy, permission ['docs/showcase_tour_security', 'Read the Security tour'], ])} ${card('ai · deferred', 'Agents, tools & skills', 'Deliberately not demonstrated here: agents are platform-owned (ADR-0063) and the open framework exposes AI via MCP only. The coverage manifest waives agent/tool/skill with a tracking issue instead of faking a demo.', [ - ['https://github.com/objectstack-ai/framework/issues/2610', 'Tracking issue #2610'], + ['https://github.com/objectstack-ai/objectstack/issues/2610', 'Tracking issue #2610'], ])} diff --git a/framework.code-workspace b/objectstack.code-workspace similarity index 100% rename from framework.code-workspace rename to objectstack.code-workspace diff --git a/packages/adapters/hono/package.json b/packages/adapters/hono/package.json index 28154e4fd6..06b0a7c0ac 100644 --- a/packages/adapters/hono/package.json +++ b/packages/adapters/hono/package.json @@ -41,11 +41,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/adapters/hono" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/apps/account/package.json b/packages/apps/account/package.json index 72108dc444..61d485c742 100644 --- a/packages/apps/account/package.json +++ b/packages/apps/account/package.json @@ -33,11 +33,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/apps/account" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/apps/setup/package.json b/packages/apps/setup/package.json index ca9a28adba..3f7921cba7 100644 --- a/packages/apps/setup/package.json +++ b/packages/apps/setup/package.json @@ -33,11 +33,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/apps/setup" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/apps/studio/package.json b/packages/apps/studio/package.json index c232282e1e..376293ae03 100644 --- a/packages/apps/studio/package.json +++ b/packages/apps/studio/package.json @@ -33,11 +33,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/apps/studio" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/cli/package.json b/packages/cli/package.json index e1defd8e80..5841a4b86f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -110,11 +110,11 @@ }, "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/cli" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts index ea3a729eb7..0298fe6352 100644 --- a/packages/cli/src/commands/init.ts +++ b/packages/cli/src/commands/init.ts @@ -539,7 +539,7 @@ export default class Init extends Command { printSuccess(`Scaffold validated (namespace: ${stack.manifest.namespace})`); } catch (err: any) { printError(`Scaffold validation failed: ${err.message || err}`); - console.log(chalk.dim(' This is a CLI bug — please report it at https://github.com/objectstack-ai/framework/issues')); + console.log(chalk.dim(' This is a CLI bug — please report it at https://github.com/objectstack-ai/objectstack/issues')); this.error('Scaffold validation failed'); } } diff --git a/packages/client-react/package.json b/packages/client-react/package.json index 4fab5f05f2..eeb8e751d1 100644 --- a/packages/client-react/package.json +++ b/packages/client-react/package.json @@ -37,11 +37,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/client-react" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/client/package.json b/packages/client/package.json index 576e53ee2e..90f867a2bd 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -41,11 +41,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/client" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/cloud-connection/package.json b/packages/cloud-connection/package.json index 6542c5ddaf..08e3c7035f 100644 --- a/packages/cloud-connection/package.json +++ b/packages/cloud-connection/package.json @@ -39,11 +39,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/cloud-connection" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/console/README.md b/packages/console/README.md index 182db1ca53..5036966c75 100644 --- a/packages/console/README.md +++ b/packages/console/README.md @@ -20,7 +20,7 @@ second npm dependency to keep in sync. | | `@object-ui/console` | `@objectstack/console` | |---|---|---| -| Repo | [`objectstack-ai/objectui`](https://github.com/objectstack-ai/objectui) | [`objectstack-ai/framework`](https://github.com/objectstack-ai/framework) | +| Repo | [`objectstack-ai/objectui`](https://github.com/objectstack-ai/objectui) | [`objectstack-ai/objectstack`](https://github.com/objectstack-ai/objectstack) | | Role | Standalone Console SPA on its own release cadence | Prebuilt SPA frozen at the SHA this framework release was tested against | | Use | Cloud overlays, advanced users, anyone consuming Console directly | Default install for `@objectstack/framework` consumers | diff --git a/packages/console/package.json b/packages/console/package.json index eaab584693..2c7da68070 100644 --- a/packages/console/package.json +++ b/packages/console/package.json @@ -3,14 +3,14 @@ "version": "16.0.0", "description": "Prebuilt Console SPA pinned to this @objectstack/framework release. Source of truth: @object-ui/console (https://github.com/objectstack-ai/objectui).", "license": "Apache-2.0", - "homepage": "https://github.com/objectstack-ai/framework/tree/main/packages/console", + "homepage": "https://github.com/objectstack-ai/objectstack/tree/main/packages/console", "repository": { "type": "git", - "url": "git+https://github.com/objectstack-ai/framework.git", + "url": "git+https://github.com/objectstack-ai/objectstack.git", "directory": "packages/console" }, "bugs": { - "url": "https://github.com/objectstack-ai/framework/issues" + "url": "https://github.com/objectstack-ai/objectstack/issues" }, "publishConfig": { "access": "public" diff --git a/packages/core/package.json b/packages/core/package.json index effc634e48..e349cab984 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -44,11 +44,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/core" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/create-objectstack/CHANGELOG.md b/packages/create-objectstack/CHANGELOG.md index a4b971dfd5..566242e168 100644 --- a/packages/create-objectstack/CHANGELOG.md +++ b/packages/create-objectstack/CHANGELOG.md @@ -96,7 +96,7 @@ release candidate the way a user does — on whatever pnpm corepack hands a fresh machine. -- 809214f: Stop leaking repo-internal skills into scaffolded projects. The scaffolder (and the docs) advertised `npx skills add objectstack-ai/framework --all`, and the skills CLI's `--all` implies `--skill '*'` — which includes even `metadata.internal` skills — so repo-internal tooling like `.claude/skills/dogfood-verification` landed in every new project's `.agents/skills/`. All install commands are now scoped to the published catalog via the `/skills` subpath (`npx skills add objectstack-ai/framework/skills --all`), the internal skill is additionally marked `metadata.internal: true` to hide it from interactive discovery, and a template-consistency ratchet plus a scaffold-e2e assertion keep the boundary from regressing. +- 809214f: Stop leaking repo-internal skills into scaffolded projects. The scaffolder (and the docs) advertised `npx skills add objectstack-ai/objectstack --all`, and the skills CLI's `--all` implies `--skill '*'` — which includes even `metadata.internal` skills — so repo-internal tooling like `.claude/skills/dogfood-verification` landed in every new project's `.agents/skills/`. All install commands are now scoped to the published catalog via the `/skills` subpath (`npx skills add objectstack-ai/objectstack/skills --all`), the internal skill is additionally marked `metadata.internal: true` to hide it from interactive discovery, and a template-consistency ratchet plus a scaffold-e2e assertion keep the boundary from regressing. ## 16.0.0-rc.1 @@ -196,7 +196,7 @@ release candidate the way a user does — on whatever pnpm corepack hands a fresh machine. -- 809214f: Stop leaking repo-internal skills into scaffolded projects. The scaffolder (and the docs) advertised `npx skills add objectstack-ai/framework --all`, and the skills CLI's `--all` implies `--skill '*'` — which includes even `metadata.internal` skills — so repo-internal tooling like `.claude/skills/dogfood-verification` landed in every new project's `.agents/skills/`. All install commands are now scoped to the published catalog via the `/skills` subpath (`npx skills add objectstack-ai/framework/skills --all`), the internal skill is additionally marked `metadata.internal: true` to hide it from interactive discovery, and a template-consistency ratchet plus a scaffold-e2e assertion keep the boundary from regressing. +- 809214f: Stop leaking repo-internal skills into scaffolded projects. The scaffolder (and the docs) advertised `npx skills add objectstack-ai/objectstack --all`, and the skills CLI's `--all` implies `--skill '*'` — which includes even `metadata.internal` skills — so repo-internal tooling like `.claude/skills/dogfood-verification` landed in every new project's `.agents/skills/`. All install commands are now scoped to the published catalog via the `/skills` subpath (`npx skills add objectstack-ai/objectstack/skills --all`), the internal skill is additionally marked `metadata.internal: true` to hide it from interactive discovery, and a template-consistency ratchet plus a scaffold-e2e assertion keep the boundary from regressing. ## 15.1.1 diff --git a/packages/create-objectstack/README.md b/packages/create-objectstack/README.md index ec450fdea6..4777a45b8a 100644 --- a/packages/create-objectstack/README.md +++ b/packages/create-objectstack/README.md @@ -59,7 +59,7 @@ offline. (`blank_note` → `my_app_note`). 2. Installs dependencies (pnpm if available, otherwise npm). 3. Installs the ObjectStack AI skills bundle for coding agents - (`npx skills add objectstack-ai/framework/skills --all` — scoped to the + (`npx skills add objectstack-ai/objectstack/skills --all` — scoped to the curated `skills/` catalog). 4. Writes `AGENTS.md` and `.github/copilot-instructions.md` with the project conventions — unless the template ships its own. diff --git a/packages/create-objectstack/package.json b/packages/create-objectstack/package.json index 92d398ef7c..06bd12c9f8 100644 --- a/packages/create-objectstack/package.json +++ b/packages/create-objectstack/package.json @@ -32,11 +32,11 @@ }, "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/create-objectstack" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/create-objectstack/src/index.ts b/packages/create-objectstack/src/index.ts index e847fad9a6..07b871162b 100644 --- a/packages/create-objectstack/src/index.ts +++ b/packages/create-objectstack/src/index.ts @@ -25,7 +25,7 @@ * - README.md first H1 * * Finally we run ` install` and (best-effort) install the ObjectStack - * skills bundle via `npx skills add objectstack-ai/framework/skills --all`. + * skills bundle via `npx skills add objectstack-ai/objectstack/skills --all`. * The `/skills` subpath scopes discovery to the curated, customer-published * catalog — repo-internal skills (e.g. under `.claude/skills/`) must never * reach scaffolded projects. @@ -467,7 +467,7 @@ const program = new Command() if (!options.skipInstall && !options.skipSkills) { printStep('Installing AI skills for your coding agent...'); try { - execSync('npx -y skills add objectstack-ai/framework/skills --all', { + execSync('npx -y skills add objectstack-ai/objectstack/skills --all', { stdio: 'inherit', cwd: targetDir, }); @@ -475,7 +475,7 @@ const program = new Command() } catch { printWarning( 'Skills installation skipped. Run manually:\n' + - ' npx skills add objectstack-ai/framework/skills', + ' npx skills add objectstack-ai/objectstack/skills', ); console.log(''); } @@ -497,7 +497,7 @@ const program = new Command() if (options.skipInstall || options.skipSkills) { console.log(''); console.log(chalk.bold(' AI Skills (recommended):')); - console.log(chalk.dim(' npx skills add objectstack-ai/framework/skills')); + console.log(chalk.dim(' npx skills add objectstack-ai/objectstack/skills')); } console.log(''); } catch (error) { diff --git a/packages/create-objectstack/src/template-consistency.test.ts b/packages/create-objectstack/src/template-consistency.test.ts index 5df264eb6b..7ea147117a 100644 --- a/packages/create-objectstack/src/template-consistency.test.ts +++ b/packages/create-objectstack/src/template-consistency.test.ts @@ -300,10 +300,10 @@ describe('skills catalog boundary', () => { it('scaffolder installs from the curated skills/ subpath, not the repo root', () => { expect(REGISTRY_SOURCE).toContain( - 'skills add objectstack-ai/framework/skills --all', + 'skills add objectstack-ai/objectstack/skills --all', ); expect(REGISTRY_SOURCE).not.toMatch( - /skills add objectstack-ai\/framework(?!\/skills)/, + /skills add objectstack-ai\/objectstack(?!\/skills)/, ); }); @@ -320,7 +320,7 @@ describe('skills catalog boundary', () => { ':(exclude)packages/create-objectstack/src/template-consistency.test.ts', // CHANGELOGs are auto-generated from changeset prose and legitimately // quote a removed command in past tense while documenting its removal - // (#3101: "…advertised `skills add objectstack-ai/framework --all` … now + // (#3101: "…advertised `skills add objectstack-ai/objectstack --all` … now // scoped to the /skills subpath"). Documenting a fix is not advertising // the anti-pattern — only real customer-facing surfaces count. ':(exclude)**/CHANGELOG.md', @@ -329,7 +329,7 @@ describe('skills catalog boundary', () => { try { candidates = execFileSync( 'git', - ['grep', '-nF', 'skills add objectstack-ai/framework', '--', ...surfaces], + ['grep', '-nF', 'skills add objectstack-ai/objectstack', '--', ...surfaces], { cwd: repoRoot, encoding: 'utf8' }, ); } catch { @@ -337,10 +337,10 @@ describe('skills catalog boundary', () => { } const rootInstalls = candidates .split('\n') - .filter((line) => /skills add objectstack-ai\/framework(?!\/skills)/.test(line)); + .filter((line) => /skills add objectstack-ai\/objectstack(?!\/skills)/.test(line)); expect( rootInstalls, - 'these lines advertise `skills add objectstack-ai/framework` without ' + + 'these lines advertise `skills add objectstack-ai/objectstack` without ' + 'the /skills subpath — repo-root + --all installs internal skills', ).toEqual([]); }); diff --git a/packages/create-objectstack/src/templates/AGENTS.md b/packages/create-objectstack/src/templates/AGENTS.md index 790f606b05..36aa94c4b6 100644 --- a/packages/create-objectstack/src/templates/AGENTS.md +++ b/packages/create-objectstack/src/templates/AGENTS.md @@ -73,11 +73,11 @@ Run `npm run build` when you need the compiled `dist/objectstack.json` artifact. ## AI Skills -This project uses ObjectStack skills from `objectstack-ai/framework`. +This project uses ObjectStack skills from `objectstack-ai/objectstack`. Install or update skills with the standard [skills CLI](https://skills.sh/): ```bash -npx skills add objectstack-ai/framework/skills +npx skills add objectstack-ai/objectstack/skills ``` Skills are triggered automatically based on task context: @@ -97,5 +97,5 @@ Skills are triggered automatically based on task context: ## Learn More - [ObjectStack Documentation](https://objectstack.com/docs) -- [GitHub: objectstack-ai/framework](https://github.com/objectstack-ai/framework) +- [GitHub: objectstack-ai/objectstack](https://github.com/objectstack-ai/objectstack) - [Skills CLI](https://skills.sh/) — Manage AI skills across agents diff --git a/packages/formula/package.json b/packages/formula/package.json index ea57d339e9..3da12c4d55 100644 --- a/packages/formula/package.json +++ b/packages/formula/package.json @@ -34,11 +34,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/formula" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" } diff --git a/packages/lint/package.json b/packages/lint/package.json index 6953b24426..7dafc74ad9 100644 --- a/packages/lint/package.json +++ b/packages/lint/package.json @@ -40,11 +40,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/lint" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 6141a09508..73400373ea 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -41,11 +41,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/mcp" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/metadata-core/package.json b/packages/metadata-core/package.json index c0dc2ad75a..60f40282c0 100644 --- a/packages/metadata-core/package.json +++ b/packages/metadata-core/package.json @@ -57,11 +57,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/metadata-core" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/metadata-fs/package.json b/packages/metadata-fs/package.json index f3ad4d1eb6..d729a099e5 100644 --- a/packages/metadata-fs/package.json +++ b/packages/metadata-fs/package.json @@ -43,11 +43,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/metadata-fs" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/metadata-protocol/package.json b/packages/metadata-protocol/package.json index 89d4643441..ab7acd1903 100644 --- a/packages/metadata-protocol/package.json +++ b/packages/metadata-protocol/package.json @@ -47,11 +47,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/metadata-protocol" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/metadata/package.json b/packages/metadata/package.json index 6bcf023e03..f090b40ef2 100644 --- a/packages/metadata/package.json +++ b/packages/metadata/package.json @@ -63,11 +63,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/metadata" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/objectql/package.json b/packages/objectql/package.json index 0880ce5d1d..69c9b98579 100644 --- a/packages/objectql/package.json +++ b/packages/objectql/package.json @@ -45,11 +45,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/objectql" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/observability/package.json b/packages/observability/package.json index 1ab21a1146..03b111c762 100644 --- a/packages/observability/package.json +++ b/packages/observability/package.json @@ -37,11 +37,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/observability" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/platform-objects/package.json b/packages/platform-objects/package.json index 9d15ca20e2..6330ce7f04 100644 --- a/packages/platform-objects/package.json +++ b/packages/platform-objects/package.json @@ -87,11 +87,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/platform-objects" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/plugins/driver-memory/package.json b/packages/plugins/driver-memory/package.json index ac53e504f7..0d3272e362 100644 --- a/packages/plugins/driver-memory/package.json +++ b/packages/plugins/driver-memory/package.json @@ -37,11 +37,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/driver-memory" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/plugins/driver-mongodb/package.json b/packages/plugins/driver-mongodb/package.json index 6da57b5e3b..da432d2973 100644 --- a/packages/plugins/driver-mongodb/package.json +++ b/packages/plugins/driver-mongodb/package.json @@ -39,11 +39,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/driver-mongodb" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/plugins/driver-sql/package.json b/packages/plugins/driver-sql/package.json index a899d81eed..68c1f15a57 100644 --- a/packages/plugins/driver-sql/package.json +++ b/packages/plugins/driver-sql/package.json @@ -61,11 +61,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/driver-sql" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/plugins/driver-sqlite-wasm/package.json b/packages/plugins/driver-sqlite-wasm/package.json index 50fadd453b..68582e6190 100644 --- a/packages/plugins/driver-sqlite-wasm/package.json +++ b/packages/plugins/driver-sqlite-wasm/package.json @@ -44,11 +44,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/driver-sqlite-wasm" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/plugins/plugin-audit/package.json b/packages/plugins/plugin-audit/package.json index e8e1ed060e..c3d80e1f49 100644 --- a/packages/plugins/plugin-audit/package.json +++ b/packages/plugins/plugin-audit/package.json @@ -36,11 +36,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/plugin-audit" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/plugins/plugin-auth/package.json b/packages/plugins/plugin-auth/package.json index e372a178ae..c626002482 100644 --- a/packages/plugins/plugin-auth/package.json +++ b/packages/plugins/plugin-auth/package.json @@ -46,11 +46,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/plugin-auth" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/plugins/plugin-dev/package.json b/packages/plugins/plugin-dev/package.json index 2ccfe78330..9cf832c814 100644 --- a/packages/plugins/plugin-dev/package.json +++ b/packages/plugins/plugin-dev/package.json @@ -46,11 +46,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/plugin-dev" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/plugins/plugin-hono-server/package.json b/packages/plugins/plugin-hono-server/package.json index 6dc4c9174f..e15c5d513b 100644 --- a/packages/plugins/plugin-hono-server/package.json +++ b/packages/plugins/plugin-hono-server/package.json @@ -32,11 +32,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/plugin-hono-server" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/plugins/plugin-security/CHANGELOG.md b/packages/plugins/plugin-security/CHANGELOG.md index 44cfd69b41..cdd0290841 100644 --- a/packages/plugins/plugin-security/CHANGELOG.md +++ b/packages/plugins/plugin-security/CHANGELOG.md @@ -514,7 +514,7 @@ 八格(伪造异租户 → 拒、同租户 → 通过、缺省 → 放行、无活动组织 → 拒、platform-admin 私有对象豁免、 public 业务对象不豁免、tenancy-disabled 对象不适用、单组织模式不检查)。授权一致性 ledger 新增 `multi-tenant-insert-postimage` 行。配套 cloud `@objectstack/organizations` 的 auto-stamp - 权威覆盖(纵深防御)。Closes objectstack-ai/framework#2937。 + 权威覆盖(纵深防御)。Closes objectstack-ai/objectstack#2937。 - ef70521: fix(plugin-security): 堵跨租户 UPDATE 写 + org_admin 越 private 租户对象墙(security) @@ -528,7 +528,7 @@ **为何不用 `ctx.posture` 作豁免门:** B2 已把 `PLATFORM_ADMIN` posture 落进 `resolve-authz-context.ts` 的 `ctx.posture`,但该字段**未被 plumb 进** enforcement 中间件收到的 ExecutionContext(rest-server 与 runtime dispatcher 都丢弃了它),直接消费会静默 no-op。改用平台专属能力探针,读的是 enforcement 已用的同一套 permission sets,覆盖所有入口,且天然 fail-safe。 - 矩阵门:`authz-matrix-gate.test.ts` 更新 `private_obj.org_admin` 格(read `null` → `{organization_id:'org-1'}`)并新增 `[Finding 1 …]`(8 格:成员重指异租户 → 拒、同租户 → 通过、不碰 org_id→ 放行、无活动组织 → 拒、org_admin 重指 → 拒、platform-admin private 对象 → 放行、public 对象 → 拒、单组织 → 不检查)与 `[Finding 2 …]`(5 格:org_admin private 对象读/写墙到本租户、真平台管理员仍豁免、org_admin public 对象回归、better-auth carve-out 不受影响)。授权一致性 ledger 更新 `multi-tenant-write-postimage`(覆盖 insert+update)并新增 `multi-tenant-exemption-posture`。关联 objectstack-ai/framework#2920。 + 矩阵门:`authz-matrix-gate.test.ts` 更新 `private_obj.org_admin` 格(read `null` → `{organization_id:'org-1'}`)并新增 `[Finding 1 …]`(8 格:成员重指异租户 → 拒、同租户 → 通过、不碰 org_id→ 放行、无活动组织 → 拒、org_admin 重指 → 拒、platform-admin private 对象 → 放行、public 对象 → 拒、单组织 → 不检查)与 `[Finding 2 …]`(5 格:org_admin private 对象读/写墙到本租户、真平台管理员仍豁免、org_admin public 对象回归、better-auth carve-out 不受影响)。授权一致性 ledger 更新 `multi-tenant-write-postimage`(覆盖 insert+update)并新增 `multi-tenant-exemption-posture`。关联 objectstack-ai/objectstack#2920。 ### Minor Changes diff --git a/packages/plugins/plugin-security/package.json b/packages/plugins/plugin-security/package.json index dd41b7a279..e765ba5638 100644 --- a/packages/plugins/plugin-security/package.json +++ b/packages/plugins/plugin-security/package.json @@ -38,11 +38,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/plugin-security" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/plugins/plugin-webhooks/package.json b/packages/plugins/plugin-webhooks/package.json index 283e8c0c01..6cbdf77fb6 100644 --- a/packages/plugins/plugin-webhooks/package.json +++ b/packages/plugins/plugin-webhooks/package.json @@ -42,7 +42,7 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/plugin-webhooks" } } diff --git a/packages/qa/dogfood/README.md b/packages/qa/dogfood/README.md index db7acf1ba3..aab6251566 100644 --- a/packages/qa/dogfood/README.md +++ b/packages/qa/dogfood/README.md @@ -8,7 +8,7 @@ Static gates — `build`, unit tests, spec-liveness, CodeQL — verify each laye isolation, usually against mocks. They cannot catch a break that only appears when the **real engine + strategies + services + HTTP context run together**. -The canonical example is [#2018](https://github.com/objectstack-ai/framework/pull/2018): +The canonical example is [#2018](https://github.com/objectstack-ai/objectstack/pull/2018): "organization timezone drives analytics date bucketing" was broken across three seams (analytics strategy routing, in-memory count, REST execution-context). Every static gate was green — 900+ unit tests included — because each layer was @@ -77,7 +77,7 @@ app-agnostic invariant (`runRlsProofs`, from `@objectstack/verify`): > **A user who cannot READ a record must not be able to WRITE it.** -[#1994](https://github.com/objectstack-ai/framework/pull/1994) was exactly this +[#1994](https://github.com/objectstack-ai/objectstack/pull/1994) was exactly this hole: a single-id `update`/`delete` goes straight to `driver.update(object, id)` and builds no query AST, so the row-level `where` filter the middleware injects on the *read* path was never applied to *by-id writes*. Any member could PATCH a diff --git a/packages/qa/http-conformance/package.json b/packages/qa/http-conformance/package.json index 4bec23a722..b2d0583380 100644 --- a/packages/qa/http-conformance/package.json +++ b/packages/qa/http-conformance/package.json @@ -30,9 +30,9 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/qa/http-conformance" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues" + "bugs": "https://github.com/objectstack-ai/objectstack/issues" } diff --git a/packages/rest/package.json b/packages/rest/package.json index ac6aeeb3f3..9b44667533 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -44,11 +44,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/rest" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 6d5196099d..956c094a0d 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -58,11 +58,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/runtime" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/sdui-parser/package.json b/packages/sdui-parser/package.json index 2f3f5be4ed..91650ef25b 100644 --- a/packages/sdui-parser/package.json +++ b/packages/sdui-parser/package.json @@ -30,11 +30,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/sdui-parser" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" } diff --git a/packages/services/service-analytics/package.json b/packages/services/service-analytics/package.json index 32ebee0399..47de361877 100644 --- a/packages/services/service-analytics/package.json +++ b/packages/services/service-analytics/package.json @@ -36,11 +36,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-analytics" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/services/service-automation/package.json b/packages/services/service-automation/package.json index 9c19468236..a694118680 100644 --- a/packages/services/service-automation/package.json +++ b/packages/services/service-automation/package.json @@ -37,11 +37,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-automation" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/services/service-cache/package.json b/packages/services/service-cache/package.json index 5304e7319c..92df320fde 100644 --- a/packages/services/service-cache/package.json +++ b/packages/services/service-cache/package.json @@ -36,11 +36,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-cache" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/services/service-cluster-redis/package.json b/packages/services/service-cluster-redis/package.json index 73b4405d53..2ac2aa1e79 100644 --- a/packages/services/service-cluster-redis/package.json +++ b/packages/services/service-cluster-redis/package.json @@ -39,7 +39,7 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-cluster-redis" } } diff --git a/packages/services/service-cluster/package.json b/packages/services/service-cluster/package.json index d5eea58fbf..d20286c12e 100644 --- a/packages/services/service-cluster/package.json +++ b/packages/services/service-cluster/package.json @@ -42,7 +42,7 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-cluster" } } diff --git a/packages/services/service-datasource/package.json b/packages/services/service-datasource/package.json index 57d43fb398..7aeb21ad69 100644 --- a/packages/services/service-datasource/package.json +++ b/packages/services/service-datasource/package.json @@ -51,11 +51,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-datasource" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" } diff --git a/packages/services/service-i18n/package.json b/packages/services/service-i18n/package.json index b5b704c640..388f8ec923 100644 --- a/packages/services/service-i18n/package.json +++ b/packages/services/service-i18n/package.json @@ -36,11 +36,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-i18n" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/services/service-job/package.json b/packages/services/service-job/package.json index 0512496962..2e38eef154 100644 --- a/packages/services/service-job/package.json +++ b/packages/services/service-job/package.json @@ -38,11 +38,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-job" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/services/service-knowledge/package.json b/packages/services/service-knowledge/package.json index 9cdfe24a8a..f16511a090 100644 --- a/packages/services/service-knowledge/package.json +++ b/packages/services/service-knowledge/package.json @@ -37,11 +37,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-knowledge" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/services/service-messaging/package.json b/packages/services/service-messaging/package.json index cab16270d6..3012aabbcc 100644 --- a/packages/services/service-messaging/package.json +++ b/packages/services/service-messaging/package.json @@ -36,11 +36,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-messaging" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/services/service-package/package.json b/packages/services/service-package/package.json index 6a5d035a40..0cea24c93c 100644 --- a/packages/services/service-package/package.json +++ b/packages/services/service-package/package.json @@ -37,11 +37,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-package" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/services/service-queue/package.json b/packages/services/service-queue/package.json index 6d792c397f..ded2b7935a 100644 --- a/packages/services/service-queue/package.json +++ b/packages/services/service-queue/package.json @@ -37,11 +37,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-queue" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/services/service-realtime/package.json b/packages/services/service-realtime/package.json index 49f3e14f6c..e23722f3a3 100644 --- a/packages/services/service-realtime/package.json +++ b/packages/services/service-realtime/package.json @@ -37,11 +37,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-realtime" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/services/service-settings/package.json b/packages/services/service-settings/package.json index 371d209a90..0a79af0383 100644 --- a/packages/services/service-settings/package.json +++ b/packages/services/service-settings/package.json @@ -38,7 +38,7 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-settings" }, "publishConfig": { diff --git a/packages/services/service-storage/package.json b/packages/services/service-storage/package.json index 5551dd3ecc..ce98cb467a 100644 --- a/packages/services/service-storage/package.json +++ b/packages/services/service-storage/package.json @@ -50,11 +50,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/services/service-storage" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/spec/package.json b/packages/spec/package.json index 09097fa2d9..34bdeecd29 100644 --- a/packages/spec/package.json +++ b/packages/spec/package.json @@ -245,9 +245,9 @@ }, "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/spec" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues" + "bugs": "https://github.com/objectstack-ai/objectstack/issues" } diff --git a/packages/spec/src/ui/portal.zod.ts b/packages/spec/src/ui/portal.zod.ts index cf7de4f1ce..a1686102da 100644 --- a/packages/spec/src/ui/portal.zod.ts +++ b/packages/spec/src/ui/portal.zod.ts @@ -35,7 +35,7 @@ * - objectui ThemeProvider: inject `theme` as CSS variables. * * See framework issue - * https://github.com/objectstack-ai/framework/issues/1294 + * https://github.com/objectstack-ai/objectstack/issues/1294 * for the design rationale. */ diff --git a/packages/triggers/trigger-record-change/package.json b/packages/triggers/trigger-record-change/package.json index e667230bd5..fc74568b3a 100644 --- a/packages/triggers/trigger-record-change/package.json +++ b/packages/triggers/trigger-record-change/package.json @@ -38,11 +38,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/plugin-trigger-record-change" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/triggers/trigger-schedule/package.json b/packages/triggers/trigger-schedule/package.json index 5797a47366..49b009f1bc 100644 --- a/packages/triggers/trigger-schedule/package.json +++ b/packages/triggers/trigger-schedule/package.json @@ -38,11 +38,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/plugins/plugin-trigger-schedule" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/types/package.json b/packages/types/package.json index d94423faf0..0ab4ba5b87 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -32,11 +32,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/types" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/verify/package.json b/packages/verify/package.json index 2682cb77f2..abc5198c2c 100644 --- a/packages/verify/package.json +++ b/packages/verify/package.json @@ -48,11 +48,11 @@ "author": "ObjectStack", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/verify" }, "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/packages/vscode-objectstack/package.json b/packages/vscode-objectstack/package.json index 3369d47fdb..fa58b7f84c 100644 --- a/packages/vscode-objectstack/package.json +++ b/packages/vscode-objectstack/package.json @@ -7,7 +7,7 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "https://github.com/objectstack-ai/framework.git", + "url": "https://github.com/objectstack-ai/objectstack.git", "directory": "packages/vscode-objectstack" }, "engines": { @@ -72,7 +72,7 @@ ], "author": "ObjectStack", "homepage": "https://objectstack.ai/docs", - "bugs": "https://github.com/objectstack-ai/framework/issues", + "bugs": "https://github.com/objectstack-ai/objectstack/issues", "publishConfig": { "access": "public" }, diff --git a/skills/README.md b/skills/README.md index 8a78f62845..4c910b4abb 100644 --- a/skills/README.md +++ b/skills/README.md @@ -6,7 +6,7 @@ working in **any ObjectStack app** — this monorepo *and* third-party projects. projects add (or update) the bundle with: ```bash -npx skills add objectstack-ai/framework/skills --all +npx skills add objectstack-ai/objectstack/skills --all ``` The `/skills` subpath matters: it is the published catalog boundary — pointing From 3b84a0e9bc9411cad0ccb4123c5784bd02bc10c3 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 21 Jul 2026 12:48:58 +0000 Subject: [PATCH 2/2] chore: add empty changeset for repo-reference rename MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The framework → objectstack reference update touches package.json repository/bugs URLs and docs only — no package code changes — so it releases nothing. Empty changeset satisfies the Check Changeset gate without forcing a lockstep monorepo version bump. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_011kPznpkdptgo2hvW7wMDNw --- .changeset/rename-framework-objectstack-refs.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .changeset/rename-framework-objectstack-refs.md diff --git a/.changeset/rename-framework-objectstack-refs.md b/.changeset/rename-framework-objectstack-refs.md new file mode 100644 index 0000000000..48455115b8 --- /dev/null +++ b/.changeset/rename-framework-objectstack-refs.md @@ -0,0 +1,4 @@ +--- +--- + +Repository-reference update for the GitHub rename `objectstack-ai/framework` -> `objectstack-ai/objectstack` (package.json repository/bugs URLs, doc links, CHANGELOG, skills-install commands, workspace file). Metadata and docs only, with no package code changes, so this releases nothing.