<objective> Write the first four FOUND-03 integration gate notes. Hosts.md is the critical path: plan 01-03 reads its Node requirement to set package.json engines (D-09).
Purpose: Satisfy the D-16 documentation-gate contract for four of eight external sources so Phase 3 modules have a sourced basis. Output: Four gate notes, each with URL(s), read date, questions, sourced answers, and "not documented" markers. </objective>
<execution_context> @~/.claude/gsd-core/workflows/execute-plan.md @~/.claude/gsd-core/templates/summary.md </execution_context>
<context> @.planning/PROJECT.md @.planning/ROADMAP.md @.planning/phases/01-scaffold-and-frozen-contracts/01-CONTEXT.md @.planning/phases/01-scaffold-and-frozen-contracts/01-PATTERNS.md </context>
<tasks>
<name>Task 1: Write docs/integration/hosts.md (critical path for engines)</name> <files>docs/integration/hosts.md</files> <read_first> - .planning/phases/01-scaffold-and-frozen-contracts/01-CONTEXT.md (D-16, D-17, D-18 hosts.md row: Node or Bun constraint per host; plugin, MCP, ACP loading model; capability gaps) - .planning/phases/01-scaffold-and-frozen-contracts/01-PATTERNS.md (note layout: URL, read date, questions, sourced answers, "not documented") </read_first> <action>Read the official documentation for each host runtime (Omp, Muse Code, Claude Code, Grok Build, Hermes Agent) at execution time from official sources discovered then, never from memory; record each host's Node or Bun requirement, its plugin/MCP/ACP loading model, and capability gaps in docs/integration/hosts.md with sections: official URL(s), read date in ISO 8601, the spec questions asked, each answer with its source quote or section, and the literal text "not documented" for any unanswered question per D-16. Record the single Node requirement that plan 01-03 will use for the engines field. Note the open questions this note leaves and that it blocks engines and the build target per D-18. Per D-03 record the host-write-tool question as open for Phase 5 only if the Omp docs speak to it; otherwise leave it to omp.md.</action> <acceptance_criteria> - docs/integration/hosts.md contains a URL section with at least one official-source URL and an ISO 8601 read date line - docs/integration/hosts.md names the Node requirement that blocks the engines field per D-09 - docs/integration/hosts.md contains the literal text "not documented" for every question the docs do not answer - docs/integration/hosts.md contains no line starting with /root/, /home/, or /Users/ </acceptance_criteria> <verify> <automated>grep -c 'not documented' docs/integration/hosts.md; grep -c 'http' docs/integration/hosts.md</automated> <fails_when>non-zero exit, or either count prints 0</fails_when> </verify> <done>hosts.md exists with URL(s), ISO read date, sourced answers, "not documented" markers, and the Node requirement for engines.</done> </task>
<task type="auto"> <name>Task 2: Write docs/integration/agentos.md and docs/integration/podman.md</name> <files>docs/integration/agentos.md, docs/integration/podman.md</files> <read_first> - .planning/phases/01-scaffold-and-frozen-contracts/01-CONTEXT.md (D-06 position, D-17 starting points rivet.dev/docs and docs.podman.io, D-18 blocked modules) - docs/integration/hosts.md (URL discovery pattern established in Task 1) </read_first> <action>Write docs/integration/agentos.md starting from rivet.dev/docs per D-17: answer whether AgentOS is a Rivet actor service or a separate product, record the lifecycle API evidence, and name src/runtime/agentos.ts as the blocked module with the D-18 default (ExecutionService interface, no actor design) where docs are silent. Write docs/integration/podman.md starting from docs.podman.io per D-17: record rootless hardening flags, resource limits, and egress-control evidence; name src/runtime/podman.ts as blocked; record that local Podman 4.9.3 is not changed per D-05. Both notes follow the D-16 section layout and use "not documented" for unanswered questions. Edge assumptions: FOUND-03 adjacency, ordering, and concurrency edges do not apply here because the eight notes are independent files with the fixed D-16 section order, so there is nothing to merge or collide, no sorted output whose stability could matter, and no runtime concurrency in Phase 1.</action> <acceptance_criteria> - docs/integration/agentos.md contains rivet.dev/docs URL, an ISO 8601 read date, and the AgentOS identity question with a sourced answer or "not documented" - docs/integration/podman.md contains docs.podman.io URL, an ISO 8601 read date, and states Podman 4.9.3 is unchanged per D-05 - Neither note contains host-local absolute paths or secrets </acceptance_criteria> <verify> <automated>grep -c 'rivet.dev/docs' docs/integration/agentos.md; grep -c 'docs.podman.io' docs/integration/podman.md</automated> <fails_when>non-zero exit, or either count prints 0</fails_when> </verify> <done>agentos.md and podman.md exist as D-16 gate notes with URLs, read dates, and blocked modules named.</done> </task>
<task type="auto"> <name>Task 3: Write docs/integration/openshell.md</name> <files>docs/integration/openshell.md</files> <read_first> - .planning/phases/01-scaffold-and-frozen-contracts/01-CONTEXT.md (D-16, D-18 openshell.md row: launch inside the container, policy model; URL not in spec) - docs/integration/podman.md (sibling note layout to mirror) </read_first> <action>Write docs/integration/openshell.md per D-16 and D-17: find the official OpenShell documentation source at execution time from the official vendor source and record the URL found then, or record the URL as "not documented" without guessing; answer how OpenShell launches inside the container and how its policy is expressed, with source quotes or sections, and "not documented" where silent; name src/runtime/openshell.ts as the blocked module per D-18. No code, no host-local paths.</action> <acceptance_criteria> - docs/integration/openshell.md contains an official-source URL or the literal text "not documented" for the URL per D-17 - docs/integration/openshell.md contains an ISO 8601 read date and names src/runtime/openshell.ts as blocked </acceptance_criteria> <verify> <automated>grep -cE 'http|not documented' docs/integration/openshell.md</automated> <fails_when>non-zero exit, or the count prints 0</fails_when> </verify> <done>openshell.md exists as a D-16 gate note; unfound items are marked "not documented", never guessed.</done> </task>
</tasks>
<threat_model>
Trust Boundaries
| Boundary | Description |
|---|---|
| docs -> repo | External documentation content is copied as evidence quotes, never executed |
STRIDE Threat Register
| Threat ID | Category | Component | Severity | Disposition | Mitigation Plan |
|---|---|---|---|---|---|
| T-01-01 | I (Information Disclosure) | docs/integration/*.md | low | mitigate | Grep notes for secret-shaped content and host-local paths before finishing; repo is public |
| T-01-02 | T (Tampering) | note URLs | low | mitigate | Record only official-source URLs found at execution; D-17 forbids guessed URLs |
| T-01-SC | T (Tampering) | npm/pip/cargo installs | high | mitigate | No package installs in this plan; no install command runs here |
| </threat_model> |
<verification> grep each of the four notes for its URL marker, ISO read date, and "not documented" coverage; confirm no /root/, /home/, /Users/ lines and no integration source files created. </verification>
<success_criteria> Four D-16 gate notes exist, each with URL(s), ISO read date, sourced answers, "not documented" markers, blocked module named; hosts.md carries the Node requirement for plan 01-03. </success_criteria>
<output> Create .planning/phases/01-scaffold-and-frozen-contracts/01-01-SUMMARY.md when done </output>
Artifacts this phase produces
- docs/integration/hosts.md (gate note; carries Node requirement for engines per D-09)
- docs/integration/agentos.md (gate note; blocks src/runtime/agentos.ts)
- docs/integration/podman.md (gate note; blocks src/runtime/podman.ts)
- docs/integration/openshell.md (gate note; blocks src/runtime/openshell.ts)