From 7a3c8669c783bd0a502578cf103dc03ff990de10 Mon Sep 17 00:00:00 2001 From: tegwick Date: Sun, 26 Jul 2026 12:33:07 +0200 Subject: [PATCH] Fix ADR-001 workplan reference after HARNESS-WP-0002 rename Co-Authored-By: Claude Sonnet 5 --- .gitignore | 6 + AGENTS.md | 189 ++++++++++++++++++ SCOPE.md | 32 +++ WORK-RECORDS.md | 21 ++ docs/adr/ADR-001-rein-harness-family.md | 2 +- workplans/GLAS-0001-statehub-bootstrap.md | 59 ++++++ .../GLAS-WP-0001-harness-router-foundation.md | 7 + 7 files changed, 315 insertions(+), 1 deletion(-) create mode 100644 AGENTS.md create mode 100644 SCOPE.md create mode 100644 WORK-RECORDS.md create mode 100644 workplans/GLAS-0001-statehub-bootstrap.md diff --git a/.gitignore b/.gitignore index 36b13f1..71ee8eb 100644 --- a/.gitignore +++ b/.gitignore @@ -174,3 +174,9 @@ cython_debug/ # PyPI configuration file .pypirc + +# state-hub: track .claude/rules +# Claude Code local state (track shared rules; ignore machine-specific files) +.claude/* +!.claude/rules/ +!.claude/rules/*.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..a90f0cf --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,189 @@ +# glas-harness — Agent Instructions + +## Repo Identity + +**Purpose:** Meta-framework routing between concrete agent-harness backends (reins) + +**Domain:** infotech +**Repo slug:** glas-harness +**Topic ID:** `cee7bedf-2b48-46ef-8601-006474f2ad7a` +**Workplan prefix:** `GLAS-` + +--- + +## 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` | +| Optional local edge relay | http://127.0.0.1:18080 | + +When an operator has enabled the edge relay, set API_BASE to the relay URL. +Queueable writes return an explicit queued receipt if the central hub is +unreachable. Treat that as pending local evidence, then ask the operator to run +statehub outbox status/replay after connectivity returns. + +### Orient at session start + +```bash +# Offline brief — works without hub connection +cat .custodian-brief.md + +# Active workplans for this domain +curl -s "http://127.0.0.1:8000/workplans/?topic_id=cee7bedf-2b48-46ef-8601-006474f2ad7a&status=active" \ + | python3 -m json.tool + +# Check inbox +curl -s "http://127.0.0.1:8000/messages/?to_agent=glas-harness&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", + "workplan_id": "", + "task_id": "" + }' +``` + +Omit `workplan_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": "progress"}' +# values: wait | todo | progress | done | cancel +``` + +### 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 workplans (offline-safe) +2. Check inbox: `GET /messages/?to_agent=glas-harness&unread_only=true`; mark read +3. Scan workplans: `ls workplans/` — note `status: ready`, `active`, or `blocked` files and open tasks +4. Check human-needed 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. If finishing a workplan: hand off **residuals** as live work records first + (intake with `origin: residual` + `origin_ref: `, or a next workplan / + decision / engagement). Do not park leftovers only in prose or `SCOPE.md`. + Canon: `the-custodian/canon/standards/work-record-types_v0.1.md` § Residuals. +3. Log: `POST /progress/` with a summary of what changed (name handoff ids) +4. After workplan file changes, run: + ```bash + statehub fix-consistency + ``` + Coding agents should run this directly; ask the operator only if the CLI or + State Hub API is unavailable. This syncs task status from files into the hub DB. + +--- + +{CREDENTIAL_ROUTING} + + + + +--- + +## 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/GLAS-NNNN-.md` + +**Archived location:** finished workplans may move to +`workplans/archived/YYMMDD-GLAS-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: GLAS-NNNN +type: workplan +title: "..." +domain: infotech +repo: glas-harness +status: proposed | ready | active | blocked | backlog | finished | archived +owner: codex +topic_slug: ... +created: "YYYY-MM-DD" +updated: "YYYY-MM-DD" +state_hub_workstream_id: "" # fix-consistency — do not edit (legacy field name; workplan UUID) +--- +``` + +Use `proposed` for a new draft, `ready` after review against current repo +state, and `finished` after implementation. `stalled` and `needs_review` are +derived health labels, not frontmatter statuses. + +**Terminology:** workplan is the fleet term; `workstream` appears only in legacy +API/MCP/frontmatter bridges until `STATE-WP-0069` retires them — see +`the-custodian/canon/standards/workplan-terminology-fleet_v0.1.md`. + +**Task block format** (one per `##` section): + +``` +## Task Title + +` ` `task +id: GLAS-NNNN-T01 +status: wait | todo | progress | done | cancel +priority: high | medium | low +state_hub_task_id: "" # written by fix-consistency — do not edit +` ` ` + +Task description text. +``` + +Status progression: `todo` → `progress` → `done`; use `wait` for waiting/blocked work and `cancel` for stopped work. + +**Residuals when finishing:** actionable leftovers become live work records +before `status: finished` — usually an intake (`origin: residual`, +`origin_ref: GLAS-NNNN`) or a spawned workplan. Residual is a *role*, +not a kind. Fleet list lives on State Hub, not in `SCOPE.md`. + +To create a new workplan: +1. Write the file following the format above +2. Run `statehub fix-consistency` locally; ask the operator only if the CLI or + State Hub API is unavailable. diff --git a/SCOPE.md b/SCOPE.md new file mode 100644 index 0000000..08be05d --- /dev/null +++ b/SCOPE.md @@ -0,0 +1,32 @@ +# SCOPE + +> This file was generated by `statehub register`. Refine it as the repository +> boundaries become clearer. + +## One-liner + +Meta-framework routing between concrete agent-harness backends (reins) + +## Core Idea + +glas-harness exists to provide the capability described in INTENT.md. + +## In Scope + +- Maintain the repository's primary implementation. +- Keep docs, tests, and operational metadata current. + +## Out of Scope + +- Own unrelated adjacent systems. +- Make irreversible operational decisions without human approval. + +## Current State + +- Status: active; implementation and stability should be verified by the repo agent. + +## Getting Oriented + +- Start with: INTENT.md +- Agent instructions: AGENTS.md +- Workplans: workplans/ diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md new file mode 100644 index 0000000..f791089 --- /dev/null +++ b/WORK-RECORDS.md @@ -0,0 +1,21 @@ +# Work Records — glas-harness + +> Generated by `statehub fix-consistency` (CUST-WP-0061-T04, work-record +> stage 3). Do not edit by hand — edit the source file/block listed for +> each record and re-run fix-consistency to refresh this index. Archived +> workplans are omitted; closed decisions/intakes/engagements stay listed +> so recently-resolved work is still visible. [auto] + +| Kind | ID | Status | Lane | Source | +| --- | --- | --- | --- | --- | +| workplan | GLAS-0001 | ready | — | workplans/GLAS-0001-statehub-bootstrap.md | +| workplan | GLAS-WP-0001 | proposed | — | workplans/GLAS-WP-0001-harness-router-foundation.md | +| task | GLAS-0001-T01 | todo | — | workplans/GLAS-0001-statehub-bootstrap.md | +| task | GLAS-0001-T02 | todo | — | workplans/GLAS-0001-statehub-bootstrap.md | +| task | GLAS-0001-T03 | todo | — | workplans/GLAS-0001-statehub-bootstrap.md | +| task | GLAS-WP-0001-T01 | todo | — | workplans/GLAS-WP-0001-harness-router-foundation.md | +| task | GLAS-WP-0001-T02 | todo | — | workplans/GLAS-WP-0001-harness-router-foundation.md | +| task | GLAS-WP-0001-T03 | todo | — | workplans/GLAS-WP-0001-harness-router-foundation.md | +| task | GLAS-WP-0001-T04 | todo | — | workplans/GLAS-WP-0001-harness-router-foundation.md | +| task | GLAS-WP-0001-T05 | todo | — | workplans/GLAS-WP-0001-harness-router-foundation.md | +| task | GLAS-WP-0001-T06 | todo | — | workplans/GLAS-WP-0001-harness-router-foundation.md | diff --git a/docs/adr/ADR-001-rein-harness-family.md b/docs/adr/ADR-001-rein-harness-family.md index 74a0eb4..dbf8373 100644 --- a/docs/adr/ADR-001-rein-harness-family.md +++ b/docs/adr/ADR-001-rein-harness-family.md @@ -52,7 +52,7 @@ through an equivalent agentic tool-use loop. project name) are updated as part of this ADR landing. The CLI command name, Python package name, and deploy artifacts (Docker image tag, k8s namespace, Railiance host paths) are **deliberately left unrenamed for - now** — see `rein-aharness/workplans/REIN-A-WP-0002` — because they + now** — see `rein-aharness/workplans/HARNESS-WP-0002` — because they touch a live deployment and deserve their own reviewed change, not a silent mechanical rename bundled into an architecture decision. diff --git a/workplans/GLAS-0001-statehub-bootstrap.md b/workplans/GLAS-0001-statehub-bootstrap.md new file mode 100644 index 0000000..c8e75f6 --- /dev/null +++ b/workplans/GLAS-0001-statehub-bootstrap.md @@ -0,0 +1,59 @@ +--- +id: GLAS-0001 +type: workplan +title: "Bootstrap State Hub integration" +domain: infotech +repo: glas-harness +status: ready +owner: codex +topic_slug: custodian +created: "2026-07-26" +updated: "2026-07-26" +state_hub_workstream_id: "ff06817b-5101-45c1-90c1-0534d7fed1ce" +--- + +# Bootstrap State Hub integration + +Meta-framework routing between concrete agent-harness backends (reins) + +## Review Generated Integration Files + +```task +id: GLAS-0001-T01 +status: todo +priority: high +state_hub_task_id: "89f9f0d8-8715-486f-b1b6-bb7afcf885d7" +``` + +Review `INTENT.md`, `SCOPE.md`, `AGENTS.md`, and `.custodian-brief.md`. +Replace generated placeholders with repo-specific facts where needed. + +## Verify Local Developer Workflow + +```task +id: GLAS-0001-T02 +status: todo +priority: high +state_hub_task_id: "e52c40e5-49b3-43d2-be50-774993c715d9" +``` + +Identify the repo's install, test, lint, build, and run commands. Add or refine +those commands in the agent instructions so future coding sessions can verify +changes confidently. + +## Seed First Real Workplan + +```task +id: GLAS-0001-T03 +status: todo +priority: medium +state_hub_task_id: "2ad8b534-ebf8-479b-834b-f8df629df717" +``` + +Create the first implementation workplan for the repository's most important +next change. After workplan file updates, run the sync locally from this repo +checkout: + +```bash +statehub fix-consistency +``` diff --git a/workplans/GLAS-WP-0001-harness-router-foundation.md b/workplans/GLAS-WP-0001-harness-router-foundation.md index 8e156ad..f904079 100644 --- a/workplans/GLAS-WP-0001-harness-router-foundation.md +++ b/workplans/GLAS-WP-0001-harness-router-foundation.md @@ -2,6 +2,7 @@ id: GLAS-WP-0001 title: "Harness router foundation: contract + first two reins" status: proposed +state_hub_workstream_id: "4b8740d9-9ea8-4c11-abfc-af9e9ac1c2df" --- Turn glas-harness from a charter into the actual harness router per @@ -26,6 +27,7 @@ harness level: something like `start_session`/`dispatch_tool`/ id: GLAS-WP-0001-T01 status: todo priority: high +state_hub_task_id: "e4e6e7e4-ad30-42b7-a278-39d24ec5cecc" ``` ## Task: Rein registry @@ -42,6 +44,7 @@ glas-harness` entry per the registry-first-reuse principle. id: GLAS-WP-0001-T02 status: todo priority: medium +state_hub_task_id: "c09e617b-a2d1-42c4-8c90-47ab0056c09c" ``` ## Task: Harness profile catalog seed @@ -57,6 +60,7 @@ fast local iteration without an SSH hop. id: GLAS-WP-0001-T03 status: todo priority: medium +state_hub_task_id: "e599f276-a010-4284-bddd-a5a121b57de9" ``` ## Task: Minimal CLI gateway — prove the contract against rein-aharness @@ -72,6 +76,7 @@ concern" conversation — deliberately not attempted until this exists. id: GLAS-WP-0001-T04 status: todo priority: high +state_hub_task_id: "cdcacf98-62a1-47ae-92b9-e0320968ac1f" ``` ## Task: Charter and bootstrap rein-openweights @@ -88,6 +93,7 @@ before anything is pushed — coordinate repo creation with the operator. id: GLAS-WP-0001-T05 status: todo priority: high +state_hub_task_id: "84fa62ae-3b34-42fd-a263-f65c35e87586" ``` ## Task: Decide credential-brokering ownership for rein-openweights @@ -102,4 +108,5 @@ before T05 lands, not after. id: GLAS-WP-0001-T06 status: todo priority: medium +state_hub_task_id: "b4e775d6-ad81-40a4-9fd0-974ba27182fd" ```