From 2d347d062fc711982e04f479c7ef336acc77ee1c Mon Sep 17 00:00:00 2001 From: tegwick Date: Thu, 16 Jul 2026 10:47:52 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Phase=201=20FDA=20host-operator=20Role?= =?UTF-8?q?=20and=20railiance01=20pilot=20(WP-0009=20T02=E2=80=93T07)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lock DEC-FDA-001 working defaults; add roles/host-operator package with OS/security and load protocols; scaffold eng-coulomb-railiance01-ho-001 with bound agent, vault, ramp checklists, and Kai quote/ledger. --- docs/agency-framework.md | 3 + .../decisions/DEC-FDA-001-working-defaults.md | 77 ++++++++++++ ...orward-deployed-engagement-architecture.md | 29 +++-- engagements/README.md | 10 ++ .../ENGAGEMENT.yaml | 51 ++++++++ .../access-plan.md | 33 +++++ .../agent-host-operator.md | 105 ++++++++++++++++ .../checklists/ramp-down-status.md | 15 +++ .../checklists/ramp-up-status.md | 16 +++ .../commercial/README.md | 33 +++++ .../commercial/ledger.jsonl | 1 + .../commercial/quote.yaml | 35 ++++++ .../reports/orientation.md | 33 +++++ .../request.yaml | 33 +++++ .../schedule.yml | 25 ++++ .../vault/baselines/railiance01.md | 47 +++++++ .../vault/findings/.gitkeep | 0 .../vault/handoff/README.md | 13 ++ .../vault/handoff/risks.md | 7 ++ .../vault/memory.md | 74 +++++++++++ .../vault/session-log/.gitkeep | 0 roles/README.md | 21 ++++ roles/host-operator/ROLE.yaml | 61 +++++++++ roles/host-operator/agent-definition.md | 87 +++++++++++++ roles/host-operator/memory-template.md | 62 ++++++++++ .../protocols/load-workload-review.md | 103 ++++++++++++++++ .../protocols/os-security-pass.md | 116 ++++++++++++++++++ roles/host-operator/ramp-down.md | 24 ++++ roles/host-operator/ramp-up.md | 26 ++++ wiki/ForwardDeployedAgencyBusinessModel.md | 16 ++- ...agentic-WP-0009-forward-deployed-agency.md | 73 +++++------ 31 files changed, 1171 insertions(+), 58 deletions(-) create mode 100644 docs/decisions/DEC-FDA-001-working-defaults.md create mode 100644 engagements/README.md create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/ENGAGEMENT.yaml create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/access-plan.md create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/agent-host-operator.md create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/checklists/ramp-down-status.md create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/checklists/ramp-up-status.md create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/README.md create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/ledger.jsonl create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/quote.yaml create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/reports/orientation.md create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/request.yaml create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/schedule.yml create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/vault/baselines/railiance01.md create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/vault/findings/.gitkeep create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/vault/handoff/README.md create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/vault/handoff/risks.md create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/vault/memory.md create mode 100644 engagements/pilots/eng-coulomb-railiance01-ho-001/vault/session-log/.gitkeep create mode 100644 roles/README.md create mode 100644 roles/host-operator/ROLE.yaml create mode 100644 roles/host-operator/agent-definition.md create mode 100644 roles/host-operator/memory-template.md create mode 100644 roles/host-operator/protocols/load-workload-review.md create mode 100644 roles/host-operator/protocols/os-security-pass.md create mode 100644 roles/host-operator/ramp-down.md create mode 100644 roles/host-operator/ramp-up.md diff --git a/docs/agency-framework.md b/docs/agency-framework.md index 4a56d26..9b678c0 100644 --- a/docs/agency-framework.md +++ b/docs/agency-framework.md @@ -347,6 +347,9 @@ Schema: [integrations/schedule-schema.md](integrations/schedule-schema.md). - [ADR-005: Scheduled Agent Execution](adr/ADR-005-scheduled-agent-execution.md) - [ADR-006: Customer Engagement Convention](adr/ADR-006-customer-engagement-convention.md) - [Forward-Deployed Engagement Architecture](forward-deployed-engagement-architecture.md) — client-requestable Roles, ramp-up/down, client vaults +- [DEC-FDA-001 working defaults](decisions/DEC-FDA-001-working-defaults.md) +- [roles/host-operator](../roles/host-operator/) — first Role package (pilot) +- [engagements/pilots/eng-coulomb-railiance01-ho-001](../engagements/pilots/eng-coulomb-railiance01-ho-001/) — Phase 1 pilot tree - [wiki/ForwardDeployedAgencyBusinessModel.md](../wiki/ForwardDeployedAgencyBusinessModel.md) — Kai trial currency, seats/duties, confidentiality - [wiki/EcosystemIntegration.md](../wiki/EcosystemIntegration.md) — two-layer measurement model - [WP-0002: Agency Framework](../workplans/kaizen-agentic-WP-0002-agency-framework.md) diff --git a/docs/decisions/DEC-FDA-001-working-defaults.md b/docs/decisions/DEC-FDA-001-working-defaults.md new file mode 100644 index 0000000..2ca59a2 --- /dev/null +++ b/docs/decisions/DEC-FDA-001-working-defaults.md @@ -0,0 +1,77 @@ +# DEC-FDA-001 — Forward-deployed agency working defaults + +**Status:** accepted (working default; sponsor may override) +**Date:** 2026-07-16 +**Workplan:** KAIZEN-WP-0009-T02 +**Deciders:** kaizen-agentic (implementation default for Phase 1 pilot) + +## Context + +Architecture open questions blocked Phase 1 scaffolding. We lock **working +defaults** so host-operator @ railiance01 can proceed without waiting on a +separate product decision cycle. Overrides are welcome; change this DEC and +bump architecture/business model versions. + +## Decisions + +### D1 — Kai ledger home + +**Decision:** Phase 1 uses a **file-based JSONL ledger** at +`engagements/.../commercial/ledger.jsonl` (schema in architecture §10). + +No State Hub extension and no finance-system integration in Phase 1. + +**Rationale:** Offline, reviewable, zero new infrastructure; enough to prove +unit economics before EUR. + +### D2 — Engagement store placement + +**Decision:** + +| Artifact | Location | +|----------|----------| +| Role packages (supplier IP) | `kaizen-agentic/roles//` | +| Pilot engagement tree | `kaizen-agentic/engagements/pilots//` | +| Future production client vaults | Client-owned repo (e.g. railiance-hosts or dedicated ops-engagements); pilot may be **copied** out later | + +**Rationale:** Keep Phase 1 self-contained in the supplier repo for iteration. +Client-owned vault remains the confidentiality rule; pilot path is scaffolding, +not a claim of ownership of operational knowledge. + +### D3 — Multi-target binding + +**Decision:** **One Engagement, N Targets.** One bound agent definition; +baselines and findings are per-target under `vault/baselines/.md`. + +Pilot has N=1 (`railiance01`). + +### D4 — Metrics sharing with supplier optimizer + +**Decision:** **Opt-in, default off.** Pilot does not publish vault content or +raw metrics to supplier optimizer. Local `.kaizen/metrics` or engagement +`reports/` only. Shared aggregates require `contribute_metrics: approved` on +the engagement record (not set for pilot). + +### D5 — Craft base for host-operator + +**Decision:** `base_agent: sys-medic`. Bound definition may start as sys-medic +prompt + engagement binding appendix; Role package owns charter, protocols, and +memory template. + +### D6 — Privilege policy + +**Decision:** `privileged_ops`, package upgrade, firewall change, and reboot +require **recorded human approval** in the vault session log before execution. +Observe-class work does not. + +## Consequences + +- Phase 1 pilot proceeds under `engagements/pilots/eng-coulomb-railiance01-ho-001/` +- Architecture and business model docs promote to **v0.2 (working accepted)** +- ADR-007 may later elevate these defaults to fleet convention (T11) + +## Related + +- [forward-deployed-engagement-architecture.md](../forward-deployed-engagement-architecture.md) +- [ForwardDeployedAgencyBusinessModel.md](../../wiki/ForwardDeployedAgencyBusinessModel.md) +- KAIZEN-WP-0009 diff --git a/docs/forward-deployed-engagement-architecture.md b/docs/forward-deployed-engagement-architecture.md index 415636b..bf592c7 100644 --- a/docs/forward-deployed-engagement-architecture.md +++ b/docs/forward-deployed-engagement-architecture.md @@ -1,10 +1,12 @@ # Forward-Deployed Engagement Architecture -**Status:** draft specification v0.1 +**Status:** v0.2 working accepted (DEC-FDA-001 defaults) **Date:** 2026-07-16 -**Type:** architecture extension (not yet an accepted ADR) +**Type:** architecture extension (ADR-007 optional later — WP-0009 T11) **Companion business model:** [wiki/ForwardDeployedAgencyBusinessModel.md](../wiki/ForwardDeployedAgencyBusinessModel.md) +**Decisions:** [docs/decisions/DEC-FDA-001-working-defaults.md](decisions/DEC-FDA-001-working-defaults.md) **Extends:** ADR-002 (memory), ADR-003 (protocols), ADR-005 (schedule), ADR-006 (customer engagement) +**Pilot tree:** `engagements/pilots/eng-coulomb-railiance01-ho-001/` --- @@ -681,18 +683,27 @@ kaizen-agentic once pilot checklist passes twice. ## 15. Open technical questions -1. Single monorepo path `engagements/` vs dedicated client engagement repo per company? - (**Recommend:** dedicated client repo or subdirectory in existing ops repo — e.g. railiance-hosts or a new `coulomb-ops-engagements`.) -2. Should bound definitions be signed (supply-chain) for production host ops? -3. Multi-target engagements: one agent definition vs. one per host? - (**Recommend:** one engagement, N targets, N baseline files.) -4. How aggressively to share metrics aggregates with supplier optimizer by default? - (**Recommend:** off until opt-in flag on engagement.) +Resolved for Phase 1 by [DEC-FDA-001](decisions/DEC-FDA-001-working-defaults.md): + +| Question | Working default | +|----------|-----------------| +| Engagement store | Pilot under `engagements/pilots/` in kaizen-agentic; production vaults client-owned later | +| Multi-target | One engagement, N targets, N baseline files | +| Metrics to supplier optimizer | Opt-in, default off | +| Kai ledger | File JSONL under engagement `commercial/` | + +Still open (non-blocking): + +1. Should bound definitions be signed (supply-chain) for production host ops? +2. When to copy pilot vault to a client-owned repo for pure custody? --- ## Related documents +- [DEC-FDA-001](decisions/DEC-FDA-001-working-defaults.md) +- [roles/host-operator](../roles/host-operator/) +- [pilot engagement](../engagements/pilots/eng-coulomb-railiance01-ho-001/) - [wiki/ForwardDeployedAgencyBusinessModel.md](../wiki/ForwardDeployedAgencyBusinessModel.md) - [agency-framework.md](agency-framework.md) - [adr/ADR-006-customer-engagement-convention.md](adr/ADR-006-customer-engagement-convention.md) diff --git a/engagements/README.md b/engagements/README.md new file mode 100644 index 0000000..786ed76 --- /dev/null +++ b/engagements/README.md @@ -0,0 +1,10 @@ +# Engagements + +File-based **forward-deployed agency** engagements (KAIZEN-WP-0009, DEC-FDA-001). + +| Path | Purpose | +|------|---------| +| `pilots/` | Supplier-repo Phase 1 pilot trees (scaffolding; operational knowledge still treated as client-confidential) | +| (future) client repos | Production vaults under client custody | + +See [docs/forward-deployed-engagement-architecture.md](../docs/forward-deployed-engagement-architecture.md). diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/ENGAGEMENT.yaml b/engagements/pilots/eng-coulomb-railiance01-ho-001/ENGAGEMENT.yaml new file mode 100644 index 0000000..4ac88cf --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/ENGAGEMENT.yaml @@ -0,0 +1,51 @@ +apiVersion: kaizen.agentic/v1 +kind: Engagement +metadata: + id: eng-coulomb-railiance01-ho-001 + request_id: engreq-coulomb-railiance01-ho-001 + created: "2026-07-16" + updated: "2026-07-16" + workplan: KAIZEN-WP-0009 +status: + phase: staffing + # requested | quoting | funded | staffing | ramp_up | operating + # renewing | ramp_down | closed | cancelled + notes: "Phase 1 scaffold complete; pending access verify to enter ramp_up" +spec: + client: + id: coulomb + billing_account: coulomb-ops-kai + role: + id: host-operator + version: "0.1.0" + targets: + - kind: host + id: railiance01 + agent_definition: + path: agent-host-operator.md + derived_from: roles/host-operator/agent-definition.md + base_craft: agents/agent-sys-medic.md + vault: + root: vault/ + memory: vault/memory.md + schedule: + path: schedule.yml + checklists: + ramp_up: checklists/ramp-up-status.md + ramp_down: checklists/ramp-down-status.md + policy: + confidentiality: client_owned + contribute_metrics: false + contribute_lesson: false + human_approval_for: + - privileged_ops + - package_upgrade + - firewall_change + - reboot + redaction_profile: default-host-ops + commercial: + currency: kai + seat_product: expert_seat_4x + capability_tier: 4 + ledger_ref: commercial/ledger.jsonl + quote_ref: commercial/quote.yaml diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/access-plan.md b/engagements/pilots/eng-coulomb-railiance01-ho-001/access-plan.md new file mode 100644 index 0000000..6bcfc56 --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/access-plan.md @@ -0,0 +1,33 @@ +# Access plan — eng-coulomb-railiance01-ho-001 + +**Target:** host `railiance01` +**Classes requested:** `host_observe`, `privileged_ops` (gated) +**Secrets:** never stored in this tree + +## Intended path + +| Step | Action | Owner | +|------|--------|-------| +| 1 | Inventory / facts from `railiance-hosts` (read-only) | operator | +| 2 | SSH cert via ops-warden (`warden sign` / `cert_command`) identity hint `agt` | operator | +| 3 | Tunnel if needed (`ops-bridge`, e.g. state-hub-railiance01) | operator | +| 4 | Observe session: non-destructive health/load/os checks | host-operator agent | +| 5 | Privileged ops only after human approval recorded in vault | human + agent | + +## Credential routing + +- SSH certificates → **ops-warden** +- API keys / DB passwords → **OpenBao** via `warden route` (not this agent) +- Do **not** message ops-warden for secret values + +## Verification log + +| Date | Result | Notes | +|------|--------|-------| +| _pending_ | | RU-01 not yet complete | + +## Revocation + +| Date | Action | +|------|--------| +| _open_ | On ramp-down: stop renewing agent certs; set schedule disabled; mark here | diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/agent-host-operator.md b/engagements/pilots/eng-coulomb-railiance01-ho-001/agent-host-operator.md new file mode 100644 index 0000000..1390892 --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/agent-host-operator.md @@ -0,0 +1,105 @@ +--- +name: host-operator +engagement_id: eng-coulomb-railiance01-ho-001 +role_id: host-operator +role_version: "0.1.0" +description: Host operator for railiance01 (coulomb pilot engagement) +category: infrastructure +memory: enabled +memory_path: engagements/pilots/eng-coulomb-railiance01-ho-001/vault/memory.md +targets: + - kind: host + id: railiance01 +confidentiality: client_owned +phase: staffing +access_classes: [host_observe, privileged_ops] +human_approval_for: [privileged_ops, package_upgrade, firewall_change, reboot] +base_agent: sys-medic +model: inherit +--- + +# Session Start Protocol + +1. Confirm engagement `eng-coulomb-railiance01-ho-001` and target **railiance01** only. +2. Read vault memory at `memory_path` (client confidential — do not copy into supplier `agents/`). +3. Read `access-plan.md` and `ENGAGEMENT.yaml` phase. +4. If phase is `ramp_up`, follow `roles/host-operator/ramp-up.md` and update `checklists/ramp-up-status.md`. +5. If phase is `operating`, run the scheduled duty protocol(s). +6. If phase is `ramp_down`, follow `roles/host-operator/ramp-down.md`. +7. Acknowledge charter, open threads, and last session log line in your opening brief. +8. Never store secrets, private keys, or API tokens in the vault or reports. + +# Session Close Protocol + +1. Update Host Profiles, OS & Patch State, Security Posture, Load & Workload Envelope as needed. +2. Update Recurring Findings / Cleared Issues / Open Threads. +3. Append Session Log: `YYYY-MM-DD · railiance01 · · `. +4. Write report under `reports/` for completed duties. +5. Bump memory frontmatter `last_updated` and `session_count`. +6. Append Kai ledger entry in `commercial/ledger.jsonl` for the duty (billing metadata only). + +--- + +You are **Host Operator** for engagement **eng-coulomb-railiance01-ho-001**. + +## Engagement binding + +| Field | Value | +|-------|-------| +| Client | coulomb | +| Target | host `railiance01` (k3s production; forgejo/apps) | +| Role | host-operator 0.1.0 (tier 4) | +| Base craft | SysMedic (`agents/agent-sys-medic.md`) | +| Vault | `vault/` (client confidential) | +| Inventory anchor | `railiance-hosts` | + +## Charter (pilot) + +**In scope** + +- OS package currency and reboot planning (with approval) +- Security hygiene: listeners, basic firewall posture, cert expiry awareness +- Load average, CPU, memory, disk; workload identification +- k3s node health signals (sys-medic protocol) +- Documentation in the engagement vault +- Recommendations and gated remediation proposals + +**Out of scope** + +- Application feature development +- Unilateral production data deletion +- Hosts other than railiance01 +- Secret value retrieval into chat or git +- Expanding blast radius without engagement amendment + +## Protocols + +| Duty | Protocol path | +|------|----------------| +| Health assessment | `agents/protocols/sys-medic/k3s-node-health-assessment.md` | +| Load & workload | `roles/host-operator/protocols/load-workload-review.md` | +| OS & security | `roles/host-operator/protocols/os-security-pass.md` | + +## Privilege gate + +Before any of `privileged_ops`, `package_upgrade`, `firewall_change`, `reboot`: + +1. Write an Action Proposal (blast radius, rollback, evidence) +2. Obtain human approval recorded in vault session log +3. Execute only within the approved scope +4. Record outcome under Cleared Issues or Findings + +## Output quality + +Use SysMedic report structure for assessments (Executive Summary, Health Status, +Findings, Safe Actions, Escalation, Suggested Commands). Prefer inspect commands +first; label change commands as optional and approval-gated. + +## Full Role prompt + +Operational principles and safety rules inherit from: + +- `roles/host-operator/agent-definition.md` +- `agents/agent-sys-medic.md` + +When instructions conflict, **engagement binding and safety gates win**. diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/checklists/ramp-down-status.md b/engagements/pilots/eng-coulomb-railiance01-ho-001/checklists/ramp-down-status.md new file mode 100644 index 0000000..df9e935 --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/checklists/ramp-down-status.md @@ -0,0 +1,15 @@ +# Ramp-down status — eng-coulomb-railiance01-ho-001 + +Source checklist: `roles/host-operator/ramp-down.md` + +| ID | Criterion | Status | Evidence | +|----|-----------|--------|----------| +| RD-01 | Open threads triaged | todo | vault/memory.md Open Threads | +| RD-02 | Handoff pack written | todo | vault/handoff/README.md | +| RD-03 | Outstanding risks listed | todo | vault/handoff/risks.md | +| RD-04 | Access revoked | todo | access-plan.md | +| RD-05 | Schedule disabled | todo | schedule.yml | +| RD-06 | Client vault custody confirmed | todo | ENGAGEMENT.yaml note | +| RD-07 | Supplier workspace scrubbed | todo | operator attestation | + +**Phase gate:** all `done` → set status.phase to `closed`; finalise ledger. diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/checklists/ramp-up-status.md b/engagements/pilots/eng-coulomb-railiance01-ho-001/checklists/ramp-up-status.md new file mode 100644 index 0000000..d66d2a4 --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/checklists/ramp-up-status.md @@ -0,0 +1,16 @@ +# Ramp-up status — eng-coulomb-railiance01-ho-001 + +Source checklist: `roles/host-operator/ramp-up.md` + +| ID | Criterion | Status | Evidence | +|----|-----------|--------|----------| +| RU-01 | Access path verified | todo | access-plan.md | +| RU-02 | Host baseline documented | todo | vault/baselines/railiance01.md | +| RU-03 | Coach / orientation brief filed | done | reports/orientation.md (scaffold) | +| RU-04 | First health review complete | todo | reports/*-health-review.md | +| RU-05 | Security snapshot initial | todo | vault/memory.md Security Posture | +| RU-06 | Load envelope initial | todo | vault/memory.md Load & Workload Envelope | +| RU-07 | Escalation contacts confirmed | done | vault/memory.md Engagement Charter | +| RU-08 | Human approval path tested | todo | vault/session-log/ or session log | + +**Phase gate:** all `done` → set `ENGAGEMENT.yaml` status.phase to `operating` and enable schedule entries. diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/README.md b/engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/README.md new file mode 100644 index 0000000..ebf62aa --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/README.md @@ -0,0 +1,33 @@ +# Commercial — Kai trial ledger + +- **Quote:** [quote.yaml](quote.yaml) — month-1 estimate (~72 800 Kai) +- **Ledger:** [ledger.jsonl](ledger.jsonl) — append-only charges/credits +- **Schema:** architecture §10 (`KaiLedgerEntry`) + +## Rules + +- No secrets or full shell transcripts in ledger lines +- Seat/ramp charges when phase transitions are accepted +- Duty charges on session close +- Empty account pauses new duties (ramp-down still allowed) + +## Example duty charge + +```json +{ + "apiVersion": "kaizen.agentic/v1", + "kind": "KaiLedgerEntry", + "id": "kai-YYYYMMDDTHHMMSSZ-001", + "account": "coulomb-ops-kai", + "engagement_id": "eng-coulomb-railiance01-ho-001", + "type": "duty_charge", + "product": "standard_review", + "capability_tier": 4, + "access_surcharge_product": "host_observe", + "amount_kai": 1700, + "currency": "KAI", + "session_ref": "reports/YYYY-MM-DD-health-review.md", + "created_at": "YYYY-MM-DDTHH:MM:SSZ", + "metadata": {"target": "railiance01", "phase": "operating"} +} +``` diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/ledger.jsonl b/engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/ledger.jsonl new file mode 100644 index 0000000..a546024 --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/ledger.jsonl @@ -0,0 +1 @@ +{"apiVersion":"kaizen.agentic/v1","kind":"KaiLedgerEntry","id":"kai-20260716-quote-open","account":"coulomb-ops-kai","engagement_id":"eng-coulomb-railiance01-ho-001","type":"note","product":"quote_snapshot","capability_tier":4,"amount_kai":0,"currency":"KAI","created_at":"2026-07-16T08:00:00Z","metadata":{"total_quoted_kai":72800,"phase":"staffing","note":"Month-1 estimate recorded; no charge until fund/ramp"}} diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/quote.yaml b/engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/quote.yaml new file mode 100644 index 0000000..1ce5cd4 --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/commercial/quote.yaml @@ -0,0 +1,35 @@ +# Kai quote — eng-coulomb-railiance01-ho-001 (trial month-1 estimate) +# FX calibration only: 1000 Kai ≈ 1 EUR list (see business model) +apiVersion: kaizen.agentic/v1 +kind: KaiQuote +metadata: + engagement_id: eng-coulomb-railiance01-ho-001 + created: "2026-07-16" + currency: KAI + trial: true +spec: + capability_tier: 4 + account: coulomb-ops-kai + line_items: + - product: expert_seat_4x + description: Host-operator seat (1 month) + amount_kai: 10000 + - product: ramp_up_package + description: Ramp-up (half tier weight per business model) + amount_kai: 10000 + - product: standard_review + description: Daily review × 20 business days × tier 4 + amount_kai: 32000 + detail: "20 * 400 * 4" + - product: deep_assessment + description: Weekly OS/security × 4 × tier 4 + amount_kai: 19200 + detail: "4 * 1200 * 4" + - product: privileged_ops_surcharge + description: Est. 4 privileged sessions × 400 + amount_kai: 1600 + total_kai: 72800 + notes: + - Internal coulomb quarterly grant illustrative budget 200000 Kai + - Actual charges posted to ledger.jsonl as duties complete + - Token pass-through waived for pure internal pilot diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/reports/orientation.md b/engagements/pilots/eng-coulomb-railiance01-ho-001/reports/orientation.md new file mode 100644 index 0000000..efbeb39 --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/reports/orientation.md @@ -0,0 +1,33 @@ +# Orientation brief — eng-coulomb-railiance01-ho-001 + +**Status:** scaffold (RU-03) +**Date:** 2026-07-16 + +## Context for host-operator + +- First forward-deployed host-operator pilot for coulomb on **railiance01** +- Prior agency craft: sys-medic + k3s node health protocol +- Related ops docs live in `railiance-hosts` (inventory, forgejo-on-railiance01, ADR-004 runner) +- No prior engagement vault session history + +## Coach notes + +If project memories exist on related repos, run: + +```bash +kaizen-agentic memory brief sys-medic --target +``` + +Paste relevant non-secret patterns here. Until then, treat baseline as empty and +build envelope from first observe session. + +## Watch from inventory/docs (pre-memory) + +- Single-node k3s production sensitivity +- Privileged runner/DinD implications +- Prefer observe-class first session + +## RU-03 mark + +When this file is accepted as orientation, mark RU-03 `done` in +`checklists/ramp-up-status.md` (scaffold counts as filed; refresh after first live session if needed). diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/request.yaml b/engagements/pilots/eng-coulomb-railiance01-ho-001/request.yaml new file mode 100644 index 0000000..8f119e6 --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/request.yaml @@ -0,0 +1,33 @@ +apiVersion: kaizen.agentic/v1 +kind: EngagementRequest +metadata: + id: engreq-coulomb-railiance01-ho-001 + created: "2026-07-16" +spec: + client: + id: coulomb + domain_slug: railiance + billing_account: coulomb-ops-kai + role: + id: host-operator + version_constraint: ">=0.1.0 <1.0.0" + targets: + - kind: host + id: railiance01 + inventory_ref: railiance-hosts + notes: "k3s production; forgejo/apps workloads; coulomb ecosystem" + duty: + health_review: daily + os_security_pass: weekly + load_review: daily + timezone: Europe/Berlin + access: + requested_classes: [host_observe, privileged_ops] + cert_identity_hint: agt + knowledge: + vault_placement: pilot_in_supplier_repo + confidentiality: client_owned + commercial: + currency: kai + trial: true + quote_requested: true diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/schedule.yml b/engagements/pilots/eng-coulomb-railiance01-ho-001/schedule.yml new file mode 100644 index 0000000..3bc390f --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/schedule.yml @@ -0,0 +1,25 @@ +# Duty cadence for eng-coulomb-railiance01-ho-001 +# activity-core wiring optional (Phase 3); manual prepare is enough for Phase 1 +engagement_id: eng-coulomb-railiance01-ho-001 +timezone: Europe/Berlin +entries: + - id: daily-health-load + agent: host-operator + duty: standard_review + protocols: + - load-workload-review + - k3s-node-health-assessment + cadence: daily + cron: "0 9 * * 1-5" + enabled: false + notes: "Enable after ramp_up exit (RU checklist complete)" + + - id: weekly-os-security + agent: host-operator + duty: deep_assessment + protocols: + - os-security-pass + cadence: weekly + cron: "0 10 * * 1" + enabled: false + notes: "Privileged upgrades remain human-gated even when enabled" diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/baselines/railiance01.md b/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/baselines/railiance01.md new file mode 100644 index 0000000..5610c62 --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/baselines/railiance01.md @@ -0,0 +1,47 @@ +# Baseline — railiance01 + +**Engagement:** eng-coulomb-railiance01-ho-001 +**Status:** pending first observe session (RU-02) +**Last captured:** — + +## Identity + +| Field | Value | +|-------|-------| +| Hostname | railiance01 | +| Inventory | railiance-hosts | +| Notes | k3s production; forgejo/apps | + +## Capture checklist (fill on first session) + +```bash +hostname +uptime +uname -a +cat /etc/os-release +nproc +free -h +df -h +ss -tuln | head -40 +# if k3s: +kubectl get node -o wide 2>/dev/null || k3s kubectl get node -o wide 2>/dev/null +``` + +## Recorded values + +_To be filled during ramp-up._ + +## Known quirks (from docs, pre-session) + +- Forgejo + in-cluster Actions runner documented in railiance-hosts ADR-004 +- State Hub / activity-core historically deployed on this cluster path +- Access often via ops-bridge from workstation + +## Envelope seed + +| Metric | Baseline | Notes | +|--------|----------|-------| +| Load | | | +| Memory | | | +| Disk | | | +| Top workloads | | | diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/findings/.gitkeep b/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/findings/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/handoff/README.md b/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/handoff/README.md new file mode 100644 index 0000000..2b46936 --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/handoff/README.md @@ -0,0 +1,13 @@ +# Handoff pack — eng-coulomb-railiance01-ho-001 + +Filled during **ramp-down** (RD-02). + +## Contents (when complete) + +- Summary of how railiance01 was operated under this engagement +- Pointer to final baselines +- Open risks → `risks.md` +- Deferred patches and reboot debt +- Contacts and access revocation status + +_Status: not started (engagement not in ramp_down)._ diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/handoff/risks.md b/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/handoff/risks.md new file mode 100644 index 0000000..ac30771 --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/handoff/risks.md @@ -0,0 +1,7 @@ +# Outstanding risks — eng-coulomb-railiance01-ho-001 + +_Populated during operate and finalised at ramp-down (RD-03)._ + +| Risk | Severity | Mitigation / owner | Status | +|------|----------|--------------------|--------| +| _none recorded_ | | | | diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/memory.md b/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/memory.md new file mode 100644 index 0000000..bd438fb --- /dev/null +++ b/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/memory.md @@ -0,0 +1,74 @@ +--- +agent: host-operator +engagement_id: eng-coulomb-railiance01-ho-001 +project: coulomb-railiance01 +last_updated: "2026-07-16" +session_count: 0 +confidentiality: client_owned +--- + +# Host Operator Memory — railiance01 pilot + +## Engagement Charter + +- **Duty:** Keep railiance01 operational and secure; OS currency; load and workload review +- **Cadence:** daily health/load (business days); weekly OS/security pass +- **Change windows:** prefer low-traffic periods; reboot only with human approval +- **Escalation:** coulomb / railiance human operator (Bernd / on-call as designated) +- **Out of scope:** app features; other hosts; secret vending + +## Project Context + +Coulomb ecosystem production host `railiance01` runs k3s and platform workloads +(including Forgejo/apps per railiance-hosts docs). This engagement is the first +forward-deployed host-operator pilot (KAIZEN-WP-0009). + +## Host Profiles + +| hostname | role | typical load | services | last review | +|----------|------|--------------|----------|-------------| +| railiance01 | k3s production | _TBD ramp-up_ | k3s, forgejo/apps (inventory) | never | + +## OS & Patch State + +_Pending first OS security pass (RU-05 / weekly protocol)._ + +## Security Posture + +_Pending first security snapshot (RU-05)._ + +## Load & Workload Envelope + +_Pending first load review (RU-06)._ + +## Accumulated Findings + +_None yet._ + +## What Worked + +_None yet._ + +## Watch Points + +- Single-node production: privileged mistakes have full blast radius +- DinD / Actions runner privilege model on railiance01 (see railiance-hosts ADRs) +- Disk growth from images, logs, and backups + +## Recurring Findings + +_None yet._ + +## Cleared Issues + +_None yet._ + +## Open Threads + +- Complete RU-01 access verification +- Capture baseline `vault/baselines/railiance01.md` +- First health + load review report + +## Session Log + + diff --git a/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/session-log/.gitkeep b/engagements/pilots/eng-coulomb-railiance01-ho-001/vault/session-log/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/roles/README.md b/roles/README.md new file mode 100644 index 0000000..9647ad7 --- /dev/null +++ b/roles/README.md @@ -0,0 +1,21 @@ +# Roles + +Supplier-owned **Role** packages for the forward-deployed agency model. + +A Role is a versioned product (craft + protocols + memory template + billing +hints). An **Engagement** binds a Role to a client and targets; see +[docs/forward-deployed-engagement-architecture.md](../docs/forward-deployed-engagement-architecture.md). + +``` +roles/ + / + ROLE.yaml + memory-template.md + ramp-up.md + ramp-down.md + protocols/ # optional; may also live under agents/protocols/ +``` + +| Role | Tier | Status | +|------|------|--------| +| [host-operator](host-operator/) | 4× | pilot (KAIZEN-WP-0009) | diff --git a/roles/host-operator/ROLE.yaml b/roles/host-operator/ROLE.yaml new file mode 100644 index 0000000..4ef1494 --- /dev/null +++ b/roles/host-operator/ROLE.yaml @@ -0,0 +1,61 @@ +# Host Operator — supplier Role package +# See docs/forward-deployed-engagement-architecture.md §5.1 +apiVersion: kaizen.agentic/v1 +kind: Role +metadata: + id: host-operator + version: "0.1.0" + title: Host Operator + category: infrastructure + capability_tier: 4 + status: pilot +spec: + description: > + Competent technical administrator for named Linux hosts — keep the system + operational and secure with up-to-date OS, regular review of system load, + and identification of demanding or overloading workloads. + base_agent: sys-medic + agent_definition_template: agent-definition.md + protocols: + - agent: sys-medic + slug: k3s-node-health-assessment + path: agents/protocols/sys-medic/k3s-node-health-assessment.md + - agent: host-operator + slug: os-security-pass + path: roles/host-operator/protocols/os-security-pass.md + - agent: host-operator + slug: load-workload-review + path: roles/host-operator/protocols/load-workload-review.md + memory_template: memory-template.md + default_cadence: + health_review: daily + os_security_pass: weekly + load_review: daily + timezone: Europe/Berlin + access_classes_allowed: + - read_only + - host_observe + - privileged_ops + ramp_up: + checklist_ref: ramp-up.md + exit_criteria: + - host_baseline_documented + - access_path_verified + - first_health_review_complete + - coach_orientation_filed + ramp_down: + checklist_ref: ramp-down.md + exit_criteria: + - handoff_pack_written + - open_threads_triaged + - access_revoked + - vault_export_confirmed + billing: + seat_product: expert_seat_4x + duty_weights: + standard_review: 1.0 + deep_assessment: 1.0 + pilot_targets: + - kind: host + id: railiance01 + notes: coulomb k3s production node diff --git a/roles/host-operator/agent-definition.md b/roles/host-operator/agent-definition.md new file mode 100644 index 0000000..f04fd39 --- /dev/null +++ b/roles/host-operator/agent-definition.md @@ -0,0 +1,87 @@ +--- +name: host-operator +description: Technical host administrator — OS currency, security posture, load and workload review +category: infrastructure +memory: enabled +role_id: host-operator +role_version: "0.1.0" +base_agent: sys-medic +# Engagement binding fields are filled by staff/render (see pilot agent file) +# engagement_id, targets, memory_path, phase, access_classes, human_approval_for +--- + +# Session Start Protocol + +1. Read engagement binding (frontmatter): targets, phase, access classes, vault path. +2. Load vault memory at `memory_path` (engagement vault — **client confidential**). +3. If phase is `ramp_up`, follow `roles/host-operator/ramp-up.md`. +4. If phase is `ramp_down`, follow `roles/host-operator/ramp-down.md`. +5. If phase is `operating`, select protocol by duty type (health, OS/security, load). +6. Acknowledge memory and charter in the opening brief. +7. Never place secrets, private keys, or long-lived tokens in the vault or reports. + +# Session Close Protocol + +1. Update Host Profiles, OS & Patch State, Security Posture, Load & Workload Envelope as needed. +2. Update Recurring Findings / Cleared Issues / Open Threads. +3. Append Session Log: `YYYY-MM-DD · · · `. +4. Write or update a client-visible report under `reports/` when a scheduled duty completes. +5. Bump `last_updated` and `session_count`. +6. Record metrics if configured; append Kai duty charge only to `commercial/ledger.jsonl` (no secrets). + +--- + +You are **Host Operator**, a careful technical administrator for named Linux hosts +(often k3s production nodes in the coulomb / railiance ecosystem). + +Your craft base is **SysMedic** (health assessment, evidence-driven diagnosis). +You extend that craft with **ongoing duty**: keep systems operational and secure, +with up-to-date OS, and regular review of load and workloads that may overload the host. + +# Core Mission + +For each assigned target host: + +1. Maintain situational awareness (baseline, load envelope, security posture) +2. Detect degradation early (health, disk, memory, noisy workloads) +3. Keep OS and security hygiene current (with human gates for privileged change) +4. Document findings in the **engagement vault** (client-owned knowledge) +5. Propose safe remediation; execute only within access class and approval policy + +# Principles + +- Safety first; observe before acting +- Distinguish observation, diagnosis, recommendation, and action proposal +- Privileged ops require recorded human approval +- Operational knowledge stays in the engagement vault — do not copy into supplier public agents +- Prefer minimally disruptive remediation +- Credential routing via ops-warden / OpenBao — never invent secret vending + +# What Good Output Looks Like + +Same structure as SysMedic health reports when assessing: + +1. Executive Summary +2. Health Status (Healthy / Watch / Degraded / Critical) + confidence +3. Findings (severity, evidence, why it matters, likely cause, next step) +4. Immediate Safe Actions +5. Escalation or Risk Notes +6. Suggested Commands (inspect first; change commands clearly labeled optional) + +For **OS & security pass** and **load & workload review**, follow the Role protocols +under `roles/host-operator/protocols/`. + +# Safety Rules + +Never as a default: + +- Unapproved kill/rm/reboot/drain +- Blind image or log deletion +- Storing secrets in git, vault markdown, or chat +- Expanding scope to hosts not listed in the engagement binding + +# Related + +- base craft: `agents/agent-sys-medic.md` +- protocols: `roles/host-operator/protocols/`, `agents/protocols/sys-medic/` +- architecture: `docs/forward-deployed-engagement-architecture.md` diff --git a/roles/host-operator/memory-template.md b/roles/host-operator/memory-template.md new file mode 100644 index 0000000..14ef3ca --- /dev/null +++ b/roles/host-operator/memory-template.md @@ -0,0 +1,62 @@ +--- +agent: host-operator +engagement_id: "" +project: "" +last_updated: "" +session_count: 0 +confidentiality: client_owned +--- + +# Host Operator Memory + +## Engagement Charter + + + +## Project Context + + + +## Host Profiles + + + +## OS & Patch State + + + +## Security Posture + + + +## Load & Workload Envelope + + + +## Accumulated Findings + + + +## What Worked + + + +## Watch Points + + + +## Recurring Findings + + + +## Cleared Issues + + + +## Open Threads + + + +## Session Log + + diff --git a/roles/host-operator/protocols/load-workload-review.md b/roles/host-operator/protocols/load-workload-review.md new file mode 100644 index 0000000..767e7e4 --- /dev/null +++ b/roles/host-operator/protocols/load-workload-review.md @@ -0,0 +1,103 @@ +--- +agent: host-operator +slug: load-workload-review +title: Load and Workload Review +version: 0.1.0 +last_updated: "2026-07-16" +--- + +# Load and Workload Review + +## Purpose + +Regular review of system load and identification of workloads that are demanding +or may overload the host. Establishes and updates the **load envelope** in memory. + +## Scope + +- Load average vs CPU count +- Memory pressure and swap +- Disk I/O and filesystem fill +- Top processes and (if k3s) top pods +- Job/cron/backup overlap risks +- Comparison to prior baseline envelope + +## Prerequisites + +- Observe-class shell access +- Tools: `uptime`, `nproc`, `free`, `vmstat`, `ps`, `df`, optionally `iostat`, + `kubectl`/`k3s kubectl` + +--- + +## Procedure + +### Step 1 — Instant load picture + +```bash +uptime +nproc +free -h +swapon --show +df -h +``` + +Interpret load average relative to `nproc` (rule of thumb: sustained load ≫ cores → Watch/Degraded). + +### Step 2 — Top consumers + +```bash +ps aux --sort=-%cpu | head -15 +ps aux --sort=-%mem | head -15 +``` + +### Step 3 — Optional I/O and VM + +```bash +vmstat 1 5 +iostat -xz 1 3 2>/dev/null || true +``` + +### Step 4 — Kubernetes workloads (if present) + +```bash +kubectl top nodes 2>/dev/null || true +kubectl top pods -A --sort-by=memory 2>/dev/null | head -25 || true +kubectl top pods -A --sort-by=cpu 2>/dev/null | head -25 || true +kubectl get pods -A --field-selector spec.nodeName=$(hostname) 2>/dev/null | head -40 || true +``` + +### Step 5 — Envelope update + +In vault memory `## Load & Workload Envelope`, record: + +| Field | Example | +|-------|---------| +| Typical load (1/5/15) | 0.4 / 0.5 / 0.6 on 4 cores | +| Peak seen | … | +| Heavy workloads | forgejo runner, backups, … | +| Saturation incidents | date · symptom · resolution | +| Headroom notes | disk 40% free; mem OK | + +### Step 6 — Demand flags + +Flag as findings when: + +- Sustained load > cores without known batch job +- Memory available critically low or swap thrash +- Disk > 85% on critical mounts +- Single pod/process dominating resources without request/limit awareness +- Concurrent heavy jobs (backup + build + migrate) + +## Output template + +```markdown +# Load & Workload Review — + +## Summary +## Load vs capacity +## Top consumers +## Envelope delta (vs last review) +## Overload / demand risks +## Recommended next steps (safe first) +``` diff --git a/roles/host-operator/protocols/os-security-pass.md b/roles/host-operator/protocols/os-security-pass.md new file mode 100644 index 0000000..4807c2a --- /dev/null +++ b/roles/host-operator/protocols/os-security-pass.md @@ -0,0 +1,116 @@ +--- +agent: host-operator +slug: os-security-pass +title: OS and Security Pass +version: 0.1.0 +last_updated: "2026-07-16" +--- + +# OS and Security Pass + +## Purpose + +Weekly (or on-demand) review of OS currency and basic security posture on a +named Linux host. Produces deferred-package notes, reboot planning, and +security findings without applying privileged changes unless approved. + +## Scope + +- Package update availability and critical security updates +- Kernel vs running kernel (reboot-needed signal) +- Listening services and unexpected open ports +- Basic firewall / packet filter presence (if tools available) +- SSH and admin session leftovers (observe) +- TLS/cert expiry awareness where local files or cluster ingress are visible +- User accounts with recent login activity (observe) + +## Prerequisites + +- Observe-class shell access (or better) +- Tools as available: `uname`, package manager (`apt`/`dnf`/`apk`), `ss`/`netstat`, + `systemctl`, `journalctl`, `timedatectl`, `needrestart` (if present) +- **Do not** run upgrades or firewall changes without human approval record + +--- + +## Procedure + +### Step 1 — Identity and time + +```bash +hostname +uname -a +cat /etc/os-release 2>/dev/null || true +timedatectl 2>/dev/null || date +uptime +``` + +### Step 2 — Package currency (read-only first) + +Debian/Ubuntu example: + +```bash +# Refresh metadata only if approved for network use; else report last cache age +apt-get -s upgrade 2>/dev/null | tail -20 +# or +apt list --upgradable 2>/dev/null | head -40 +``` + +Record: +- Count of upgradable packages (if known) +- Security-related package names if identifiable +- Whether reboot is likely required (`needrestart -b` or kernel package pending) + +### Step 3 — Listening services + +```bash +ss -tulpn 2>/dev/null || ss -tuln +``` + +Flag unexpected public listeners; compare to prior baseline. + +### Step 4 — Auth and session hygiene + +```bash +who +last -n 15 2>/dev/null || true +# Failed auth samples (careful with log volume) +journalctl -u ssh --since "7 days ago" -p err --no-pager 2>/dev/null | tail -30 +``` + +### Step 5 — Local firewall signal + +```bash +systemctl is-active ufw nftables firewalld 2>/dev/null || true +nft list ruleset 2>/dev/null | head -5 || iptables -L -n 2>/dev/null | head -20 || true +``` + +Note presence/absence; do not rewrite rules in this pass without approval. + +### Step 6 — Cluster-adjacent security (if k3s) + +```bash +# Node conditions only; no secret dumps +kubectl get node -o wide 2>/dev/null || k3s kubectl get node -o wide 2>/dev/null || true +``` + +### Step 7 — Report + +Update vault: + +- `## OS & Patch State` +- `## Security Posture` +- Findings with severity +- Explicit list of **proposed** privileged actions (upgrades, reboots) awaiting approval + +## Output template + +```markdown +# OS & Security Pass — + +## Summary +## OS currency +## Security findings +## Proposed privileged actions (awaiting approval) +## Deferred / accepted risk +``` diff --git a/roles/host-operator/ramp-down.md b/roles/host-operator/ramp-down.md new file mode 100644 index 0000000..a8bc4ae --- /dev/null +++ b/roles/host-operator/ramp-down.md @@ -0,0 +1,24 @@ +# host-operator — Ramp-down checklist + +**Phase:** `ramp_down` +**Exit:** all RD-* complete → set engagement phase to `closed` + +| ID | Criterion | Evidence path | +|----|-----------|---------------| +| RD-01 | Open threads triaged | Memory `## Open Threads` resolved or transferred | +| RD-02 | Handoff pack written | `vault/handoff/README.md` + baselines export | +| RD-03 | Outstanding risks listed | `vault/handoff/risks.md` | +| RD-04 | Access revoked / certs not renewed | `access-plan.md` “revoked at …” | +| RD-05 | Schedule disabled | `schedule.yml` entries `enabled: false` | +| RD-06 | Client confirms vault custody | Note in `ENGAGEMENT.yaml` or handoff | +| RD-07 | Supplier workspace scrubbed | No client vault copies outside engagement tree policy | + +## Procedure + +1. Freeze new duties; finish in-flight session. +2. Triage open threads (human transfer or new engagement). +3. Write handoff: baseline summary, known risks, deferred patches, how we operate the host. +4. Disable schedules; revoke agent access paths. +5. Confirm vault remains under client custody policy (pilot: export if moving out of supplier tree). +6. Scrub any ad-hoc copies outside the engagement vault. +7. Charge ramp-down Kai package; finalise ledger; set phase `closed`. diff --git a/roles/host-operator/ramp-up.md b/roles/host-operator/ramp-up.md new file mode 100644 index 0000000..1b00441 --- /dev/null +++ b/roles/host-operator/ramp-up.md @@ -0,0 +1,26 @@ +# host-operator — Ramp-up checklist + +**Phase:** `ramp_up` +**Exit:** all RU-* complete with evidence → set engagement phase to `operating` + +| ID | Criterion | Evidence path | +|----|-----------|---------------| +| RU-01 | Access path verified | `access-plan.md` + note of successful observe session | +| RU-02 | Host baseline documented | `vault/baselines/.md` | +| RU-03 | Coach / orientation brief filed | `reports/orientation.md` (or N/A if no prior memories) | +| RU-04 | First health review complete | `reports/YYYY-MM-DD-health-review.md` + session log line | +| RU-05 | Security snapshot initial | Memory `## Security Posture` non-empty | +| RU-06 | Load envelope initial | Memory `## Load & Workload Envelope` non-empty | +| RU-07 | Escalation contacts confirmed | Memory `## Engagement Charter` | +| RU-08 | Human approval path tested | Dry-run privileged proposal logged in `vault/session-log/` or session log | + +## Procedure + +1. Read bound agent definition and this checklist. +2. Verify access (warden/cert/ops-bridge) — **no secrets in vault**. +3. Run baseline capture (OS, disk, memory, load, top workloads, k3s if present). +4. Run first health + load review (protocols: load-workload-review, sys-medic subset). +5. Fill security posture from observe-class checks. +6. Confirm who to escalate to (human operator / on-call). +7. File a dry-run privileged action proposal without executing (proves the gate). +8. Mark RU-* in `checklists/ramp-up-status.md`; charge ramp-up Kai package if funded. diff --git a/wiki/ForwardDeployedAgencyBusinessModel.md b/wiki/ForwardDeployedAgencyBusinessModel.md index 4ab0ec4..2b4cce2 100644 --- a/wiki/ForwardDeployedAgencyBusinessModel.md +++ b/wiki/ForwardDeployedAgencyBusinessModel.md @@ -1,9 +1,10 @@ # Forward-Deployed Agency Business Model -**Status:** draft v0.1 +**Status:** v0.2 working accepted (DEC-FDA-001) **Date:** 2026-07-16 **Audience:** product owners, coulomb ecosystem operators, early client sponsors **Companion tech spec:** [docs/forward-deployed-engagement-architecture.md](../docs/forward-deployed-engagement-architecture.md) +**Decisions:** [docs/decisions/DEC-FDA-001-working-defaults.md](../docs/decisions/DEC-FDA-001-working-defaults.md) **Builds on:** [PricingModel.md](PricingModel.md), [RevenueModel.md](RevenueModel.md), [KaizenAgenticMission.md](KaizenAgenticMission.md), ADR-006 --- @@ -358,10 +359,15 @@ modest tokens). ## 12. Open decisions (for sponsor) -1. Who operates the Kai ledger (state-hub extension vs. lightweight YAML ledger vs. finance tool)? -2. Is internal coulomb billed only in Kai forever, or eventually soft EUR for cost visibility? -3. Multi-tenant companies: one client account or one per product line? -4. Can unused Kai transfer between sister projects in the same company? +**Phase 1 locked** in DEC-FDA-001: file JSONL ledger; pilot path under +`engagements/pilots/`; one engagement × N targets; metrics opt-in default off. + +Still open for later: + +1. Is internal coulomb billed only in Kai forever, or eventually soft EUR for cost visibility? +2. Multi-tenant companies: one client account or one per product line? +3. Can unused Kai transfer between sister projects in the same company? +4. When to introduce a shared settlement service beyond JSONL? --- diff --git a/workplans/kaizen-agentic-WP-0009-forward-deployed-agency.md b/workplans/kaizen-agentic-WP-0009-forward-deployed-agency.md index 88bed5f..08e1a2e 100644 --- a/workplans/kaizen-agentic-WP-0009-forward-deployed-agency.md +++ b/workplans/kaizen-agentic-WP-0009-forward-deployed-agency.md @@ -4,7 +4,7 @@ type: workplan title: "Forward-deployed agency: engagements, Kai ledger, host-operator pilot" domain: agents repo: kaizen-agentic -status: ready +status: active owner: kaizen-agentic topic_slug: custodian created: "2026-07-16" @@ -18,22 +18,22 @@ tasks: status: done title: Business model and architecture drafts (Kai + engagement lifecycle) - id: T02 - status: todo + status: done title: Accept or revise open decisions; promote drafts to accepted reference - id: T03 - status: todo + status: done title: Role package scaffold for host-operator (ROLE.yaml + protocols) - id: T04 - status: todo + status: done title: Phase 1 file-based engagement layout and pilot ENGAGEMENT for railiance01 - id: T05 - status: todo + status: done title: Bound agent definition from sys-medic craft + engagement binding appendix - id: T06 - status: todo + status: done title: Ramp-up and ramp-down checklists with exit criteria evidence paths - id: T07 - status: todo + status: done title: JSONL Kai ledger convention and quote snapshot for pilot - id: T08 status: todo @@ -52,7 +52,7 @@ state_hub_workstream_id: "70f7afb1-78f1-4e3b-8437-48840b5b58cc" # KAIZEN-WP-0009 — Forward-Deployed Agency -**Status:** ready +**Status:** active **Owner:** kaizen-agentic **Repo:** kaizen-agentic **Depends on:** WP-0002 (agency memory), WP-0006 (schedule prepare), WP-0008 (customer engagement) @@ -111,91 +111,76 @@ Delivered 2026-07-16: ```task id: KAIZEN-WP-0009-T02 -status: todo +status: done priority: high state_hub_task_id: "d624072d-1939-40f0-bfa2-498a24673b4c" ``` -Resolve architecture open questions with sponsor: - -1. Kai ledger home (file JSONL vs hub extension) -2. Engagement store placement (dedicated repo vs railiance-hosts subdirectory) -3. Multi-target agent binding shape -4. Default metrics opt-in for supplier optimizer - -Update both draft docs to `accepted` / v0.2 when decided. Optionally promote -architecture sections into ADR-007. +**Delivered 2026-07-16 (working defaults):** +[DEC-FDA-001](../docs/decisions/DEC-FDA-001-working-defaults.md) — JSONL ledger, +`engagements/pilots/` placement, one engagement × N targets, metrics opt-in off. +Docs promoted to v0.2. Sponsor may override; ADR-007 deferred to T11. ## host-operator Role package ```task id: KAIZEN-WP-0009-T03 -status: todo +status: done priority: high state_hub_task_id: "407eae88-a3fe-4da9-80eb-ea92828fd488" ``` -Add supplier Role scaffold per architecture §5.1: - -- `roles/host-operator/ROLE.yaml` (or agreed package path) -- Protocols: `os-security-pass`, `load-workload-review` (plus reuse sys-medic k3s) -- Memory template extensions (host profiles, OS/patch, security, load envelope) -- Capability tier 4; base_agent: sys-medic +**Delivered:** `roles/host-operator/` — ROLE.yaml v0.1.0, agent-definition, +memory-template, ramp-up/down, protocols `os-security-pass` + `load-workload-review`, +base_agent sys-medic, tier 4. ## Phase 1 engagement layout + pilot record ```task id: KAIZEN-WP-0009-T04 -status: todo +status: done priority: high state_hub_task_id: "c90fd780-982f-48ea-a017-2eee44f2e8c7" ``` -Create file-based engagement tree for pilot (location per T02 decision), including: - -- `ENGAGEMENT.yaml` for `eng-coulomb-railiance01-ho-001` -- Request YAML, schedule.yml, access-plan.md (no secrets) -- Empty vault scaffold - -Document the path in architecture §11 if it differs from the draft proposal. +**Delivered:** `engagements/pilots/eng-coulomb-railiance01-ho-001/` full tree +(ENGAGEMENT, request, schedule, access-plan, vault, checklists, commercial, reports). ## Bound agent definition ```task id: KAIZEN-WP-0009-T05 -status: todo +status: done priority: high state_hub_task_id: "e48f0ec3-4258-4650-8c92-eb25e4dca755" ``` -Materialise engagement-bound agent definition from sys-medic + binding appendix -(targets, phase, human_approval_for, vault paths, charter). Until Role package -ships, sys-medic + appendix is acceptable; migrate to host-operator when T03 lands. +**Delivered:** `agent-host-operator.md` bound definition (targets, phase, +approval gates, vault path, charter, protocol table). ## Ramp checklists ```task id: KAIZEN-WP-0009-T06 -status: todo +status: done priority: medium state_hub_task_id: "3c166660-b4b8-49fc-9dcb-c47e7d676792" ``` -Author ramp-up (RU-01…RU-08) and ramp-down (RD-01…RD-07) checklists with -evidence paths matching architecture §7. Link from ENGAGEMENT.yaml. +**Delivered:** Role checklists + pilot `checklists/ramp-up-status.md` and +`ramp-down-status.md` with evidence paths; linked from ENGAGEMENT.yaml. ## Kai ledger (Phase 1) ```task id: KAIZEN-WP-0009-T07 -status: todo +status: done priority: medium state_hub_task_id: "16e90a62-973b-4cc8-ac36-87bfad52e538" ``` -- `commercial/ledger.jsonl` schema per architecture §10 -- Quote snapshot for pilot month-1 seat + ramp + estimated duties -- Document mint/spend against internal coulomb grant (no real EUR required) +**Delivered:** `commercial/quote.yaml` (~72 800 Kai month-1), `ledger.jsonl` +with quote-open note, commercial README. ## CLI engagement group