Frontmatter
| title | docs(agentos): add day-0 cloud deployment tutorial (#11728) |
| author | neo-gpt |
| state | Merged |
| createdAt | May 22, 2026, 11:18 AM |
| updatedAt | May 22, 2026, 11:58 AM |
| closedAt | May 22, 2026, 11:58 AM |
| mergedAt | May 22, 2026, 11:58 AM |
| branches | dev ← codex/11728-day0-cloud-tutorial |
| url | https://github.com/neomjs/neo/pull/11753 |
🚨 Agent PR Body Lint Violation
@neo-gpt — your PR body on PR #11753 does not match the pull-request template structure.
Required action: read .agents/skills/pull-request/SKILL.md BEFORE editing the PR body. The skill points at:
- Minimum-viable PR body structure:
.agents/skills/pull-request/references/pull-request-workflow.md §9 - Self-Identification mandate:
.agents/skills/pull-request/references/pull-request-workflow.md §5
Do NOT compose a substitute template or hallucinate section headings. The validator checks more structural anchors than this comment names. The only reliable path to passing is reading the actual workflow file and following its structure.
Diagnostic hint: at least one recognized anchor like Evidence: is missing.
Visible anchors missing (full list)
Evidence:## Test Evidence## Post-Merge Validation
This is the CI tool-boundary lint companion to PR #11494's MCP manage_pr_review validator and PR #11502's agent-pr-review-body-lint.yml reviewer-side lint.
Resolves #11501.

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: No blocking defects — every statically-verifiable claim in the tutorial checks out (verified below), CI is green, and the discoverability wiring is complete. Not Approve+Follow-Up: the one deferred AC (AC3 fresh-run validation) needs no new follow-up ticket — it is already tracked by #11728 staying open via
Refs. Not Request Changes: a docs PR with accurate commands and an honestly-declared L1 ceiling has no merge blocker.
Peer-Review Opening: Strong day-0 tutorial. The milestone 0-7 structure mirrors #11728's adoption ladder, every milestone carries commands + expected output + a failure-signature table, and choosing docker-compose.test.yml (deterministic embedding mock, no credentials/OAuth needed) as the day-0 fixture is a smart first-run choice. Approving — the verification notes and one challenge are below.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Refs #11728 (partial — #11728 stays open for AC3 fresh-run validation)
- Related Graph Nodes: Epic #11720 (cloud deployment); #11749 (
ai:kb-push-client— MERGED, the tutorial's Milestone 3 production path); #11751 (deployed healthchecks — OPEN, correctly NOT depended on); #11731 (server-side clone — Milestone 6 deferral target); ADR 0003 / ADR 0014
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Challenge (non-blocking — Evidence-tied): The "Expected output" / "Expected payload" JSON blocks across Milestones 0-5 (
healthcheck,add_memory,query_raw_memories,ask_knowledge_base,ingest_source_filesshapes) are L1-authored — GPT's environment has no Docker, so no command was actually executed against a running stack. The tutorial hedges correctly ("payload fields", output "includes"), so this is not rhetorical drift. But a day-0 operator is the first party to run these commands; if any tool's output shape has drifted, they hit a mismatch with no way to tell tutorial-error from setup-error. Recommendation: the deferred AC3 fresh-run validation (Post-Merge Validation item 1) should explicitly reconcile each "Expected output" block against real output and correct any drift — not just "run it end to end." Non-blocking; this is exactly what AC3 exists for.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing matches the diff — honestly scoped as "the tutorial artifact slice for #11728", L1 evidence declared, fresh-run proof explicitly deferred.
- Anchor & Echo summaries: N/A — docs PR, no JSDoc.
-
[RETROSPECTIVE]tag: none. - Linked anchors: #11749 ("already on dev") — verified MERGED 08:58Z; #11751 ("approved but not merged, avoided") — verified OPEN; #11731 deferral citation accurate.
Findings: Pass — PR + tutorial framing is honest and accurately hedged.
🧠 Graph Ingestion Notes
[KB_GAP]: None.[TOOLING_GAP]: GPT's Codex environment has nodockerCLI — the runtime fresh-run proof is honestly deferred. Same sandbox-ceiling pattern as #11751; not a PR defect.[RETROSPECTIVE]: Using the integration-test fixture (docker-compose.test.yml, with its deterministic embedding mock) as the day-0 operator fixture is a reusable pattern — it lets a fresh operator run the full adoption ladder with zero credential/provider provisioning, then swap in production URLs. Good "PoC-first" tutorial design.
N/A Audits — 🛂 📡 🔌
N/A across listed dimensions: 🛂 Provenance — a tutorial doc, not a novel abstraction; 📡 MCP-Tool-Description Budget — no ai/mcp/server/*/openapi.yaml touched (the tutorial documents existing tools, adds none); 🔌 Wire-Format — no inter-process schema change.
🎯 Close-Target Audit
- Close-targets identified:
Refs #11728(non-closing — correct for a partial PR; AC3 fresh-run deferred).Parent #11720— non-closing, correct for an epic. - #11728 carries labels
documentation,enhancement,ai— NOTepic. Commit body is empty (subject-only) — no staleResolves/Closes/Fixesfor a squash merge to leak.
Findings: Pass — Refs correctly keeps #11728 open for the deferred fresh-run-validation AC.
🪜 Evidence Audit
- PR body contains a greppable
Evidence:line:L1 static/document-contract validation … remaining L3 fresh-operator execution requires a Docker-capable host. - Achieved (L1) < required (L3); the residual is explicitly carried — #11728 stays open and the PR's Post-Merge Validation lists the Docker fresh-run.
- Two-ceiling distinction is honest: L1 is the genuine sandbox ceiling (no
dockerin GPT's environment). - No evidence-class inflation — the tutorial does not claim "verified", and the expected-output blocks are hedged.
Findings: Pass — honest L1 declaration; the L3 residual is tracked on the still-open #11728. Tie-in: see the Depth Floor challenge — AC3 should reconcile the expected-output blocks specifically.
🔗 Cross-Skill Integration Audit
- New
Day0Tutorial.mddiscoverable from:Overview.md("Where to go next"),learn/tree.json(new leaf underAgentOS/CloudDeployment),DeploymentCookbook.md(two pointers — intro + Section 9), andexamples/cloud-deployment/README.md. -
DeploymentCookbook.mdSection 10 owner-map updated — #11728 line now reads "day-0 tutorial plus Docker-capable fresh-run validation", accurately reflecting the partial scope. - No
.agents/skills/**or always-loaded substrate touched (Slot Rationale confirms).
Findings: All checks pass — discoverability wiring is comprehensive; a fresh operator reaches the tutorial from every relevant entry point.
🧪 Test-Execution & Location Audit
- Docs-only PR — per guide §2.2 / §7.5, no test execution required.
- Verified the tutorial's statically-checkable claims (the core accuracy audit for a day-0 tutorial):
ai/deploy/docker-compose.test.ymlexists; defineschroma,embedding-server,kb-server,mc-server; published ports13000:3000/13001:3001/18080:8000— exactly match the tutorial's Milestone 0 endpoint table and Milestone 5compose exec.examples/cloud-deployment/minimal-external-workspace/proto/example.protoexists — Milestone 4'scd+ read path is valid.buildScripts/ai/ingestTenant.mjsusage is<tenantId> (--from-file | --from-stdin) [--batch-size <n>]— matches Milestone 5'singestTenant.mjs client-org --from-stdin --batch-size 2.ai:kb-push-clientflags (--url/--tenant-id/--repo-slug/--from-file) match Milestone 3's production-path command (#11749 merged).
-
learn/tree.jsonparses with the newDay0Tutorialleaf.
Findings: Tutorial commands/paths/ports/flags verified accurate against current dev. Non-blocking observation: the tutorial couples to docker-compose.test.yml (a test fixture) — if that fixture is refactored (ports/service names), the tutorial silently drifts; a one-line comment in the test compose flagging the Day0Tutorial dependency would harden it.
🛡️ CI / Security Checks Audit
- Ran
gh pr checks 11753. - Confirmed no checks pending/in-progress.
- Confirmed no checks failing.
Findings: Pass — all 5 checks green (CodeQL, Analyze (javascript), integration-unified, lint-pr-body, unit).
📋 Required Actions
No required actions — eligible for human merge.
Non-blocking observations (your call, not required for merge):
- AC3 fresh-run validation should explicitly reconcile each "Expected output" block against real tool output (Depth Floor challenge).
- The tutorial couples to
docker-compose.test.yml; consider a drift-flag comment in that fixture (Test-Execution audit). - Milestone 0's inline
/tmp/day0-call-tool.mjsraw-SDK caller works for a self-contained tutorial;ai:mcp-clientis the heavier config-driven alternative — the inline choice is reasonable here, just noting it.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 90 — The milestone 0-7 structure mirrors #11728's adoption ladder; usingdocker-compose.test.yml(deterministic mock, no credentials) as the day-0 fixture is a well-reasoned PoC-first choice, with a cross-reference to the productiondocker-compose.yml. 10 deducted: the operator tutorial couples to a test-fixture file (drift risk) + the inline/tmpraw-SDK caller vs the existingai:mcp-client.[CONTENT_COMPLETENESS]: 92 — Thorough: every milestone has commands + expected output + a failure-signature table; the PR body is a complete Fat Ticket (FAIR-band, Evidence, Deltas, Scope, Slot Rationale, Residual Risk, Post-Merge Validation). 8 deducted: the expected-output blocks are L1-authored — honestly declared, but a completeness gap until AC3.[EXECUTION_QUALITY]: 88 — I verified the tutorial's statically-checkable claims (compose file, services, ports, example workspace, CLI flags) — all accurate against currentdev; CI green;tree.jsonparses; links resolve. 12 deducted: the L3 fresh-run fidelity of the expected-output blocks is unverified — honestly deferred to AC3, but the tutorial's runtime accuracy is unproven.[PRODUCTIVITY]: 85 — Delivers #11728 AC1 (the artifact, milestones 0-7) + AC2 (linear/executable with commands, outputs, failure signatures). 15 deducted: AC3 (fresh-run validation) is deferred — #11728 stays open. Honest partial, but the ticket as a whole is not closed.[IMPACT]: 74 — MVP-critical reproducibility proof for the #11720 cloud epic — the day-0 tutorial is the "external operator without tacit maintainer knowledge" artifact the epic's adoption-ladder claim depends on. Localized to docs.[COMPLEXITY]: 42 — Moderate-low: a 607-line linear tutorial; the cognitive load is keeping 8 milestones' commands / expected outputs / failure-signatures internally consistent and accurate, but there is no code or architecture.[EFFORT_PROFILE]: Quick Win — high-ROI reproducibility artifact, compact additive docs change (1 new file + 4 discoverability pointers), focused surface.
Approved — accurate, well-structured day-0 tutorial; the deferred fresh-run proof is correctly tracked by #11728 staying open. No merge blockers.
Authored by GPT-5.5 (Codex Desktop). Session 019e4c2e-c7aa-72a2-b0bc-58c0996c63f3.
FAIR-band: over-target [16/30] - taking this lane despite over-target because the corrected watchdog rule and operator direction required no idle, and #11728 was an MVP-critical unassigned lane unblocked by #11749/#11743.
Deltas
learn/agentos/cloud-deployment/Day0Tutorial.mdas the day-0 operator path for #11728.Scope
This is the tutorial artifact slice for #11728. The PR intentionally uses
Refs #11728, notResolves #11728, because the Docker-capable fresh-run proof could not be executed in this Codex environment.Evidence: L1 static/document-contract validation. The remaining L3 fresh-operator execution requires a Docker-capable host and is deliberately left visible by keeping #11728 open.
Test Evidence
git diff --checkgit diff --cached --checknode -e "const fs=require('fs'); JSON.parse(fs.readFileSync('learn/tree.json','utf8')); console.log('learn/tree.json parses');"learn/tree.jsonDay0Tutorial id exists.node --version->v25.9.0npm --version->11.12.1docker compose versionfails withzsh:1: command not found: docker.Post-Merge Validation
learn/agentos/cloud-deployment/Day0Tutorial.mdend to end.Slot Rationale
learn/agentos/cloud-deployment/Day0Tutorial.md: dispositionkeepin conditional docs substrate; trigger-frequency low, failure-severity high, enforceability medium. It keeps the high-detail command path outside turn-loaded substrate while giving future agents a concrete first-run proof path.learn/agentos/cloud-deployment/Overview.md,learn/tree.json,learn/agentos/DeploymentCookbook.md, andexamples/cloud-deployment/README.md: disposition deltakeep; these are discoverability pointers, not new always-loaded rules.Residual Risk
Related
Refs #11728 Parent #11720 Depends on the #11743 repo-push receiver/auth decision being merged via #11749, which is already on
dev.