# artifact-store — Agent Instructions ## Repo Identity **Purpose:** Generic artifact registry and storage gateway for generated outputs, evidence packages, reports, logs, snapshots, exports, and release artifacts. **Domain:** stack **Repo slug:** artifact-store **Topic ID:** `595afc64-bd28-47bf-aafb-ba230b28371b` **Workplan prefix:** `ARTIFACT-STORE-WP-` --- ## State Hub Integration The Custodian State Hub tracks work across all domains. Interact via HTTP REST — there is no MCP server for Codex agents. | Context | URL | |---------|-----| | Local workstation | `http://127.0.0.1:8000` | | Remote via tunnel | `http://127.0.0.1:18000` | ### Orient at session start ```bash # Offline brief — works without hub connection cat .custodian-brief.md # Active workstreams for this domain curl -s "http://127.0.0.1:8000/workstreams/?topic_id=595afc64-bd28-47bf-aafb-ba230b28371b&status=active" \ | python3 -m json.tool # Check inbox curl -s "http://127.0.0.1:8000/messages/?to_agent=artifact-store&unread_only=true" \ | python3 -m json.tool ``` Mark a message read: ```bash curl -s -X PATCH "http://127.0.0.1:8000/messages//read" \ -H "Content-Type: application/json" -d '{}' ``` ### Log progress (required at session close) ```bash curl -s -X POST http://127.0.0.1:8000/progress/ \ -H "Content-Type: application/json" \ -d '{ "summary": "what was done", "event_type": "note", "author": "codex", "workstream_id": "", "task_id": "" }' ``` Omit `workstream_id` / `task_id` when not applicable. ### Update task status ```bash curl -s -X PATCH "http://127.0.0.1:8000/tasks/" \ -H "Content-Type: application/json" \ -d '{"status": "in_progress"}' # values: todo | in_progress | done | blocked ``` ### Flag a task for human review ```bash curl -s -X PATCH "http://127.0.0.1:8000/tasks/" \ -H "Content-Type: application/json" \ -d '{"needs_human": true, "intervention_note": "reason"}' ``` --- ## Session Protocol **Start:** 1. `cat .custodian-brief.md` — domain goal and open workstreams (offline-safe) 2. Check inbox: `GET /messages/?to_agent=artifact-store&unread_only=true`; mark read 3. Scan workplans: `ls workplans/` — note `status: active` files and open tasks 4. Check blocked tasks: `GET /tasks/?needs_human=true` **During work:** - Update task statuses in workplan files as tasks progress - Record significant decisions via `POST /decisions/` **Close:** 1. Update workplan file task statuses to reflect progress 2. Log: `POST /progress/` with a summary of what changed 3. Note for the custodian operator: after workplan file changes, run from `~/the-custodian/state-hub`: ```bash make fix-consistency REPO=artifact-store ``` This syncs task status from files into the hub DB. --- ## Workplan Convention (ADR-001) Work items originate as files in this repo — not in the hub. The hub is a read/cache/index layer that rebuilds from files. **File location:** `workplans/ARTIFACT-STORE-WP-NNNN-.md` **Archived location:** completed workplans may move to `workplans/archived/YYMMDD-ARTIFACT-STORE-WP-NNNN-.md`. The `YYMMDD` prefix is the completion/archive date; the frontmatter `id` does not change. **Ad Hoc Tasks:** small opportunistic fixes discovered during a session use `workplans/ADHOC-YYYY-MM-DD.md` with task ids `ADHOC-YYYY-MM-DD-T01`, etc. Use this only for low-risk work completed directly; create a normal workplan for anything needing analysis, design, approval, dependencies, or multiple phases. **Frontmatter:** ```yaml --- id: ARTIFACT-STORE-WP-NNNN type: workplan title: "..." domain: stack repo: artifact-store status: active | done owner: codex topic_slug: ... created: "YYYY-MM-DD" updated: "YYYY-MM-DD" state_hub_workstream_id: "" # written by fix-consistency — do not edit --- ``` **Task block format** (one per `##` section): ``` ## Task Title ` ` `task id: ARTIFACT-STORE-WP-NNNN-T01 status: todo | in_progress | done | blocked priority: high | medium | low state_hub_task_id: "" # written by fix-consistency — do not edit ` ` ` Task description text. ``` Status progression: `todo` → `in_progress` → `done` (or `blocked`) To create a new workplan: 1. Write the file following the format above 2. Notify the custodian operator to run `make fix-consistency REPO=artifact-store` (or send a message to the hub agent via `POST /messages/`) --- ## Current Repo Shape v0.1 baseline (WP-0001) is live: library, CLI, minimal HTTP app, local FS backend, end-to-end ingest + finalize + replay. The pinned tech stack is in [ADR-0005](docs/adr/0005-v1-tech-stack.md). Sources of truth: - `INTENT.md` — purpose, product thesis, scope, service boundary. - `SCOPE.md` — lightweight orientation. - `docs/OPERATOR.md` — runbook: env vars, DB backends, CLI / HTTP reference, smoke test, replay procedure. - `docs/ARCHITECTURE-BLUEPRINT.md` — architecture v2: modules, data model, API shape. - `docs/PLATFORM-AMBITION.md` — longer-horizon thesis and the v1 schema commitments (A1–A9). - `docs/adr/` — architecture decision records ADR-0001 … ADR-0006 (content-addressed storage, event log as source of truth, canonical CBOR manifests, control/data plane contract, v1 tech stack, OCI reachability). - `docs/ROADMAP.md` — workplan sequencing across phases. - `docs/ASSEMBLY-EXPERIMENT.md` — opt-in research line on hand-tuned asm for hot kernels. - `workplans/ARTIFACT-STORE-WP-0001-service-baseline.md` — Foundation workplan (done). - `workplans/ARTIFACT-STORE-WP-{0002..0005}-*.md` — planned next workplans. Local commands: ```sh make install # uv sync --all-extras make migrate-fresh # drop + re-create the dev SQLite DB make dev # uvicorn on 127.0.0.1:8000 make test # pytest make lint type # ruff + mypy --strict artifactstore health ``` ## Repo Boundary This repo owns artifact identity, package/file metadata, storage backend abstraction, retention policy, retrieval metadata, and audit trails. It does not own StateHub work records, guide-board assessment semantics, formal records-management certification, or producer-specific business logic.