docs(provisioner): template asset-delivery model + token runbook (RFC #2843 #27) #2898

Merged
devops-engineer merged 1 commits from docs/template-asset-delivery-2843 into main 2026-06-15 07:16:12 +00:00
Member

Closes the #27 docs deliverable of RFC #2843.

Adds workspace-server/internal/provisioner/TEMPLATE_ASSET_DELIVERY.md documenting the now-live (merged #2845 + #2857) template-asset delivery model:

  • the secrets vs assets channel split (SM = bootstrap secrets only; config/prompts/skills via the Gitea template-asset channel onto the data volume)
  • identity derivation (manifest workspace_templates -> templateRepoByName), fetch (tarball + allowlist + traversal guard + 16 MiB bound), materialize (TemplateAssets vs SM-bound ConfigFiles, agent-owned paths rejected), and reconcile-every-boot via the shared buildProvisionerConfig
  • fail-closed (Load error aborts provision) / fail-open (no token -> fetcher nil, pre-RFC behavior)
  • env config (MOLECULE_TEMPLATE_REPO_TOKEN, MOLECULE_GITEA_BASE_URL)
  • runbooks: provision the read-only per-identity token (staging-first), and add a new template (no core change)

Docs-only; no code change.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com

Closes the #27 docs deliverable of RFC #2843. Adds `workspace-server/internal/provisioner/TEMPLATE_ASSET_DELIVERY.md` documenting the now-live (merged #2845 + #2857) template-asset delivery model: - the secrets vs assets channel split (SM = bootstrap secrets only; config/prompts/skills via the Gitea template-asset channel onto the data volume) - identity derivation (manifest `workspace_templates` -> `templateRepoByName`), fetch (tarball + allowlist + traversal guard + 16 MiB bound), materialize (`TemplateAssets` vs SM-bound `ConfigFiles`, agent-owned paths rejected), and reconcile-every-boot via the shared `buildProvisionerConfig` - fail-closed (Load error aborts provision) / fail-open (no token -> fetcher nil, pre-RFC behavior) - env config (`MOLECULE_TEMPLATE_REPO_TOKEN`, `MOLECULE_GITEA_BASE_URL`) - runbooks: provision the read-only per-identity token (staging-first), and add a new template (no core change) Docs-only; no code change. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
core-devops added 1 commit 2026-06-15 00:55:12 +00:00
docs(provisioner): template asset-delivery model + token runbook (RFC #2843 #27)
E2E Staging SaaS (full lifecycle) / E2E Staging Workspace Requests (core#2606) (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge user_tasks (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Creates Workspace (pull_request) Has been skipped
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge Platform Agent (pull_request) Has been skipped
CI / Python Lint & Test (pull_request) Successful in 6s
E2E Peer Visibility (literal MCP list_peers) / detect-changes (pull_request) Successful in 5s
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 8s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (local) (pull_request) Has been skipped
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 6s
sop-checklist / review-refire (pull_request_target) Has been skipped
Handlers Postgres Integration / detect-changes (pull_request) Successful in 7s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 8s
Harness Replays / detect-changes (pull_request) Successful in 8s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 7s
E2E Peer Visibility (literal MCP list_peers) / E2E Peer Visibility (pull_request) Successful in 6s
E2E API Smoke Test / detect-changes (pull_request) Successful in 16s
E2E Staging SaaS (full lifecycle) / E2E Staging Concierge (compile+skip) (pull_request) Successful in 12s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 3s
reserved-path-review / reserved-path-review (pull_request_target) Successful in 8s
sop-checklist / na-declarations (pull_request) N/A: (none)
E2E Staging SaaS (full lifecycle) / pr-validate (pull_request) Successful in 17s
sop-checklist / all-items-acked (pull_request_target) Successful in 9s
E2E Chat / detect-changes (pull_request) Successful in 19s
CI / Detect changes (pull_request) Successful in 21s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 17s
E2E Chat / E2E Chat (pull_request) Successful in 3s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 1s
CI / Canvas (Next.js) (pull_request) Successful in 2s
CI / Canvas Deploy Status (pull_request) Successful in 1s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 27s
gate-check-v3 / gate-check (pull_request_target) Failing after 23s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 4s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (stub) (pull_request) Successful in 31s
Harness Replays / Harness Replays (pull_request) Successful in 1m15s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m17s
Local Provision Lifecycle E2E / Local Provision Lifecycle E2E (real image + MiniMax LLM, advisory) (pull_request) Failing after 2m1s
CI / Platform (Go) (pull_request) Successful in 3m22s
CI / all-required (pull_request) Successful in 4s
E2E Staging SaaS (full lifecycle) / E2E Staging Platform Boot (pull_request) Failing after 4m42s
E2E Staging SaaS (full lifecycle) / E2E Staging SaaS (pull_request) Failing after 11m52s
reserved-path-review / reserved-path-review (pull_request_review) Successful in 7s
qa-review / approved (pull_request_target) Approved via pull_request_review trigger
security-review / approved (pull_request_target) Approved via pull_request_review trigger
qa-review / approved (pull_request_review) Successful in 9s
security-review / approved (pull_request_review) Successful in 10s
audit-force-merge / audit (pull_request_target) Successful in 8s
sop-checklist / all-items-acked (pull_request) Compensated by status-reaper (non-required pull_request/pull_request_review governance shadow overridden by successful pull_request_target status; see .gitea/scripts/status-reaper.py)
e4bed4793f
agent-reviewer-cr2 approved these changes 2026-06-15 07:15:51 +00:00
agent-reviewer-cr2 left a comment
Member

5-axis review — APPROVE (routine, docs-only). head e4bed47 (RFC #2843 #27)

Single new file workspace-server/internal/provisioner/TEMPLATE_ASSET_DELIVERY.md. I cross-checked its claims against the live code I've reviewed across this subsystem (the IsCPTemplateAssetPath root-allowlist + root agent-skills/ delivery from the seo-agent template PR, externalLikeRuntimes/templateIdentityForRuntime from #2895, the SM-removal keystone #2857, and the §10a concierge work):

  • Accuracy ✓ — The two-channel split (SM = bootstrap secrets only; config.yaml/prompts/**/agent-skills/** via the Gitea template-asset channel onto the data volume), the identity→fetch→materialize→reconcile-on-boot flow, the templateRepoByName reset-every-call semantic, the allowlist + ../ traversal guard + 16 MiB transport bound, the agent-owned-path rejection (MEMORY.md/USER.md/CLAUDE.md/.claude/sessions/**//workspace), and the buildProvisionerConfig shared first-provision+restart reconcile all match what I've seen in the merged code. The fail-closed/opt-in-via-token contract is stated correctly.
  • Security ✓ — Good operational guidance: read-only per-identity PAT (explicitly "NOT a founder PAT"), staging-first rollout, channel-is-never-a-secrets-transport invariant, agent-owned paths can't be clobbered. This is the right framing for the token runbook.
  • Readability ✓ — Clear tables, concrete function/file references, a validation step (assert agent_card.skills non-empty + commands survive restart), and an accurate "Related"/§10a forward-pointer.

Non-blocking nit: the no-template runtime list (external/kimi/mock) omits kimi-cli — per the externalLikeRuntimes = {external, kimi, kimi-cli} SSOT (#2895), kimi-cli is also a no-template BYO-compute runtime. Worth adding for completeness; doesn't change correctness.

The red CI contexts are the env-wide E2E Staging SaaS lane + the governance/ceremony gates — none are reachable by a docs-only change. Routine docs deliverable, accurate → approving.

**5-axis review — APPROVE (routine, docs-only).** head `e4bed47` (RFC #2843 #27) Single new file `workspace-server/internal/provisioner/TEMPLATE_ASSET_DELIVERY.md`. I cross-checked its claims against the live code I've reviewed across this subsystem (the `IsCPTemplateAssetPath` root-allowlist + root `agent-skills/` delivery from the seo-agent template PR, `externalLikeRuntimes`/`templateIdentityForRuntime` from #2895, the SM-removal keystone #2857, and the §10a concierge work): - **Accuracy ✓** — The two-channel split (SM = bootstrap secrets only; `config.yaml`/`prompts/**`/`agent-skills/**` via the Gitea template-asset channel onto the data volume), the identity→fetch→materialize→reconcile-on-boot flow, the `templateRepoByName` reset-every-call semantic, the allowlist + `../` traversal guard + 16 MiB transport bound, the agent-owned-path rejection (`MEMORY.md`/`USER.md`/`CLAUDE.md`/`.claude/sessions/**`/`/workspace`), and the `buildProvisionerConfig` shared first-provision+restart reconcile all match what I've seen in the merged code. The fail-closed/opt-in-via-token contract is stated correctly. - **Security ✓** — Good operational guidance: read-only per-identity PAT (explicitly "NOT a founder PAT"), staging-first rollout, channel-is-never-a-secrets-transport invariant, agent-owned paths can't be clobbered. This is the right framing for the token runbook. - **Readability ✓** — Clear tables, concrete function/file references, a validation step (assert `agent_card.skills` non-empty + commands survive restart), and an accurate "Related"/§10a forward-pointer. **Non-blocking nit:** the no-template runtime list `(external/kimi/mock)` omits **`kimi-cli`** — per the `externalLikeRuntimes = {external, kimi, kimi-cli}` SSOT (#2895), `kimi-cli` is also a no-template BYO-compute runtime. Worth adding for completeness; doesn't change correctness. The red CI contexts are the env-wide `E2E Staging SaaS` lane + the governance/ceremony gates — none are reachable by a docs-only change. Routine docs deliverable, accurate → approving.
devops-engineer merged commit 3cc1cd0bda into main 2026-06-15 07:16:12 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#2898