canon drafts + CUST-WP-0060: work-record canonization stages 1-2
- canon/standards/work-record-types_v0.1.md (+ machine registry .yaml): work-record umbrella, closed kind registry (workplan/task/intake/ decision/engagement/register-entry), UUIDv7-internal + canonical-name layering, abstract lifecycles incl. intake, promotion as first-class transition, source-anywhere + generated index, tags, budgets, reconciliation loop. status: draft pending ratification - canon/standards/autonomy-lanes_v0.1.md: binky AutonomyPolicy lane model promoted to fleet canon; lane as mandatory spine field; hub-owned time-boxing; attention as WIP-limited workstation. status: draft - workplans/CUST-WP-0060 (hub 4555741c, T01-T07): ratification, terminology v0.2 extension, per-kind schemas, Forgejo CI validation, fix-consistency sidetrack detector (C-25), binky-control pilot with grandfathered ids, stage-3 handoff. Ratification pending as hub decision f4640f9e Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
58ea92b2e2
commit
5ccf5fcd90
4 changed files with 461 additions and 0 deletions
98
canon/standards/autonomy-lanes_v0.1.md
Normal file
98
canon/standards/autonomy-lanes_v0.1.md
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
---
|
||||
id: canon-autonomy-lanes
|
||||
type: standard
|
||||
title: "Autonomy Lanes (Fleet) v0.1"
|
||||
domain: custodian
|
||||
status: draft
|
||||
version: "0.1"
|
||||
created: "2026-07-20"
|
||||
updated: "2026-07-20"
|
||||
scope: fleet
|
||||
related_workplans:
|
||||
- CUST-WP-0060
|
||||
supersedes: none
|
||||
origin: binky-control/AutonomyPolicy.md (ratified for Binky 2026-07-16, DEC-2026-001)
|
||||
---
|
||||
|
||||
# Autonomy Lanes (Fleet) v0.1
|
||||
|
||||
> Draft pending founder ratification (CUST-WP-0060-T01). Promotes the
|
||||
> binky-control AutonomyPolicy lane model to fleet canon, unchanged in
|
||||
> substance. binky-control's `AutonomyPolicy.md` remains the company-level
|
||||
> policy instance; this standard makes the lane vocabulary and enforcement
|
||||
> rules fleet-wide.
|
||||
|
||||
## The rule
|
||||
|
||||
> If the responsible human is unavailable, the system must either continue
|
||||
> safely, prepare the next decision, or explicitly defer with evidence. It
|
||||
> must not silently idle.
|
||||
|
||||
Valid states: `proceeding` | `prepared for review` | `deferred by policy`.
|
||||
Invalid state: `waiting because unsure`. Uncertainty triggers research,
|
||||
comparison, preparation, or risk classification — not paralysis.
|
||||
"Ask the human" is never the default.
|
||||
|
||||
## Lanes
|
||||
|
||||
| Lane | Name | Agent may | Human involvement |
|
||||
| --- | --- | --- | --- |
|
||||
| **green** | Safe autonomous | research, summarize, classify, draft, organize, test, prepare | none (human-on-the-loop via logs) |
|
||||
| **blue** | Reversible execution | internal docs, backlog updates, local scripts, reports, local commits | none, but logged |
|
||||
| **yellow** | Deferred approval | prepare external emails, invoices, offers, releases, payments | async approval via decision records |
|
||||
| **orange** | Time-window approval | customer/legal/accounting/banking actions needing business hours | engagement records, batched into command days |
|
||||
| **red** | Human-only | signing, strategic commitments, bank/credential changes, sensitive legal/HR/security | always; agents prepare packages only |
|
||||
|
||||
Optimization target: **maximize green+blue throughput, queue yellow, batch
|
||||
orange, protect red from automation.** Risk-tiered gating (in-the-loop for
|
||||
irreversible actions, on-the-loop for recoverable ones) is the only
|
||||
oversight pattern that scales.
|
||||
|
||||
## Lane as a spine field
|
||||
|
||||
`lane` is a **mandatory field on every work record** (see
|
||||
`work-record-types_v0.1.md`) and on every agent instance manifest. The
|
||||
chain is closed end-to-end:
|
||||
|
||||
```
|
||||
work record.lane → view routing (autopilot / decision / engagement)
|
||||
→ harness tool profile (enforced allow-list)
|
||||
→ ops-warden credential lane (catalog access)
|
||||
```
|
||||
|
||||
Declaring a lane an item does not hold is a policy violation the harness
|
||||
must catch (tool profile refuses the run).
|
||||
|
||||
## Approval packages (yellow and above)
|
||||
|
||||
An agent hitting a lane boundary prepares a complete decision package,
|
||||
never a bare question: recommended action, reason, evidence links, risk
|
||||
level, reversibility, deadline (`needed_by`), attention cost, fallback if
|
||||
no response, options.
|
||||
|
||||
## Human attention is a WIP-limited workstation
|
||||
|
||||
The responsible human's capacity is modeled like any lane capacity:
|
||||
attention budget (minutes/day, max decisions/day, max deep topics/day) and
|
||||
availability as first-class state (`available | evening_window |
|
||||
unavailable | office_hour_day`), with an explicit escalation allow-list
|
||||
when unavailable (critical security incident, payment failure, legal
|
||||
deadline). Yellow routes to the decision view, orange to the engagement
|
||||
view, both subject to that capacity.
|
||||
|
||||
**Time-boxing is hub-owned:** `needed_by` / `fallback_if_no_response`
|
||||
windows are watched by the hub → NATS → activity-core; a lapsed window
|
||||
raises the escalation or executes the declared fallback — never a human
|
||||
re-reading a file.
|
||||
|
||||
## Raising autonomy
|
||||
|
||||
Autonomy per area is raised only after the system proves reliable there,
|
||||
by explicit human decision recorded as a decision work record. Lane
|
||||
assignments are auditable history; lowering a lane needs no approval.
|
||||
|
||||
## References
|
||||
|
||||
- `binky-control/AutonomyPolicy.md` (origin instance)
|
||||
- `canon/standards/work-record-types_v0.1.md`
|
||||
- `research/2026-07-19-work-orchestration-best-practices.md` §2
|
||||
57
canon/standards/work-record-types.yaml
Normal file
57
canon/standards/work-record-types.yaml
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
# Machine copy of canon/standards/work-record-types_v0.1.md (kind registry).
|
||||
# CI and fix-consistency validate id patterns against this file.
|
||||
# New kinds/prefixes land here by canon PR only.
|
||||
version: "0.1"
|
||||
status: draft
|
||||
kinds:
|
||||
- kind: workplan
|
||||
id_patterns:
|
||||
- "^[A-Z]+-WP-[0-9]{4}$"
|
||||
lifecycle: [proposed, ready, active, blocked, backlog, finished, archived]
|
||||
- kind: task
|
||||
id_patterns:
|
||||
- "^[A-Z]+-WP-[0-9]{4}-T[0-9]{2,3}$"
|
||||
- "^ADHOC-[0-9]{4}-[0-9]{2}-[0-9]{2}-T[0-9]{2}$"
|
||||
lifecycle: [wait, todo, progress, done, cancel]
|
||||
- kind: intake
|
||||
id_patterns:
|
||||
- "^[A-Z]+-IN-[0-9]{4}$"
|
||||
lifecycle: [open, vetted, routed, closed]
|
||||
closed_outcomes: [promoted, declined, absorbed]
|
||||
legacy_patterns:
|
||||
- pattern: "^AWQ-[0-9]{3}$"
|
||||
source: binky-control AutopilotWorkQueue
|
||||
grandfathered: true
|
||||
- kind: decision
|
||||
id_patterns:
|
||||
- "^[A-Z]+-DEC-[0-9]{4}-[0-9]{3}$"
|
||||
lifecycle: [prepared, resolved]
|
||||
resolved_outcomes: [approved, rejected, revised, deferred]
|
||||
legacy_patterns:
|
||||
- pattern: "^DEC-[0-9]{4}-[0-9]{3}$"
|
||||
source: binky-control DecisionQueue
|
||||
grandfathered: true
|
||||
- kind: engagement
|
||||
id_patterns:
|
||||
- "^[A-Z]+-ENG-[0-9]{4}-[0-9]{3}$"
|
||||
lifecycle: [queued, prepared, done]
|
||||
legacy_patterns:
|
||||
- pattern: "^OH-[0-9]{4}-[0-9]{3}$"
|
||||
source: binky-control OfficeHourQueue
|
||||
grandfathered: true
|
||||
- kind: register-entry
|
||||
id_patterns:
|
||||
- "^RISK-[0-9]{3}$"
|
||||
- "^TD-[0-9]+$"
|
||||
- "^CAP-[0-9]+$"
|
||||
- "^CCR-[0-9]{4}-[0-9]{4}$"
|
||||
- "^ADR-[0-9]{3}$"
|
||||
lifecycle: per-register-convention
|
||||
spine_fields:
|
||||
required: [id, kind, lane, status, owner, repo]
|
||||
hub_assigned: [uuid]
|
||||
optional: [tags, created, updated]
|
||||
lanes: [green, blue, yellow, orange, red]
|
||||
tags:
|
||||
derived: [stalled, stale, overdue-decision, budget-breached, orphaned]
|
||||
policy: [automatable, needs-human, unclear-implementation, red-adjacent, compliance-relevant]
|
||||
169
canon/standards/work-record-types_v0.1.md
Normal file
169
canon/standards/work-record-types_v0.1.md
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
---
|
||||
id: canon-work-record-types
|
||||
type: standard
|
||||
title: "Work Record Types & Identity (Fleet) v0.1"
|
||||
domain: custodian
|
||||
status: draft
|
||||
version: "0.1"
|
||||
created: "2026-07-20"
|
||||
updated: "2026-07-20"
|
||||
scope: fleet
|
||||
related_workplans:
|
||||
- CUST-WP-0060
|
||||
supersedes: none
|
||||
machine_copy: canon/standards/work-record-types.yaml
|
||||
---
|
||||
|
||||
# Work Record Types & Identity (Fleet) v0.1
|
||||
|
||||
> Draft pending founder ratification (CUST-WP-0060-T01). Source:
|
||||
> `research/WorkOrchestrationArchitectureDraft.md` v0.2 (founder-reviewed
|
||||
> 2026-07-20). Extends — does not replace —
|
||||
> `workplan-terminology-fleet_v0.1.md` and ADR-001/ADR-005.
|
||||
|
||||
## Purpose
|
||||
|
||||
Define **work record** as the umbrella term for every identified,
|
||||
lifecycle-bearing coordination artefact in the fleet; register the closed
|
||||
list of work-record **kinds**, their id schemes and abstract lifecycles;
|
||||
and fix the two-layer identity rule. This is the backbone convention for
|
||||
all work — planning, development, testing, operations, security &
|
||||
compliance, controlling, billing, marketing, sales — under one conceptual
|
||||
framework (different demands are met by flow profiles and kind-specific
|
||||
fields, never by parallel ontologies).
|
||||
|
||||
## Core definition
|
||||
|
||||
A **work record** is any identified, lifecycle-bearing coordination
|
||||
artefact. A **task** is one *kind* of work record — the smallest executable
|
||||
unit. Every work record, regardless of kind, carries the **conventional
|
||||
spine**:
|
||||
|
||||
| Field | Convention |
|
||||
| --- | --- |
|
||||
| `id` | canonical name per the type registry below |
|
||||
| `uuid` | UUIDv7, hub-assigned at first index, written back to the source file |
|
||||
| `kind` | one of the registered kinds |
|
||||
| `lane` | autonomy lane (`autonomy-lanes_v0.1.md`) |
|
||||
| `status` | abstract lifecycle of the kind (below) |
|
||||
| `owner` | agent identity (`agt-…`) or human |
|
||||
| `repo` | owning repo (ADR-001/ADR-005 anchor) |
|
||||
| `tags` | policy + derived tags (§ Tags) |
|
||||
| `created` / `updated` | dates (UUIDv7 supplies fine-grained internal time) |
|
||||
|
||||
Kind-specific fields (budget, evidence, counterparty, deadline_pressure,
|
||||
attention_cost, …) extend the spine; they never replace it.
|
||||
|
||||
## Kind registry (closed list)
|
||||
|
||||
| Kind | Id scheme | Meaning | Absorbs / legacy |
|
||||
| --- | --- | --- | --- |
|
||||
| `workplan` | `{PREFIX}-WP-NNNN` | structured, dependency-bearing body of work | — |
|
||||
| `task` | `{WP-ID}-TNN` (workplan) · `ADHOC-YYYY-MM-DD-TNN` | smallest executable unit | issue-core issues become external projections only |
|
||||
| `intake` | `{PREFIX}-IN-NNNN` | spark: idea, finding, directive, request | hub suggestions (legacy, read-only close-out); `AWQ-NNN` (grandfathered) |
|
||||
| `decision` | `{PREFIX}-DEC-YYYY-NNN` | approval package + resolution | `DEC-YYYY-NNN` (binky, grandfathered as-is) |
|
||||
| `engagement` | `{PREFIX}-ENG-YYYY-NNN` | scheduled external interaction (counterparty, prepared material, time window) | `OH-YYYY-NNN` (grandfathered) |
|
||||
| `register-entry` | existing schemes: `RISK-NNN`, `TD-…`, `CAP-…`, `CCR-YYYY-NNNN`, `ADR-NNN` | risks, technical debt, capability requests, credential change requests, architecture decisions | unchanged semantics, brought under the spine |
|
||||
|
||||
Rules:
|
||||
|
||||
1. **The registry is closed.** An id pattern not registered in
|
||||
`work-record-types.yaml` fails CI and `fix-consistency` (the *sidetrack
|
||||
detector*). New kinds/prefixes are added by canon PR — deliberately
|
||||
cheap (one YAML entry + one schema) so the legitimate path is easier
|
||||
than any workaround.
|
||||
2. **Grandfathering:** existing ids are never renamed. Legacy prefixes map
|
||||
to kinds in the registry; retirement of a *scheme* (never of records)
|
||||
follows the legacy-meter discipline of
|
||||
`workplan-terminology-fleet_v0.1.md`.
|
||||
|
||||
## Identity layering
|
||||
|
||||
- **UUIDv7 is primary** for bookkeeping, relations, dependencies, and
|
||||
history. It is stable across renames, migrations, and terminology
|
||||
transitions.
|
||||
- **Canonical names are primary for humans and agents** — UI, CLI, API
|
||||
output, prose, commits. UUIDs stay inspectable on demand but are never
|
||||
required reading.
|
||||
- The hub writes the UUID back into the source file at first index
|
||||
(pattern: today's `state_hub_*_id` fields).
|
||||
|
||||
## Abstract lifecycles (canon-fixed, minimal)
|
||||
|
||||
| Kind | Lifecycle |
|
||||
| --- | --- |
|
||||
| task | `wait → todo → progress → done \| cancel` (InfoTechCanon) |
|
||||
| workplan | `proposed → ready → active → blocked → backlog → finished → archived` |
|
||||
| intake | `open → vetted → routed → closed(promoted \| declined \| absorbed)` |
|
||||
| decision | `prepared → resolved(approved \| rejected \| revised \| deferred)` |
|
||||
| engagement | `queued → prepared → done` |
|
||||
| register-entry | per existing register conventions (unchanged) |
|
||||
|
||||
**Promotion is a first-class transition:** `intake.routed →
|
||||
workplan | task | decision | engagement`, executed by one CLI/MCP call that
|
||||
writes both artefacts, sets `promoted_to` / `origin` back-links, and
|
||||
re-syncs. Manual transcription of an intake item into other kinds is a
|
||||
process defect.
|
||||
|
||||
**Kind-specific rigor lives in flow profiles**, not extra states: named
|
||||
task-flow-engine workstation definitions whose entry/exit assertions encode
|
||||
per-work-kind gates (e.g. compliance tasks cannot exit `progress` without
|
||||
an evidence link). Profiles are YAML in repos, in the same reconciliation
|
||||
loop.
|
||||
|
||||
## Source files, index, and views
|
||||
|
||||
1. **Any repo file is a potential source of work records.** Records are
|
||||
authored as schema-valid YAML blocks in context — thematic live
|
||||
documents, meeting notes, design docs, triage logs. The schema is the
|
||||
contract, not the location. Workplans keep dedicated files.
|
||||
2. **A generated per-repo work-record index** references every registered
|
||||
record in its source location (transclusion-style; markitect-family
|
||||
tooling). It is the "everything across all files" orientation view and a
|
||||
concurrency cross-check.
|
||||
3. **Every working list is a generated view** (`[auto]`-marked) over
|
||||
indexed records — autopilot views, decision queues, engagement batches,
|
||||
briefs. Hand-maintained completed-logs and queue tails are retired.
|
||||
4. Ordering of views is **lane + priority + age** by default; dependency
|
||||
capture optional; WSJF optional and situational (overload triage only).
|
||||
|
||||
## Tags
|
||||
|
||||
Two classes, both in `tags`, never in `status`:
|
||||
|
||||
- **Derived tags** — computed, read-only in files: `stalled`, `stale`,
|
||||
`overdue-decision`, `budget-breached`, `orphaned`.
|
||||
- **Policy tags** — assigned under tagging policies: `automatable`,
|
||||
`needs-human`, `unclear-implementation`, `red-adjacent`,
|
||||
`compliance-relevant`.
|
||||
|
||||
States migrate badly; tags migrate trivially. Anything situational is a tag.
|
||||
|
||||
## Budgets
|
||||
|
||||
Guardrail envelopes resolve programmatically at run start:
|
||||
workplan-frontmatter override → per-repo `budgets.yaml` (lane/default
|
||||
envelopes) → **global best-guess default**. Nothing runs unbounded. Budget
|
||||
resolution and enforcement is automation infrastructure, never agentic
|
||||
effort; metering via token events; breach ⇒ `budget-breached` + escalation.
|
||||
|
||||
## Reconciliation loop (normative)
|
||||
|
||||
```
|
||||
author (any repo file) → CI schema validation → commit
|
||||
→ fix-consistency: register/sync, UUID write-back
|
||||
→ hub read model → generated index + views → NATS events → activity-core
|
||||
```
|
||||
|
||||
The hub remains a read model per ADR-001; runtime operations data (logs,
|
||||
metrics, run histories, token events) is the sanctioned DB-only exception.
|
||||
|
||||
## References
|
||||
|
||||
- `research/WorkOrchestrationArchitectureDraft.md` (v0.2)
|
||||
- `research/2026-07-19-work-orchestration-infrastructure-survey.md`
|
||||
- `research/2026-07-19-work-orchestration-best-practices.md`
|
||||
- `canon/architecture/adr-001-workplans-as-repo-artefacts.md`, `adr-005-…`
|
||||
- `canon/standards/workplan-terminology-fleet_v0.1.md`
|
||||
- `canon/standards/autonomy-lanes_v0.1.md`
|
||||
- `state-hub/docs/task-flow-engine-spec.md`
|
||||
Loading…
Add table
Add a link
Reference in a new issue