minutework 0.1.19 → 0.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/EXTERNAL_ALPHA.md +15 -4
  2. package/README.md +31 -2
  3. package/assets/claude-local/CLAUDE.md.template +56 -3
  4. package/assets/claude-local/bundle.json +4 -1
  5. package/assets/claude-local/skills/README.md +4 -1
  6. package/assets/claude-local/skills/app-pack-authoring/SKILL.md +57 -0
  7. package/assets/claude-local/skills/contract-first-public-intake/SKILL.md +22 -0
  8. package/assets/claude-local/skills/generated-workspace-architecture/SKILL.md +6 -0
  9. package/assets/claude-local/skills/published-web-and-mw-core-site/SKILL.md +12 -0
  10. package/assets/claude-local/skills/runtime-capability-inventory/SKILL.md +17 -0
  11. package/assets/claude-local/skills/schema-engine/SKILL.md +18 -0
  12. package/assets/claude-local/skills/vuilder-discovery-output-contract/SKILL.md +136 -0
  13. package/assets/claude-local/skills/vuilder-public-site-authoring/SKILL.md +76 -0
  14. package/assets/templates/fastapi-sidecar/README.md +7 -1
  15. package/assets/templates/fastapi-sidecar/template.schema.json +4 -2
  16. package/assets/templates/next-tenant-app/README.md +11 -3
  17. package/assets/templates/next-tenant-app/template.schema.json +4 -2
  18. package/dist/cli-json.d.ts +28 -0
  19. package/dist/cli-json.js +20 -0
  20. package/dist/cli-json.js.map +1 -0
  21. package/dist/compile.js +71 -7
  22. package/dist/compile.js.map +1 -1
  23. package/dist/deploy.js +147 -14
  24. package/dist/deploy.js.map +1 -1
  25. package/dist/index.js +35 -14
  26. package/dist/index.js.map +1 -1
  27. package/dist/publish.d.ts +13 -0
  28. package/dist/publish.js +56 -0
  29. package/dist/publish.js.map +1 -0
  30. package/dist/runtime-package.d.ts +3 -1
  31. package/dist/runtime-package.js +13 -0
  32. package/dist/runtime-package.js.map +1 -1
  33. package/dist/workspace-assets.js +37 -5
  34. package/dist/workspace-assets.js.map +1 -1
  35. package/dist/workspace.js +2 -0
  36. package/dist/workspace.js.map +1 -1
  37. package/package.json +2 -2
  38. package/vendor/workspace-mcp/types.d.ts +8 -0
package/EXTERNAL_ALPHA.md CHANGED
@@ -58,9 +58,16 @@ The broker fails closed when a live session is already active, the selected
58
58
  engine is missing, a prior running record has gone stale, or the launch is
59
59
  interrupted or fails mid-session.
60
60
 
61
- Generated workspaces receive a root `CLAUDE.md` plus exported `skills/`
62
- guidance so the local coding agent sees the combined-web, snapshot-delivery,
63
- and `mw.core.site` baseline workflow.
61
+ Generated workspaces receive a root `CLAUDE.md` and `AGENTS.md` (rendered from
62
+ the same source so they cannot drift) plus exported `skills/` guidance so the
63
+ local coding agent sees the combined-web, snapshot-delivery, and `mw.core.site`
64
+ baseline workflow. Claude Code reads `CLAUDE.md`; Codex and other IDE agents read
65
+ `AGENTS.md`.
66
+
67
+ The workspace MCP (read-only context tools) is wired for Cursor
68
+ (`.cursor/mcp.json`) and Codex (`.codex/config.toml`, which Codex loads for
69
+ trusted projects); `mcp/claude-desktop.sample.json` is included for Claude
70
+ Desktop.
64
71
 
65
72
  Generated guidance and MCP wiring can be reconciled later with
66
73
  `minutework workspace sync-assets`.
@@ -131,6 +138,10 @@ If the workspace cannot compile hosted preview release metadata for the linked p
131
138
 
132
139
  The CLI does not fabricate success. If the backend cannot materialize a hosted preview deployment provider, the receipt reports a typed failure and the CLI exits non-zero.
133
140
 
141
+ ## Machine-readable output (`--json`)
142
+
143
+ `validate`, `compile`, `codegen`, and `deploy --preview` accept `--json` for unattended, agent-driven use. The command prints a single result envelope to stdout (`{ cliJsonVersion, command, ok, status, result, error }`) and nothing else; `ok` mirrors the exit code (fail-closed). `deploy --preview --json` never prompts — pair it with `--yes` to authorize, otherwise it returns `status: "confirmation_required"` and exits non-zero. The automatic bug report is suppressed in `--json` mode.
144
+
134
145
  ## Failure semantics
135
146
 
136
147
  - Missing auth: run `minutework login`
@@ -145,7 +156,7 @@ The CLI does not fabricate success. If the backend cannot materialize a hosted p
145
156
 
146
157
  ## CLI bug reports
147
158
 
148
- - The CLI automatically submits a sanitized bug report for failed commands unless `MW_CLI_BUG_REPORTS=never` is set.
159
+ - The CLI automatically submits a sanitized bug report for failed commands unless `MW_CLI_BUG_REPORTS=never` is set (machine-readable `--json` verbs suppress this automatically).
149
160
  - Automatic reports keep a local JSON bundle under the MinuteWork CLI state root for retry and support follow-up.
150
161
  - `minutework report-bug --note "..."` sends a manual report for UX issues or suspicious behavior that did not crash.
151
162
  - `minutework report-bug --last --note "..."` resends the last saved bundle with extra context.
package/README.md CHANGED
@@ -11,6 +11,7 @@ The current external alpha is intentionally narrow:
11
11
  - Hosted release class: `ssr_container`
12
12
  - Deploy surface: `minutework deploy --preview`
13
13
  - Deferred: `--live`, additional local coding engines, sidecar/runtime-backed deploys, marketplace publish flows
14
+ - Reserved verb: `minutework publish` is present but **fails closed** (a typed `not_implemented` result) until the marketplace publication-review + attestation backend lands
14
15
 
15
16
  The shipped `tenant-app` starter is the combined web surface: public routes at
16
17
  the root plus a private `/app` workspace. Public-site content follows the
@@ -74,8 +75,14 @@ minutework session resume
74
75
  - The broker fails closed on live overlap, missing engine binaries, stale
75
76
  session records, interrupts, and launch failures instead of allowing
76
77
  overlapping phantom sessions.
77
- - Generated workspaces receive a root `CLAUDE.md` plus exported `skills/`
78
- guidance tailored to the combined web and published-site workflow.
78
+ - Generated workspaces receive a root `CLAUDE.md` and `AGENTS.md` (rendered from
79
+ the same source so they cannot drift) plus exported `skills/` guidance tailored
80
+ to the combined web and published-site workflow. Claude Code reads `CLAUDE.md`;
81
+ Codex and other IDE agents read `AGENTS.md`.
82
+ - The workspace MCP (read-only context tools) is wired for Cursor
83
+ (`.cursor/mcp.json`) and Codex (`.codex/config.toml`, which Codex loads for
84
+ trusted projects); `mcp/claude-desktop.sample.json` is included for Claude
85
+ Desktop.
79
86
  - Managed guidance and MCP wiring can be refreshed later with
80
87
  `minutework workspace sync-assets`.
81
88
  - Runtime-only Claude hooks are not exported into the generated workspace.
@@ -99,10 +106,32 @@ For direct third-party web hosts such as Vercel, deploy `tenant-app` only. In Ve
99
106
 
100
107
  `deploy --preview` always revalidates and recompiles before submit, prints a local-vs-remote diff, requires confirmation unless `--yes` is passed, polls typed receipts until a terminal state, and persists the last known preview deploy state under `.minutework/deploy/preview/status.json`. This alpha is preview-first; live public delivery remains follow-on.
101
108
 
109
+ ## Machine-readable output (`--json`)
110
+
111
+ `validate`, `compile`, `codegen`, and `deploy --preview` accept `--json` so an IDE coding agent can drive them unattended and parse one stable shape. With `--json` the command prints a single result envelope to stdout and nothing else:
112
+
113
+ ```json
114
+ {
115
+ "cliJsonVersion": 1,
116
+ "command": "validate | compile | codegen | deploy",
117
+ "ok": true,
118
+ "status": "ok | compiled | generated | activated | failed | rolled_back | confirmation_required | not_implemented | error",
119
+ "result": {},
120
+ "error": null
121
+ }
122
+ ```
123
+
124
+ - `ok` mirrors the process exit code: `0` when `ok` is `true`, non-zero otherwise (fail-closed).
125
+ - `result` is the typed payload — the validate report (`validate`), the compile graph (`compile` / `codegen`), or the terminal deploy receipt (`deploy`).
126
+ - `deploy --preview --json` runs unattended and never prompts. Pair it with `--yes` to authorize the deploy; without `--yes` it returns `status: "confirmation_required"` (exit 1) instead of blocking on a prompt.
127
+ - In `--json` mode the automatic diagnostic report is suppressed — the envelope and exit code are the whole contract.
128
+
102
129
  ## Bug reporting
103
130
 
104
131
  CLI failures automatically send a sanitized diagnostic report to the MinuteWork platform unless `MW_CLI_BUG_REPORTS=never` is set.
105
132
 
133
+ - Machine-readable verbs run with `--json` suppress automatic reporting; rely on the result envelope and exit code instead.
134
+
106
135
  - Automatic reports never include raw `.env` contents, tokens, source files, or full local paths.
107
136
  - The CLI keeps a local report bundle under the MinuteWork state root so you can retry or inspect what was sent.
108
137
  - Use `minutework report-bug --note "what happened"` for manual reports.
@@ -13,11 +13,23 @@ If this workspace's exported guidance looks stale or a newly added skill is
13
13
  missing, run `minutework workspace sync-assets` from the workspace root. See
14
14
  `skills/workspace-guidance-refresh/SKILL.md` for the managed refresh flow.
15
15
 
16
+ ## Workspace MCP
17
+
18
+ The MinuteWork workspace MCP server exposes read-only context tools (workspace
19
+ snapshot, schema status, capability inventory, deploy status, and a workspace
20
+ doctor; tool names are prefixed `minutework_`). Prefer these over guessing at
21
+ workspace state. It is wired for Cursor (`.cursor/mcp.json`) and Codex
22
+ (`.codex/config.toml`, loaded for trusted projects); for Claude Desktop, copy
23
+ `mcp/claude-desktop.sample.json`. Refresh all of this with
24
+ `minutework workspace sync-assets`.
25
+
16
26
  ## Skills
17
27
 
18
- This workspace includes MinuteWork architecture skills under `skills/`. Claude
19
- loads them automatically when relevant to your request. Run `/skill-name` to
20
- invoke one directly, or ask "What skills are available?" to see the full list.
28
+ This workspace includes MinuteWork architecture skills under `skills/`. Your IDE
29
+ coding agent can use them as reference: browse `skills/` and read the relevant
30
+ `SKILL.md` when a topic matches your task. In Claude Code these skills load
31
+ automatically and `/skill-name` invokes one directly; other agents (Codex,
32
+ Cursor) can open the files directly or ask "What skills are available?".
21
33
 
22
34
  ## Shell-First UI Default
23
35
 
@@ -50,6 +62,7 @@ implementation surfaces inside that pack.
50
62
  | --- | --- | --- |
51
63
  | Authenticated standalone web UI, separate tenant portal, custom client, or other explicit shell exception | `tenant-app` | This is the Next.js UI/BFF surface after shell fit has been checked. |
52
64
  | Public website, pricing, docs, blog, landing pages | `tenant-app` | Public web belongs in the web app surface; do not create a sidecar just to render pages. |
65
+ | Vuilder-owned public website, landing/blog/onboarding routes, or public-dj CMS-backed vertical site | `vuilder-public-site` | This is the Vuilder public-site template; code lives in the workspace and content comes from public-dj manifest revisions. |
53
66
  | Internal API, webhook handler, worker, cron, queue consumer, ingestion, Python-heavy compute | `sidecar` | This is backend/runtime logic, not a browser app concern. |
54
67
  | Web app plus background jobs, integrations, AI processing, or internal APIs | `both` | Put UI in `tenant-app`; put backend execution in `sidecar`. |
55
68
  | No UI, only runtime automation or processing | `sidecar` | A web app is unnecessary. |
@@ -115,11 +128,25 @@ a concrete backend responsibility such as:
115
128
 
116
129
  - Payload-aware drafting and generation should default to the runtime's existing
117
130
  AI capability, not direct browser/provider integrations.
131
+ - App-pack-owned runtime agents should be installed with `mw.runtime.agent`
132
+ seed records. Use `logical_key` as `Agent.slug`, keep prompts in installed
133
+ manifest data with trace metadata, and declare domain behavior through
134
+ `capabilities.runtime_kind`.
135
+ - Runtime-kind behavior must be implemented as a namespaced adapter/tool pack
136
+ registered with the generic runtime-kind registry. Do not put tenant or
137
+ vertical-specific branches in generic thread, intake, or conversation
138
+ services.
118
139
  - When the runtime already provides an AI capability, reuse it before adding
119
140
  bespoke model SDK calls in `tenant-app` or `sidecar`.
120
141
  - `tenant-app` should collect inputs, review/edit outputs, and call typed
121
142
  platform/runtime surfaces; do not put provider credentials or direct
122
143
  browser-to-model calls in the web app.
144
+ - Shell and `tenant-app` should render hydrated thread posts and artifacts only.
145
+ They should not run agent logic, execute tools, call providers, or infer
146
+ access policy from raw metadata.
147
+ - Agent drafts, analysis, and operator cards should carry explicit runtime
148
+ visibility such as `internal_note` or `member_only`; guest-safe content must
149
+ be server-filtered and explicitly marked safe.
123
150
  - Do not add a bespoke AI sidecar for MVP drafting/generation unless you can
124
151
  name a concrete gap in the existing runtime AI capability.
125
152
  - If runtime AI availability is unclear, inspect the linked runtime/workspace
@@ -130,6 +157,15 @@ a concrete backend responsibility such as:
130
157
 
131
158
  ## Public Site Defaults
132
159
 
160
+ - If `Template: {template_kind}` is `vuilder-public-site`, or the request says
161
+ Vuilder public site / public-dj CMS, load
162
+ `skills/vuilder-public-site-authoring/SKILL.md`.
163
+ - Vuilder public sites use public-dj `PublicSiteManifestRevision` as the CMS
164
+ content source and platform `SiteRelease.content_source` set to
165
+ `shared_public_content`; they do not use runtime `mw.core.site` as their CMS.
166
+ - Vuilder customer signup routes must create platform onboarding intents from
167
+ server-pinned release context. Browser labels must not decide runtime
168
+ provisioning behavior.
133
169
  - Treat `mw.core.site` as a runtime baseline capability that already exists. Do
134
170
  not model site work as "installing" or "reconciling" the baseline.
135
171
  - `mw.core.site` already includes `config`, `page`, `nav`, `form`, and
@@ -188,6 +224,23 @@ a concrete backend responsibility such as:
188
224
  Builder/codegen task when the installed product should render it from runtime
189
225
  data/content/workflow.
190
226
  - `sidecar` is internal-first by default.
227
+ - Do not add tenant-hardcoded code (Django management commands, seeders,
228
+ fixtures, scripts) to shared platform or runtime modules such as
229
+ `apps/runtime_app_host/management/commands/`. Tenant-shaped seeders in
230
+ shared infra are an anti-pattern. Author baseline-extending seed records
231
+ as workspace-local declarative source and let the runtime App Host's
232
+ generic install/reconcile path apply them.
233
+ - Do not gate public intake render on a hardcoded client-side token
234
+ allowlist. Public handoff tokens are platform-validated server-side
235
+ (Django-signed self-contained payloads); the workspace UI should pass
236
+ the token through to the BFF and let the platform decide validity.
237
+ - Do not put generated React or component code in public-dj database rows;
238
+ public-dj stores Vuilder CMS content and immutable manifest revisions.
239
+ - Do not use tenant `/app`, `/w/*`, or runtime `mw.core.site` as the serving or
240
+ CMS model for `vuilder-public-site`.
241
+ - Do not infer Vuilder authoring, Vuilder operator runtime, or customer tenant
242
+ provisioning from browser-provided labels. Use platform-owned onboarding
243
+ intents.
191
244
 
192
245
  See the files under `skills/` for deeper guidance on schema authoring,
193
246
  app-pack structure, published web, content sections, sidecar generation, event
@@ -2,7 +2,10 @@
2
2
  "bundle_version": 1,
3
3
  "render": {
4
4
  "template": "CLAUDE.md.template",
5
- "output": "CLAUDE.md"
5
+ "outputs": [
6
+ "CLAUDE.md",
7
+ "AGENTS.md"
8
+ ]
6
9
  },
7
10
  "directories": {
8
11
  "skills": "skills"
@@ -16,7 +16,9 @@ receive:
16
16
  - Builder should compose shared substrate before generating bespoke tenant code
17
17
  - `tenant-app` is the combined public plus private web starter
18
18
  - `mw.core.site` is a runtime baseline capability
19
- - public authoring is runtime/CMS-backed
19
+ - tenant public authoring is runtime/CMS-backed through `mw.core.site`
20
+ - Vuilder-owned public sites use `vuilder-public-site` and public-dj CMS
21
+ manifests
20
22
  - anonymous live delivery should prefer published snapshots
21
23
  - AI drafting/generation should reuse existing runtime AI capability before new
22
24
  model/provider integrations
@@ -27,6 +29,7 @@ receive:
27
29
  Generated-workspace-first guidance should live here, especially:
28
30
 
29
31
  - `generated-workspace-architecture/SKILL.md`
32
+ - `vuilder-public-site-authoring/SKILL.md`
30
33
  - `workspace-guidance-refresh/SKILL.md`
31
34
  - `shell-architecture/SKILL.md`
32
35
  - `runtime-capability-inventory/SKILL.md`
@@ -33,6 +33,12 @@ An `app pack` is the shipped product unit.
33
33
  - For AI-assisted drafting MVPs, let `tenant-app` collect/edit inputs and
34
34
  outputs while an existing runtime AI capability produces the draft when
35
35
  available; ask or inspect context if that availability is unclear.
36
+ - For app-pack-owned agents, prefer a declarative `mw.runtime.agent` seed plus
37
+ a namespaced `capabilities.runtime_kind` adapter over tenant-specific
38
+ branches in shared runtime services.
39
+ - Shell and `tenant-app` surfaces should render hydrated thread posts and
40
+ artifacts; they should not run agent logic, execute tools, call providers, or
41
+ infer access policy from artifact metadata.
36
42
  - Public-site authoring should stay CMS/runtime-backed, while anonymous live
37
43
  delivery should prefer published snapshots.
38
44
  - Prefer this decision order before writing greenfield code:
@@ -52,3 +58,54 @@ An `app pack` is the shipped product unit.
52
58
  extension that can later collapse into a reusable primitive, baseline
53
59
  capability, reviewed skill, or app pack.
54
60
  - Keep platform-owned runtime source untouched; author only workspace-local generated source.
61
+
62
+ ## Baseline-Extending Seed Records
63
+
64
+ - Builder authors records the runtime should hold (e.g. `mw.core.site.form`,
65
+ `mw.core.site.page`, `mw.core.site.nav`) as workspace-local declarative
66
+ source under `schemas/`, collected into a `SeedDataManifest` that the
67
+ compiler discovers and the CLI ships to the tenant runtime via the
68
+ install pipe. Treat these as durable Builder artifacts even when no
69
+ install pipe has applied them yet.
70
+ - Concrete authoring convention (envelope pinned in
71
+ `runtime_app_pack_contract.md` sec 5.3): a single named
72
+ `seedDataManifest` export on the schema entrypoint module namespace,
73
+ either directly in `schemas/schema.ts` or re-exported from a
74
+ per-domain sibling (e.g. `export { seedDataManifest } from
75
+ "./site-forms.js"`). Records are `{ schema_key; logical_key; data }`;
76
+ only `schema_key` values registered in the runtime's
77
+ `SCHEMA_KEY_UPSERT_REGISTRY` may ship in the active manifest.
78
+ - For `mw.core.site.form`, do not author `form_key` or `app_pack_ref` inside
79
+ `data`; the install pipe injects both. Keep `surface_key == form_key` for
80
+ public intake BFFs.
81
+ - For `mw.runtime.agent`, use `logical_key` as the runtime `Agent.slug`.
82
+ Author stable agent fields in `data` such as `name`, `system_instruction`,
83
+ `enabled_tools`, `trigger_intents`, `channels_enabled`, and
84
+ `capabilities.runtime_kind`. The install pipe injects tenant/app-pack
85
+ ownership and prompt trace metadata. Same app-pack lineage may update the
86
+ slug; a different pack claiming the same tenant slug fails transactionally.
87
+ - Runtime-kind behavior must live behind a namespaced adapter/tool pack
88
+ registered with the runtime-kind registry. Generic runtime services call the
89
+ registry and must not branch on tenant names, app names, or domain-specific
90
+ runtime kinds.
91
+ - Agent outputs meant for operator/member review should be written as hydrated
92
+ thread posts/artifacts with explicit visibility such as `internal_note` or
93
+ `member_only`. Guest/public surfaces only receive guest-safe visibility after
94
+ server-side filtering.
95
+ - The install path onto a tenant runtime is the runtime App Host's generic
96
+ reconcile loop (designed in `runtime_app_pack_contract.md` sec 3, 5, 11),
97
+ invoked from the workspace via the CLI deploy verb. Per-schema upsert
98
+ services on the runtime (e.g. `upsert_site_form`) are the building blocks
99
+ that loop calls; they are not directly Builder-callable.
100
+ - Do not bypass the install pipe by writing a tenant-hardcoded Django
101
+ management command, seeder, or fixture in shared platform/runtime modules.
102
+ That is an anti-pattern; the right Builder response when the install pipe
103
+ is missing or unshipped is to author the seed source here and file the
104
+ missing-pipe gap (see `capability-gap-reporting/SKILL.md`).
105
+ - An operator may apply a one-shot Django shell call to a runtime DB as a
106
+ stopgap to unblock end-to-end testing; treat it as out-of-band, not as
107
+ Builder-committed source, and do not codify it as a recurring path.
108
+ - The v1 invariant `surface_key == form_key` (see
109
+ `contract-first-public-intake/SKILL.md`) constrains the `form_key` value
110
+ on `mw.core.site.form` seeds: it must equal the public surface key the
111
+ BFF sends.
@@ -63,6 +63,28 @@ guest-continuity threads, public submission routing, or claim-after-auth flows.
63
63
  on retries.
64
64
  - For follow-on automation, treat the runtime submission record as the durable
65
65
  source that can drive later `action:` or `flow:` execution.
66
+ - Do not gate public intake render on a hardcoded client-side token
67
+ allowlist. The handoff token is a platform-issued, server-validated
68
+ payload; the workspace UI should pass it through to the BFF and let the
69
+ platform decide validity. A client-side allowlist drifts from the real
70
+ token registry and silently breaks once real tokens are minted.
71
+
72
+ ## Vuilder Vertical Onboarding
73
+
74
+ - For customer onboarding from a Vuilder public site, also read
75
+ `vuilder-public-site-authoring/SKILL.md`.
76
+ - Use the platform-owned `OnboardingIntent` contract. Supported intent kinds
77
+ are `vuilder_authoring`, `vuilder_operator_runtime`, and
78
+ `customer_vertical_signup`.
79
+ - A Vuilder public-site BFF should create `customer_vertical_signup` intents
80
+ from server-pinned release context, not from browser-provided provisioning
81
+ labels.
82
+ - Trusted fields such as Vuilder workspace, published property/release,
83
+ public-dj manifest ref/digest, vertical package ref/digest, and onboarding
84
+ flow ref/digest must come from platform/publication context.
85
+ - Browser clients may submit intake answers only. They must not submit trusted
86
+ package refs, manifest refs, workspace identity, runtime provisioning kind, or
87
+ billing disposition.
66
88
 
67
89
  ## Use This Skill To Decide
68
90
 
@@ -22,6 +22,12 @@ the monorepo or a live tenant runtime.
22
22
  - `tenant-app` and optional `sidecar` are implementation surfaces inside the
23
23
  tenant product, not the whole architecture.
24
24
  - `tenant-app` is the combined public plus private web starter.
25
+ - `vuilder-public-site` is a Vuilder-owned public-site authoring workspace for
26
+ landing, blog, and onboarding routes backed by public-dj CMS manifests.
27
+ - If `template_kind` is `vuilder-public-site`, or the workspace profile says
28
+ `public_dj_cms`, read `vuilder-public-site-authoring/SKILL.md`.
29
+ - `vuilder-public-site` does not own tenant `/app`, `/w/*`, or runtime
30
+ `mw.core.site`; it renders public-dj content pinned by manifest ref/digest.
25
31
  - For member-facing collaboration and operator work, the primary product surface
26
32
  is the gateway shell under `/w/[workspace_slug]`. Do not default to a bespoke
27
33
  standalone tenant frontend when the work belongs in shell threads, cards, or
@@ -9,6 +9,15 @@ Use this skill when the request touches public-site delivery, published-web
9
9
  flows, or the default MinuteWork site model.
10
10
 
11
11
  - Treat `mw.core.site` as a runtime baseline capability that already exists.
12
+ - For Vuilder-owned public websites, read
13
+ `vuilder-public-site-authoring/SKILL.md`; public-dj
14
+ `PublicSiteManifestRevision` is the CMS/release content source instead of
15
+ runtime `mw.core.site`.
16
+ - Vuilder public-site releases use
17
+ `SiteRelease.content_source = shared_public_content`, with shared public
18
+ content refs pointing to an immutable public-dj manifest ref and digest.
19
+ - Tenant/customer content created after customer provisioning remains
20
+ runtime-canonical through `mw.core.site` and installed app-pack data.
12
21
  - `tenant-app` is the combined web starter for public routes plus the private
13
22
  `/app` workspace.
14
23
  - Author public content against runtime/CMS records, not a fixed in-repo site
@@ -56,6 +65,9 @@ flows, or the default MinuteWork site model.
56
65
  form/submission model.
57
66
  - Form and submission records already carry routing, identity-resolution, and
58
67
  continuity fields for public intake and follow-up flows.
68
+ - Seed dispatch and install-time seed manifests that target `mw.core.site.form`
69
+ require the baseline `mw.core.site` pack to be installed first so `SCHEMA_FORM`
70
+ is registered before upsert handling runs.
59
71
 
60
72
  ## Current Baseline Catalog
61
73
 
@@ -44,6 +44,23 @@ generated Builder workspace.
44
44
  - installed app packs and their class/status
45
45
  - sidecar processes, entrypoints, ports, and health state
46
46
  - live runtime descriptor outputs such as public-site route prefixes
47
+ - In the native Builder Harness path, the platform-dispatched
48
+ `RuntimeHarnessDiagnosticsV1` snapshot is a safe linked-runtime surface for
49
+ Builder workspace/session status, engine readiness, primitive inventory,
50
+ installed app-pack status counts, app-host baseline readiness, database
51
+ migration counts, event-bus counts, and warnings. Treat it as planning
52
+ context, not as an install or provisioning authority.
53
+ - In the Vuilder Harness path, workspace kickoff uses the platform-dispatched
54
+ `/api/v1/builder/workspaces/ensure/` runtime endpoint to create or reuse the
55
+ hosted `BuilderWorkspace` and context snapshot only. Do not infer sandbox
56
+ files, engine sessions, Claude execution, or app-pack installs from this
57
+ kickoff.
58
+ - `BuilderMaterializationPreflightV1` from
59
+ `/api/v1/builder/materialization/preflight/` is a safe readiness report for a
60
+ digest-reviewed architecture and template key. Treat its findings, policy
61
+ digest, preflight digest, sandbox driver, and artifact counts as preflight
62
+ context only; actual sandbox writes, codegen, installation, activation, and
63
+ publication remain separate effectful actions.
47
64
  - Linked runtime surfaces are the authoritative source for live runtime
48
65
  inspection, but do not assume every generated workspace has them.
49
66
  - Use the more specific workspace MCP tools as needed:
@@ -20,6 +20,24 @@ Use this skill when the request needs tenant-defined data structures.
20
20
  `platform_submission_ref` and preserve the original record on retry.
21
21
  - The default lookup fields that usually deserve indexes for public intake are
22
22
  `platform_submission_ref`, `form_key`, and `continuity_ref`.
23
+ - Seed manifests or install-time seeds that upsert `mw.core.site.form` depend on
24
+ the baseline `mw.core.site` pack already being present so `SCHEMA_FORM` is
25
+ registered before dispatch.
26
+ - Seed manifests may also install app-pack-owned runtime agents through
27
+ `mw.runtime.agent`; use `logical_key` as the `Agent.slug`, put stable agent
28
+ fields under `data`, and let the runtime inject tenant/app-pack ownership.
29
+ - For `mw.runtime.agent`, declare `capabilities.runtime_kind` when the agent
30
+ needs domain behavior. The runtime resolves that value through the generic
31
+ runtime-kind adapter registry; do not encode domain branching in generic
32
+ thread, intake, or conversation services.
33
+ - Agent prompts should be installed as versioned manifest data with traceable
34
+ source metadata. Do not rely on live workspace file paths at runtime.
35
+ - Runtime posts and artifacts carry first-class visibility. Guest-safe
36
+ serializers fail closed, so author internal drafts, analysis, and operator
37
+ cards as `internal_note` or `member_only` until explicitly made guest-safe.
38
+ - Runtime Builder diagnostics may expose safe schema/app-host readiness summaries
39
+ such as active schema registration counts; treat them as planning context, not
40
+ as schema definitions or install authority.
23
41
 
24
42
  ## Current mw.core.site Baseline
25
43
 
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: vuilder-discovery-output-contract
3
+ description: "Constrain Vuilder discovery to AI-native service operations and MinuteWork-buildable delivery systems instead of generic startup ideas."
4
+ ---
5
+
6
+ # Vuilder Discovery Output Contract
7
+
8
+ Use this skill when Vuilder discovery is deciding what to propose from a user's
9
+ profile, resume, pasted context, or refinement request.
10
+
11
+ Discovery is pre-workspace. It must produce a buildable service direction that
12
+ can flow into the paid Planning Blueprint and later Builder handoff. It must not
13
+ pretend to create projects, runtimes, releases, packages, secrets, or live
14
+ published surfaces.
15
+
16
+ ## Core Output
17
+
18
+ Discovery cards are build cards, not founder idea cards.
19
+
20
+ Each card must describe:
21
+
22
+ - an AI-native service outcome the operator can credibly deliver
23
+ - the buyer or internal team receiving that service outcome
24
+ - evidence from the user's profile that makes the operator credible
25
+ - the MinuteWork delivery system Builder can prepare
26
+ - the first workflow the system should support
27
+ - the runtime records, AI workers, Builder surfaces, and artifacts involved
28
+ - capability gap candidates for unsupported substrate
29
+
30
+ Discovery should ask:
31
+
32
+ > What service outcome can this operator credibly deliver, and what
33
+ > MinuteWork-supported system can Builder create to help deliver it?
34
+
35
+ Do not ask:
36
+
37
+ > What SaaS startup should this person found?
38
+
39
+ ## Builder Constraints
40
+
41
+ - Compose shared MinuteWork substrate before bespoke code.
42
+ - Treat the app pack as the shipped product unit.
43
+ - Check shell fit first for member-facing collaboration and operator work.
44
+ - Use `tenant-app` only for public surfaces or explicit standalone UI
45
+ exceptions after shell fit has been checked.
46
+ - Use `sidecar` only for concrete backend/runtime responsibilities such as
47
+ webhooks, workers, schedulers, external sync, or Python-heavy compute.
48
+ - Reuse runtime AI for drafting/generation before proposing bespoke provider
49
+ calls in `tenant-app` or `sidecar`.
50
+ - Per-customer deliverables should come from runtime data/content/workflows, not
51
+ fresh Builder/codegen work for each customer.
52
+ - Unsupported substrate becomes a capability gap candidate, not a polished
53
+ promise.
54
+
55
+ ## Banned Framing
56
+
57
+ Do not make these the primary discovery output:
58
+
59
+ - generic SaaS ideas
60
+ - founder coaching
61
+ - TAM-first or ARR-first startup cards
62
+ - broad knowledge-management products without a specific service workflow
63
+ - unsupported "Builder can build anything" claims
64
+
65
+ Service packaging, pricing, market notes, or revenue hypotheses may appear as
66
+ secondary context only after the service outcome and buildable system are clear.
67
+
68
+ ## Discovery Tool Use
69
+
70
+ The discovery agent may use read-only evaluation and research tools to sharpen
71
+ cards before it saves proposal fields:
72
+
73
+ - `extract_workflows_from_context` for repeatable work, bottlenecks, buyers, and
74
+ AI workforce jobs already implied by the user's context.
75
+ - `search_industry_examples` for curated MinuteWork service-business patterns.
76
+ This is not open web search.
77
+ - `estimate_market_pricing` for bounded pilot and retainer ranges with explicit
78
+ assumptions and uncertainty.
79
+ - `score_service_card_fit` for use-it-first fit, sell-it-back potential, buyer
80
+ urgency, founder advantage, implementation difficulty, and jargon risk.
81
+ - `rewrite_card_for_plain_language` for advisory rewrites of user-facing fields.
82
+ - `validate_discovery_proposal` before saving or marking a proposal ready.
83
+ - `research_unknown_entity` only as a confidence-gated fallback for an obscure
84
+ company, product, acronym, vendor, or niche workflow already present in the
85
+ resume, pasted context, or user message.
86
+
87
+ Do not use web research for well-known entities or general concepts the model
88
+ already understands, such as ADP, Workday, Fidelity, COBRA, or 401k, unless the
89
+ user explicitly asks for current/recent information. Web results are cited
90
+ context evidence, not authority for market-size or revenue claims.
91
+
92
+ ## Required Build Card Fields
93
+
94
+ Use the `DiscoveryBuildCardV1` shape:
95
+
96
+ - `id`
97
+ - `plain_title`
98
+ - `plain_summary`
99
+ - `work_you_already_do`
100
+ - `ai_workforce_summary`
101
+ - `use_it_first`
102
+ - `sell_it_back`
103
+ - `first_pilot`
104
+ - `market_size_estimate`
105
+ - `yearly_revenue_potential`
106
+ - `pilot_pricing`
107
+ - `why_you_can_win`
108
+ - `who_it_helps`
109
+ - `what_minutework_helps_with`
110
+ - `service_outcome`
111
+ - `buyer`
112
+ - `operator_fit_summary`
113
+ - `evidence_from_profile`
114
+ - `minute_work_build`
115
+ - `builder_surfaces`
116
+ - `shell_fit`
117
+ - `shell_surface`
118
+ - `standalone_ui_exception_reason`
119
+ - `first_workflow`
120
+ - `runtime_records`
121
+ - `ai_workforce`
122
+ - `expected_artifact_graph`
123
+ - `required_capabilities`
124
+ - `capability_gap_candidates`
125
+ - `paid_blueprint_will_create`
126
+ - optional `service_packaging`
127
+
128
+ Plain-language fields are user-facing. They must express MinuteWork's loop:
129
+ build the AI workforce from work the operator already does, use it first under
130
+ their own judgment, then sell it back to their industry. Do not expose Builder
131
+ jargon such as app pack, schemas, runtime records, right rail, runtime agent seed,
132
+ or capability gaps in those fields.
133
+
134
+ Capability gap candidates use the same layer vocabulary as
135
+ `MinuteWorkCapabilityGapReportV1`, but they are not the workspace gap report.
136
+ The actual gap report is created later inside the generated Builder workspace.
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: vuilder-public-site-authoring
3
+ description: "Vuilder-owned public websites, public-dj CMS manifests, vuilder-public-site template work, or customer onboarding from a Vuilder vertical site."
4
+ ---
5
+
6
+ # Vuilder Public Site Authoring
7
+
8
+ Use this skill when the request touches a Vuilder-owned public website,
9
+ `vuilder-public-site`, public-dj CMS content, or customer signup through a
10
+ Vuilder vertical.
11
+
12
+ ## System Boundary
13
+
14
+ - Vuilder public sites are authored in a Vuilder builder/operator workspace.
15
+ - Generated React, Next.js, route, component, and styling code belongs in the
16
+ workspace/template source tree, not in public-dj database rows.
17
+ - public-dj is the CMS and revision store for Vuilder-owned public content:
18
+ pages, blog posts, onboarding flow content, navigation, brand profile, media,
19
+ theme tokens, and approved package/install metadata.
20
+ - Platform owns `PublishedWebProperty`, `SiteRelease`, domains, hosted
21
+ deployment receipts, onboarding intents, billing disposition, and runtime
22
+ provisioning.
23
+ - Tenant/customer runtime content after customer provisioning remains
24
+ runtime-canonical through `mw.core.site` and app-pack data.
25
+
26
+ ## Template Contract
27
+
28
+ - Use `runtime/builder/templates/vuilder-public-site` for Vuilder-owned landing,
29
+ blog, public onboarding, and other public marketing routes.
30
+ - The template reads public-dj through a server-only CMS adapter.
31
+ - Expected release env includes `MW_PUBLIC_DJ_BASE_URL`,
32
+ `MW_PUBLIC_CONTENT_REF`, `MW_PUBLIC_CONTENT_DIGEST`, and
33
+ `MW_PUBLIC_DJ_READ_TOKEN`.
34
+ - Resolve CMS data by immutable `content_ref + digest`; do not render live
35
+ public pages from mutable drafts.
36
+ - The template may be released as `static_export` or `ssr_container` behind the
37
+ hosted deployment provider abstraction.
38
+
39
+ ## Onboarding Intent Rules
40
+
41
+ - Vuilder authoring signup uses `vuilder_authoring`: create workspace/profile,
42
+ no runtime VM.
43
+ - Vuilder upgrade uses `vuilder_operator_runtime`: provision the Vuilder's own
44
+ builder/operator VM and materialize the public-site template.
45
+ - Customer signup through the Vuilder site uses `customer_vertical_signup`:
46
+ provision the customer's tenant runtime and install the approved vertical
47
+ package.
48
+ - The public-site BFF creates customer onboarding intents from server-pinned
49
+ release context: property/release refs, manifest ref/digest, package
50
+ ref/digest, onboarding flow ref/digest, and Vuilder workspace context.
51
+ - Browser intake answers are untrusted input. Browsers must not author package
52
+ refs, manifest refs, provisioning kind, or workspace identity.
53
+
54
+ ## Release Rules
55
+
56
+ - Platform `SiteRelease.content_source` should be `shared_public_content` for a
57
+ Vuilder public site.
58
+ - `shared_public_content_ref` and `shared_public_content_digest` point to the
59
+ public-dj `PublicSiteManifestRevision`.
60
+ - Live activation remains a platform/manual approval action using approved
61
+ public content and package refs.
62
+ - Public-dj may store markdown/content/media/theme revisions; it must not store
63
+ or execute generated React component code as database content.
64
+
65
+ ## Hard Rules
66
+
67
+ - Do not use tenant `/w/*`, `/app`, or the universal tenant shell in
68
+ `vuilder-public-site`.
69
+ - Do not use runtime `mw.core.site` as the CMS for Vuilder-owned public
70
+ websites.
71
+ - Do not infer provisioning behavior from browser labels, hostnames, or query
72
+ params; use platform-owned onboarding intents.
73
+ - Do not expose platform credentials, public-dj tokens, package refs, or
74
+ OpenRouter/provider keys to browser bundles.
75
+ - Do not let public-dj execute tenant runtime code or import runtime Django
76
+ apps for public-site rendering.
@@ -1,6 +1,12 @@
1
1
  # FastAPI Sidecar Template
2
2
 
3
- This directory is the canonical internal FastAPI sidecar scaffold for Builder. Builder will later materialize this bundle into `BuilderWorkspace.sandbox_root/sidecar/` and edit only that workspace copy.
3
+ This directory is the canonical internal FastAPI sidecar scaffold for Builder.
4
+ Builder will later materialize this bundle into
5
+ `BuilderWorkspace.sandbox_root/sidecar/` and edit only that workspace copy.
6
+
7
+ On managed tenant VMs, `BuilderWorkspace.sandbox_root` normally lives under
8
+ `/srv/minutework/workspaces/<workspace_id>/`, so the Builder-edited sidecar copy
9
+ is typically `/srv/minutework/workspaces/<workspace_id>/sidecar/`.
4
10
 
5
11
  `seed_source` intentionally points back to this directory because the canonical bundle itself is the v1 source of truth. There is no separate `apps/*` seed app for this template.
6
12