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.
- package/EXTERNAL_ALPHA.md +15 -4
- package/README.md +31 -2
- package/assets/claude-local/CLAUDE.md.template +56 -3
- package/assets/claude-local/bundle.json +4 -1
- package/assets/claude-local/skills/README.md +4 -1
- package/assets/claude-local/skills/app-pack-authoring/SKILL.md +57 -0
- package/assets/claude-local/skills/contract-first-public-intake/SKILL.md +22 -0
- package/assets/claude-local/skills/generated-workspace-architecture/SKILL.md +6 -0
- package/assets/claude-local/skills/published-web-and-mw-core-site/SKILL.md +12 -0
- package/assets/claude-local/skills/runtime-capability-inventory/SKILL.md +17 -0
- package/assets/claude-local/skills/schema-engine/SKILL.md +18 -0
- package/assets/claude-local/skills/vuilder-discovery-output-contract/SKILL.md +136 -0
- package/assets/claude-local/skills/vuilder-public-site-authoring/SKILL.md +76 -0
- package/assets/templates/fastapi-sidecar/README.md +7 -1
- package/assets/templates/fastapi-sidecar/template.schema.json +4 -2
- package/assets/templates/next-tenant-app/README.md +11 -3
- package/assets/templates/next-tenant-app/template.schema.json +4 -2
- package/dist/cli-json.d.ts +28 -0
- package/dist/cli-json.js +20 -0
- package/dist/cli-json.js.map +1 -0
- package/dist/compile.js +71 -7
- package/dist/compile.js.map +1 -1
- package/dist/deploy.js +147 -14
- package/dist/deploy.js.map +1 -1
- package/dist/index.js +35 -14
- package/dist/index.js.map +1 -1
- package/dist/publish.d.ts +13 -0
- package/dist/publish.js +56 -0
- package/dist/publish.js.map +1 -0
- package/dist/runtime-package.d.ts +3 -1
- package/dist/runtime-package.js +13 -0
- package/dist/runtime-package.js.map +1 -1
- package/dist/workspace-assets.js +37 -5
- package/dist/workspace-assets.js.map +1 -1
- package/dist/workspace.js +2 -0
- package/dist/workspace.js.map +1 -1
- package/package.json +2 -2
- 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`
|
|
62
|
-
|
|
63
|
-
and `mw.core.site`
|
|
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`
|
|
78
|
-
|
|
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/`.
|
|
19
|
-
|
|
20
|
-
|
|
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
|
|
@@ -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.
|
|
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
|
|