The actual documents the agents read and work from, shown exactly as they are on disk — not a summary. See the progress view instead · All projects
Owner: Chantelle (execution) · Nick (sign-off)
Purpose: instruction — the one governing file for the Creative Projects board and every design project run under it.
# PLAN — Creative Projects: design work becomes real projects on a real board
**🔴🔴 THIS IS THE ONLY FILE FOR THIS PROJECT. Do not create a second plan, tracker, summary, state or assumptions file — extend THIS file. Its state, questions and assumptions live in sections below, per Nick's ruling 2026-08-26: "we only need one project file ever". Any status view is GENERATED from this plan; if a view disagrees with the plan, the plan wins.**
**NORTH STAR:** Chantelle opens the Hub, sees a Creative board that works exactly like AI Builds, and every piece of design work she has running is a card on it with a plan behind it — and if her machine dies mid-job she opens the same board and the same files on Nick's Mac, on another account, and carries on without losing a thing.
**FINISH LINE:**
1. The Creative board on the Hub accepts cards filed by an agent, and rejects a card whose name is not `CREATIVE: Project - Task`.
2. Every design project Chantelle has running today is a card on that board with a plan file behind it.
3. An agent cannot produce a design asset without a creative plan file and a live card — it is refused, by name, with the fix in the refusal.
4. Neeko's scheduled sweep reads the Creative board on the same beat it reads the build board, and records a finding when a creative project drifts off spec.
5. Every finished design asset opens from the shared drive on any machine and any account, and no design asset's only copy is on a Mac.
6. Chantelle never opens Finder to find her own work. She names a project to an agent and the agent brings it up; the name resolves to exactly one project, with no ambiguity about which one she means.
7. Each project has ONE copy of each thing. No second version, no variant, no stale duplicate, no orphan holding part of a creation — unless she asked for a variant, in which case the one she chose is the one that is kept. 🔴 THE SCOPE IS PER PROJECT, AND THAT IS DELIBERATE: a shared brand asset legitimately appears in several projects, so the same logo may sit in both Brand Guidelines and Hiring Roadmap Popups. Measured 2026-09-16: 8 byte-identical groups, 11 files, span different projects and are never reaped. Collapsing them would break the self-containment that makes 'bring up the hiring popups' give her everything that project needs.
8. The shared drive self-cleans: conflict copies and superseded revisions are reaped on a schedule, so redundancy cannot accumulate again.
9. Her machine can never again be silently cut off from the record — the causes are detected, healed where they can be, and surfaced when they cannot.
**Owner:** Chantelle · **Overseer:** Fable (never builds) · **Design authority:** Sienna (`creative-director`), UI only
> **STEP 0 — ARM THE LOOP, BEFORE ANYTHING ELSE.** Set a 5-minute loop. Every time it fires, answer
> these five in order and CORRECT any failure before doing anything else:
> 1. **NORTH STAR** — is what I am doing this minute moving this plan's North Star? If not, drop it.
> 2. **FAN-OUT** — declare the whole actual roster, dispatch useful ready work, and shed your own unnecessary processes. Coordinate through peers or the launching dispatcher; no numeric cap or load-wait rule applies.
> 3. **CHEAP** — are cheap models doing the building AND the per-step checking? If anything on
> Anthropic or OpenAI is building or checking a step, move it down now (§M).
> 4. **STUCK** — for anything I have called blocked: name the input that does not exist yet, or the
> three concrete things I tried. If I cannot, it is not blocked — drive through it now.
> 5. **NEXT** — did something just finish? Then the next step whose inputs exist starts THIS minute.
> A finished step is never a place to stop, a report is never a reason to wait, and Nick being
> away or asleep is the reason to keep going, not to pause.
> Then keep building. The loop never stops until the FINISH LINE is proven.
**Rule: a step starts the moment its named inputs exist, whatever its number. A step closes on ONE independent check by a different model. Nothing waits on Nick to test.**
## Already true (facts, not story)
- The Hub already carries a `creative` lane server-side, live, with the same agent stage vocabulary as AI Builds — evidence: `command grep -n creative projects/business/business-app/app/functions/api/tasks.js` returns it in `LANES_WITH_AGENT_STAGE_VOCAB` and the lane allowlist, added on Nick's word 2026-09-04.
- That lane holds ZERO cards and no agent can file one: the board tool's `EXTRA_WRITABLE_LANES` is `["ai-builds", "zion"]` — evidence: `node projects/ops/skippy-jobs/lib/board-report.mjs --read --lane creative` → `0 of 167 total tasks`.
- AI Builds carries 7 live cards through the same tooling — evidence: the same command with `--lane ai-builds` → `7 of 167`.
- The project status registry holds 46 rows and not one is a design or creative project — evidence: `projects/ops/artifacts/project-status/registry.json`.
- RULE 24's category table has no code for design work — evidence: `command grep -o "HUB, FA[^)]*" projects/ops/MACHINE-RULES.md`.
- Chantelle's finished design work is about 1 GB and exists only on her Mac: `output/` 472 MB across 9 folders, `projects/business/hs-meadow/` 575 MB — evidence: `du -sh`, 2026-09-16; `git ls-files output/` returns 5 of 285 files.
- Her Mac mounts the `Heroes and Sidekicks Claude Infra` shared drive in streaming mode, with folders already mirroring the project structure and no Creative folder — evidence: listing that shared drive returned `total 0` of local disk, 2026-09-16.
- Neeko's project-doc sweep discovers projects ONLY from the legacy `projects/ops/assistants-replan/` directory, not from the registry — evidence: `projects/ops/skippy-jobs/jobs/neeko-project-doc-sweep.mjs` line 59.
- Both this repository and the Hub sub-repository were brought to `origin/main` on 2026-09-16. A zero-byte `.git/index.lock` abandoned on 2026-09-11 had been failing every sync on this Mac since, leaving it 5,529 commits behind; the lock is cleared and both are current.
## 0 · Gate Zero receipts (the plan may not exist without these)
- Failure Mode Registry loaded: 2026-09-16, 4 tables. The entries this build is exposed to are named with their measures in §4: *a second system was built because the first was invisible* · *output was delivered somewhere the intended reader never looks* · *a "growing" archive had actually frozen* · *a pipeline broke silently and looked identical to a working one* · *files were archived but their citations kept pointing at them* · *a critical boundary was config-editable and could be silently widened* · *session rules never reached the subagents doing the work*.
- Canonical specs loaded: the code standard, the creative QA standard, the handback gate spec, and the Hub's own kanban and agent-boards spec — the board this mirrors.
- Ownership check: `projects/ops/artifacts/project-status/registry.json`, read 2026-09-16 — 46 rows, no row whose slug or name contains `creative` or `design`. The `creative` LANE exists and is extended here; no second board is built.
- Expected inputs confirmed to exist: the Hub `creative` lane, read live · the board tool and its lane allowlist, read · the planned-project predicate, read · the Neeko sweep, read · the shared drive mount, listed.
- PLAN AUTHOR: this session (Fable 5.1, on Chantelle's Mac, under Nick's authority).
- COLD READER: `none — SINGLE-AUTHOR, UNREVIEWED` at authoring; STEP 1's checker is the first independent read.
- PROMPT-SPEC scan (P1–P7): **P1 fired twice.** "A new board that mirrors AI Builds" — settled V2 by opening the Hub: the lane already exists, so this is an extension, not a new board. "Where the assets live" — settled V1 by Nick, delegated to measurement, §1a row 3. **P4 fired once:** "all this stuff she works on" — settled V2 by enumerating the real folders, recorded under "Already true". No other ambiguity material to the build.
## 1 · Goal and definition of done
**What we're building, one paragraph.** Chantelle's design work currently happens off-book: no plan, no card, no spec, and its output lands in a folder on one Mac. Every other kind of work here is a project — it has a plan file, a card on the AI Builds board, a status page, and a scheduled assistant that checks it has not drifted. This puts design work on exactly that footing, on the Hub's own already-live Creative lane, and moves the finished files to the shared drive so the work survives a dead machine, a session limit, or a different account.
- **HOW IT'S USED:** Chantelle, or an agent working for her, starts a piece of design work; before any asset exists there is a plan file and a card on the Creative board; each asset or series of assets is a card; agents move the card through the same stages AI Builds uses; Neeko checks nightly that the cards still match their plans. · HOW WE KNOW: Nick, 2026-09-16 — *"if a new asset or series of assets is being generated it gets a card and the agents running the ane manage the projects to spec in the baords and neeko gets a check added to his scheduled tasks to check the design boards too"*.
- **WHAT IT LOOKS LIKE:** a board in the Hub called Creative, identical in behaviour to AI Builds — same six stages, same cards, same kanban — plus a folder per project on the shared drive holding the actual files. · HOW WE KNOW: Nick, 2026-09-16 — *"itll be on a new board that mirrors the ai builds board in the hub called creative projects"*; the lane's stage vocabulary is already the AI Builds vocabulary in the Hub's own code.
- **WHERE IT LIVES:** the board at `hub.heroesandsidekicks.io` under Tasks → Creative, opened by **Chantelle and Nick**; the plans under `projects/creative/` in the cloud copy of this repository; the files in `Creative Projects/` on the `Heroes and Sidekicks Claude Infra` shared drive. · HOW WE KNOW: the lane read live 2026-09-16; the shared drive listed 2026-09-16.
- **WHAT IT MUST DO:** 1 · accept a card filed on the `creative` lane by an agent, through the existing board tooling, with no second writer built; 2 · refuse a card whose name is not `CREATIVE: Project - Task`; 3 · refuse a design asset produced with no creative plan file and no live card, naming the missing thing and the command that fixes it; 4 · carry every design project Chantelle has running today as a card with a plan behind it; 5 · be read by Neeko's existing scheduled sweep on the same beat as the build board, recording a finding when a creative project drifts off its plan; 6 · hold every finished asset on the shared drive, reachable from any machine and any account, with nothing's only copy on a Mac. · HOW WE KNOW: each is a direct restatement of one clause of Nick's 2026-09-16 instruction, and each becomes an eval in §6.
- **NOT in scope:** the ANTI-SCOPE.
- **Any change to the AI Builds board, its cards, or its lane.** It is live and carries seven real projects; this build only adds a sibling. Touching it risks the thing that already works.
- **Any security or privacy work.** Per the standing rule, a security-shaped observation costs one line in `projects/ops/sp-sec/PLAN.md` and the lane returns to its step. The plaintext GitHub token noticed in this repository's remote URL is recorded there and is NOT worked here.
- **Any redesign of Chantelle's existing assets.** This build governs how design work is tracked and stored; it does not re-open, re-cut, or re-style a single finished file.
- **Migrating any non-design project to the Creative board.** The build board keeps everything it has.
- **Deleting anything from the Mac.** Assets are COPIED to the shared drive and verified before any local copy is considered redundant; removal is a separate, approved act.
- **Trip-over protocol:** a lane that finds something outside the fence writes one handover line to its named owner (a security- or privacy-shaped thing: one line in `projects/ops/sp-sec/PLAN.md`), then back to building — never investigates, never fixes.
## 1a · Critical variables — the confirmation sheet is GENERATED from this table
| # | The variable, in plain words | Value chosen | Alternatives rejected | Class | HOW WE KNOW | Cost if wrong | CONFIRMED |
|---|---|---|---|---|---|---|---|
| 1 | **SURFACE — which screen this lands on, and who opens it** | The Hub's Creative board, Tasks → Creative, opened by Chantelle and Nick | A separate standalone design tool; a Monday board, which is banned outright | V1 | Nick's own words name the Hub and the mirror | A board nobody opens, so the work stays invisible — which is the problem being fixed | `Nick, 2026-09-16, "itll be on a new board that mirrors the ai builds board in the hub called creative projects"` |
| 2 | The short capital code every creative card's name starts with | `CREATIVE` | `DESIGN`; `BRAND` | V1 | Asked directly, answered directly | Cards are refused by the board's own naming door, or two codes end up in use | `Nick, 2026-09-16, "CREATIVE"` |
| 3 | Where the finished design files actually live | The `Heroes and Sidekicks Claude Infra` shared drive, folder `Creative Projects/` | Cloudflare R2, which gives no folder a person can open; git, where every Mac downloads about a gigabyte forever, against the standing storage rule | V1 | Nick delegated the choice to measurement and named the criterion himself | About a gigabyte moved twice; or design work stays on one Mac, which is the failure this fixes | `Nick, 2026-09-16, "we dont download everythign back onto the macs anymore right? what is the easiest and fastest path for retrieval for woking on it"` — settled by measurement against his criterion: the drive is mounted in streaming mode with nothing held on local disk, opens by double-click in Finder, and is a SHARED drive so it is tied to neither account |
| 4 | Whether the Creative board is a new board or the existing lane extended | The existing `creative` lane, extended | A newly created board | V2 | The Hub's own task API source, read 2026-09-16 | A second board beside a working one — the exact registry failure listed first in §4 | `opened the Hub's task API source, 2026-09-16, saw: "creative" already in LANES_WITH_AGENT_STAGE_VOCAB and the lane allowlist` |
- V1 confirmation reads `<name>, <date>, "<their own words>"` — the date is required.
- V2 confirmation reads `opened <what>, <date>, saw: <what was actually there>`.
**Considered and ruled NOT critical:**
- Whether each asset gets its own card or a series shares one — Nick said *"a new asset or series of assets"*, so both are legal and the project decides per case.
- The stage names on the Creative board — they are the AI Builds six, already in the Hub's code; inventing a set would be a second vocabulary.
- Which cheap vendor builds which step — named per step in §3b from the matrix, and swappable by the failover ladder.
## 1b · Subproject decomposition — could a piece of this ship on its own?
| Subproject | End goal (one sentence — what's TRUE when done) | Depends on (named artefact) | Owner | Own PLAN.md path | Confirmation-sheet status |
|---|---|---|---|---|---|
| A · The board works | An agent can file and move a card on the Creative lane, and a badly-named card is refused | none — start now | Chantelle | this file, §3b STEP 1, 2, 4 | rows 1, 2, 4 confirmed |
| B · Design work cannot happen off-book | An agent producing a design asset with no plan and no card is refused by name | Subproject A's writable lane | Chantelle | this file, §3b STEP 3, 5, 6 | row 1 confirmed |
| C · The work survives the machine | Every finished asset opens from the shared drive on any machine and any account | none — start now | Chantelle | this file, §3b STEP 3, 7 | row 3 confirmed |
**Carve-out rule:** anything left out of every subproject's scope is named with a real owner in the same edit, or it may not be left out. The plaintext credential in this repository's git remote is carved out to `projects/ops/sp-sec/PLAN.md`, owner: the sp-sec lane.
## 2 · The complete UX map (this becomes the test manifest verbatim)
| Id | Screen / entry point | State (default·empty·error·loading) | Element / interaction | Expected behavior | Navigation from → to |
|---|---|---|---|---|---|
| U1 | Hub → Tasks | default | The board selector | `Creative` appears as a selectable board once it holds at least one open card | Tasks → the creative board view |
| U2 | Hub → Tasks → Creative | empty | The lane with no cards | The lane renders no chip; filing happens through the add form — the app-wide "a 0 never renders" rule | — |
| U3 | Hub → Tasks → Creative | default | Card list | One row per creative card, each named `CREATIVE: Project - Task` | — |
| U4 | Hub → Tasks → Creative | default | Board view toggle | One click swaps to kanban with the six AI Builds stages in order: Backlog · In Progress · Waiting on an Answer · Internal Review · Nick's Review · Done | list ↔ kanban |
| U5 | Hub → Tasks → Creative | default | A card | Opening it shows its subtasks and its agent run history in plain English | card → card detail |
| U6 | Hub → Tasks → Creative | error | A card named without the `CREATIVE:` prefix | Refused at the door with the real allowed shape named | — |
| U7 | My Boards rail | default | The rail entry | `Creative` appears with its open-card count once it has open cards | rail → the creative board view |
| U8 | Finder, either Mac, either account | default | The project's folder on the shared drive | The project's finished files open by double-click, streamed rather than downloaded in bulk | — |
## 2d · DESIGN FIDELITY GATE
`DESIGN FIDELITY GATE: N/A — nothing rendered.` This build ships no new screen: the Creative board is drawn by the Hub's existing board renderer, which already serves AI Builds and five other boards and is byte-frozen by its own harness. Any pixel change to that renderer is out of scope, per §1 ANTI-SCOPE.
## 3 · Lanes and frozen contracts
| Lane | Scope (in / out) | Owner | Definition of done | Builder (cheap, named) | Backup builder | Checker (different model) | Backup checker |
|---|---|---|---|---|---|---|---|
| A · Board | in: the board tool's lane allowlist, the naming door, the registry rows, the real cards. out: the Hub renderer, AI Builds | Chantelle | An agent files and moves a Creative card; a bad name is refused | GLM 5.3 (`zai`) | DeepSeek V4 Pro (`deepseek`) | Sonnet | Qwen 3.8 (`qwen`) |
| B · Gate | in: the creative-plan predicate, the refusal hook, their red-first proofs. out: any existing gate's behaviour on non-design work | Chantelle | Design output with no plan and no card is refused by name | DeepSeek V4 Pro (`deepseek`) | Qwen 3.8 (`qwen`) | Sonnet | GLM 5.3 (`zai`) |
| C · Sweep | in: the Neeko sweep's discovery source. out: Neeko's other jobs and the two checks themselves | Chantelle | The sweep reads creative projects and records a drift finding | Qwen 3.8 (`qwen`) | DeepSeek V4 Pro (`deepseek`) | Sonnet | GLM 5.3 (`zai`) |
| D · Assets | in: the copy to the shared drive, the pointer file, the verification. out: deleting anything, re-cutting any asset | Chantelle | Every asset opens from the shared drive on a second machine | GLM 5.3 (`zai`) | Qwen 3.8 (`qwen`) | Sonnet | DeepSeek V4 Pro (`deepseek`) |
**Contracts between lanes (FROZEN at plan time — change = a dated delta in §7 below):**
- **Card id shape:** `ac-creative-<slug>`, produced ONLY by the board tool's existing id function. No lane mints an id another way.
- **Card name shape:** `CREATIVE: <Project> - <Task>`, per RULE 24. One matcher, in the board's existing naming door; never a second regex.
- **Plan path:** one folder per project under `projects/creative/`, each with exactly one governing file. Registry row shape `{slug, name, dir, planFile, publicOk}` in the existing registry — no second registry.
- **Asset path:** `Creative Projects/<slug>/` on the shared drive; the repository holds a pointer, never the bytes.
- **The predicate:** lane B extends the existing planned-project predicate; it never writes a second predicate module.
## 3b · Execution map — the Step map, then one STEP block per row
A task is DONE only when its review-ledger row is CLOSED by a reviewer that is not the builder.
**Step map (read this first).** The DONE-PROOF column is where this plan declares which step builds each harness, before any step block cites it:
| Stage | # | Task (step name) | Needs (named artefact, or `none — start now`) | EXECUTOR (cheap model) | EXECUTOR BACKUP | CHECKER (different model) | CHECKER BACKUP | DONE-PROOF (runnable command) |
|---|---|---|---|---|---|---|---|---|
| Plan | 1 | The Creative lane accepts a card from an agent | none — start now | GLM 5.3 (`zai`) | DeepSeek V4 Pro (`deepseek`) | Sonnet | Qwen 3.8 (`qwen`) | `node projects/ops/skippy-jobs/lib/board-report.mjs --read --lane creative` |
| Plan | 2 | `CREATIVE` is a real category code in RULE 24 | none — start now | DeepSeek V4 Pro (`deepseek`) | Qwen 3.8 (`qwen`) | Sonnet | GLM 5.3 (`zai`) | `command grep -o "HUB, FA[^)]*" projects/ops/MACHINE-RULES.md` |
| Tests | 3 | The three proof harnesses exist and can fail | none — start now | Qwen 3.8 (`qwen`) | DeepSeek V4 Pro (`deepseek`) | Sonnet | GLM 5.3 (`zai`) | `node projects/ops/skippy-jobs/_test-creative-harnesses-are-red.mjs` — CREATED BY STEP 3, which is this step: its whole purpose is to write the harnesses the later steps must pass, so its runner is born with them |
| Framing | 4 | Every design project she has now is a card with a plan | STEP 1 closed — an `ac-creative-` card exists | GLM 5.3 (`zai`) | Qwen 3.8 (`qwen`) | Sonnet | DeepSeek V4 Pro (`deepseek`) | `node projects/ops/skippy-jobs/lib/board-report.mjs --read --lane creative` |
| Elements | 5 | A creative plan and card is resolvable for a design session | STEP 3 and STEP 4 closed | DeepSeek V4 Pro (`deepseek`) | Qwen 3.8 (`qwen`) | Sonnet | GLM 5.3 (`zai`) | `node projects/ops/skippy-jobs/_test-creative-plan-predicate.mjs` — CREATED BY STEP 3 |
| Elements | 6 | Design output with no plan and no card is refused | STEP 5 closed — the predicate resolves creative plans | DeepSeek V4 Pro (`deepseek`) | Qwen 3.8 (`qwen`) | Sonnet | GLM 5.3 (`zai`) | `node projects/ops/skippy-jobs/_test-creative-work-gate.mjs` — CREATED BY STEP 3 |
| Details | 7 | Every finished asset is on the shared drive | STEP 3 closed — the verifier exists | GLM 5.3 (`zai`) | Qwen 3.8 (`qwen`) | Sonnet | DeepSeek V4 Pro (`deepseek`) | `node projects/creative/_verify-assets-on-drive.mjs` — CREATED BY STEP 3 |
| Proof | 8 | Neeko's sweep reads the creative projects too | STEP 4 closed — creative rows in the registry | Qwen 3.8 (`qwen`) | DeepSeek V4 Pro (`deepseek`) | Sonnet | GLM 5.3 (`zai`) | `node projects/ops/skippy-jobs/jobs/neeko-project-doc-sweep.mjs` |
### STEP 1 — The Creative lane accepts a card from an agent
**FOR NICK:** Chantelle's design work can finally be filed on the Creative board — until now the board existed but nothing could be put on it. · **Tier:** FRONT
**Start when:** none — start now.
**Builder:** GLM 5.3 (`zai`) · **Builder backup:** DeepSeek V4 Pro (`deepseek`) · **Checker:** Sonnet · **Checker backup:** Qwen 3.8 (`qwen`)
**Files you may touch:** `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/ops/skippy-jobs/lib/board-report.mjs`, the `EXTRA_WRITABLE_LANES` constant and its comment ONLY. **Never** the assistants roster in `projects/ops/skippy-jobs/lib/agent-board.mjs` (owner: the assistants lane — `creative` is a lane, not an identity, and must never become a legal assignee), and never the Hub repository (owner: the HUB lane).
**Do exactly this:**
1. In that file, change `export const EXTRA_WRITABLE_LANES = Object.freeze(["ai-builds", "zion"]);` to `export const EXTRA_WRITABLE_LANES = Object.freeze(["ai-builds", "zion", "creative"]);`
2. Directly above it add one comment line: `// "creative" ADDED 2026-09-16 on Nick's word — same additive pattern as "ai-builds" and "zion": a LANE, never an assistant identity, so AGENTS stays untouched.`
3. File this project's own card with the board tool's `--open --lane creative --title "CREATIVE: Creative Projects - The board, the gate and the shared drive" --stage "In Progress"`.
**DEFINITION OF DONE:** the Creative lane returns at least one real card, and that card's id begins `ac-creative-`.
**PROOF:** `node projects/ops/skippy-jobs/lib/board-report.mjs --read --lane creative` → a line beginning `ac-creative-` and a trailing count of `1 of N` or more · **FAILS IF:** the count reads `0 of N`, or the command errors with a lane-validation refusal naming `creative`.
**If the check fails:** the builder fixes and re-checks the named failure until it passes. If this step cannot close from this machine: one line to the overseer naming the ONE missing thing, then the next step whose inputs exist.
**Checker's job:** re-run the PROOF yourself, once. PASS closes the step. Do not accept the builder's pasted output; do not summon anyone else.
### STEP 2 — `CREATIVE` is a real category code in RULE 24
**FOR NICK:** creative cards can be named the way every other card on every board is named, so nothing on the Creative board is refused at the door. · **Tier:** FRONT
**Start when:** none — start now.
**Builder:** DeepSeek V4 Pro (`deepseek`) · **Builder backup:** Qwen 3.8 (`qwen`) · **Checker:** Sonnet · **Checker backup:** GLM 5.3 (`zai`)
**Files you may touch:** `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/ops/MACHINE-RULES.md`, RULE 24's category list ONLY. **Never** any other rule in that file (owner: Nick), and never a second copy of the rule anywhere (RULE 23).
**Do exactly this:**
1. File the ticket first, because that file is governed: run the request-ticket tool against `projects/ops/MACHINE-RULES.md` with the reason `RULE 24 category table gains CREATIVE, on Nick's word 2026-09-16`.
2. On Nick's tap, edit RULE 24's parenthesised list from `HUB, FA, VOICE, SKIPPY, BRAINS, HEALTH, FILES, AGENTS, SKILLS, SCHED, CAPTUS, SCHOOL, RULES` to the same list with `, CREATIVE` appended before the semicolon.
3. Change nothing else in that rule or that file.
**DEFINITION OF DONE:** RULE 24's category table contains `CREATIVE`, and the rule is stated exactly once in the repository.
**PROOF:** `command grep -o "HUB, FA[^)]*" projects/ops/MACHINE-RULES.md` → a list ending `RULES, CREATIVE; refined over time on Nick's word, never silently` · **FAILS IF:** `CREATIVE` is absent, or the rule's text appears in more than one file.
**If the check fails:** the builder fixes and re-checks the named failure until it passes. If the ticket is not tapped by the time the rest of the plan is done, record that in §8 and hand Nick the finished one-line change in plain words — never stall the other steps on it.
**Checker's job:** re-run the PROOF yourself, once. PASS closes the step.
### STEP 3 — The three proof harnesses exist and can fail
**FOR NICK:** nothing he notices directly — this writes the tests the next three steps have to pass, before those steps are built, so none of them can mark itself correct. · **Tier:** POLISH
**Start when:** none — start now.
**Builder:** Qwen 3.8 (`qwen`) · **Builder backup:** DeepSeek V4 Pro (`deepseek`) · **Checker:** Sonnet · **Checker backup:** GLM 5.3 (`zai`)
**Files you may touch:** `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/ops/skippy-jobs/_test-creative-plan-predicate.mjs`, `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/ops/skippy-jobs/_test-creative-work-gate.mjs`, `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/creative/_verify-assets-on-drive.mjs`, `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/ops/skippy-jobs/_test-creative-harnesses-are-red.mjs`, all new. **Never** the code those harnesses test (owners: STEP 5, STEP 6, STEP 7) — writing the implementation here would make the builder its own checker.
**Do exactly this:**
1. Write the predicate harness, asserting: a creative plan with a real board-card id resolves PLANNED; the same plan with a placeholder id resolves UNPLANNED; a pre-existing `PLAN-ZION-*.md` fixture resolves exactly as it does today.
2. Write the gate harness, asserting: a design-asset write with no creative plan is REFUSED and the refusal text contains the literal `--lane creative`; the same write WITH a resolvable creative plan is allowed; a non-design write is untouched; an internal error fails OPEN.
3. Write the asset verifier, which reads the pointer file and, for every project named there, asserts the shared-drive folder exists and its file count and total byte size match the local original.
4. Write the red-proof runner, which runs the three above against today's unmodified code and asserts each one FAILS — the evidence that none of them can pass by accident.
**DEFINITION OF DONE:** all four files exist, and the three harnesses provably fail against today's code.
**PROOF:** `node projects/ops/skippy-jobs/_test-creative-harnesses-are-red.mjs` → each of the three harnesses reported RED with its reason named · **FAILS IF:** any harness passes against today's code, or any of the four files is absent, or a harness errors for a reason other than the defect it exists to catch.
**If the check fails:** the builder fixes and re-checks the named failure until it passes.
**Checker's job:** re-run the PROOF yourself, once, and additionally read one harness and confirm its assertions match what its step's DEFINITION OF DONE actually says. PASS closes the step.
### STEP 4 — Every design project she has now is a card with a plan
**FOR NICK:** Chantelle opens the Creative board and sees everything she is actually working on, instead of it living in a folder nobody else can see. · **Tier:** FRONT
**Start when:** STEP 1 closed — the board read returns an `ac-creative-` card.
**Builder:** GLM 5.3 (`zai`) · **Builder backup:** Qwen 3.8 (`qwen`) · **Checker:** Sonnet · **Checker backup:** DeepSeek V4 Pro (`deepseek`)
**Files you may touch:** a new folder per project under `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/creative/`, one governing file each, and `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/ops/artifacts/project-status/registry.json`, adding rows ONLY. **Never** an existing registry row (owner: that row's own lane).
**Do exactly this:**
1. Take the project list measured 2026-09-16 and confirmed with Chantelle: brand guidelines · email signatures · hiring roadmap popups · training graphics · profile portraits · team photo motion · H&S Meadow · website reskin.
2. For each, write its one governing plan file from this skill's template, with a real board card id in its topology section.
3. For each, append a registry row, its `name` written as `CREATIVE: <Project> - <Task>`.
4. For each, file its card on the creative lane with that same name and its real stage.
**DEFINITION OF DONE:** every project in the list has a card on the Creative lane, a plan file, and a registry row, and every card's name starts `CREATIVE: `.
**PROOF:** `node projects/ops/skippy-jobs/lib/board-report.mjs --read --lane creative` → one `ac-creative-` line per project, each name beginning `CREATIVE: ` · **FAILS IF:** any project in the list has no card, or any card's name lacks the prefix, or a plan file's topology section has no real card id.
**If the check fails:** the builder fixes and re-checks the named failure until it passes.
**Checker's job:** re-run the PROOF yourself, once, and additionally open two of the plan files and confirm each card id matches a real card returned by the read. PASS closes the step.
### STEP 5 — A creative plan and card is resolvable for a design session
**FOR NICK:** nothing he notices directly — this is what lets the machinery tell, mechanically, whether a piece of design work is on the books. · **Tier:** POLISH
**Start when:** STEP 3 closed (the harness exists and is red) and STEP 4 closed (a real creative plan with a real card id exists).
**Builder:** DeepSeek V4 Pro (`deepseek`) · **Builder backup:** Qwen 3.8 (`qwen`) · **Checker:** Sonnet · **Checker backup:** GLM 5.3 (`zai`)
**Files you may touch:** `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/ops/skippy-jobs/lib/planned-project-predicate.mjs`. **Never** `projects/ops/skippy-jobs/lib/handback-contract.mjs` (owner: the ZION-17 gate lane) — this step only widens what the predicate can RESOLVE; it changes no gate's behaviour.
**Do exactly this:**
1. Widen the predicate so a creative project's plan resolves, keeping the existing `PLAN-*.md` rule intact and additive — today's filename test rejects a bare `PLAN.md`, which is the name creative plans use.
2. Change nothing about the card-id extraction, the placeholder rejection, or the same-project-tree test.
3. Run the STEP 3 harness until it is green.
**DEFINITION OF DONE:** the predicate resolves a creative plan as PLANNED, still rejects a placeholder, and every pre-existing plan shape resolves unchanged.
**PROOF:** `node projects/ops/skippy-jobs/_test-creative-plan-predicate.mjs` → all assertions pass, including the unchanged-behaviour assertion · **FAILS IF:** any assertion fails, or the pre-existing `PLAN-ZION-*.md` fixture's result changes.
**If the check fails:** the builder fixes and re-checks the named failure until it passes.
**Checker's job:** re-run the PROOF yourself, once, and confirm from STEP 3's recorded red run that this harness genuinely failed before this step. PASS closes the step.
### STEP 6 — Design output with no plan and no card is refused
**FOR NICK:** design work can no longer happen off the books — an agent that tries to generate an asset with no project behind it is stopped and told exactly what to do. · **Tier:** FRONT
**Start when:** STEP 5 closed — the predicate harness is green.
**Builder:** DeepSeek V4 Pro (`deepseek`) · **Builder backup:** Qwen 3.8 (`qwen`) · **Checker:** Sonnet · **Checker backup:** GLM 5.3 (`zai`)
**Files you may touch:** a new `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/ops/skippy-jobs/lib/check-creative-work-gate.mjs`, and `/Users/chantellelamoreaux/Documents/Claude 2.0/.claude/settings.json`, its `PreToolUse` array ONLY. **Never** another hook's entry in that array (owner: that hook's own lane).
**Do exactly this:**
1. Write the hook for `Write|Edit|MultiEdit`. It fires ONLY when the write target is a design asset — an image, PDF, video, font, archive or design-source file on a creative asset path — and the session has no creative plan resolvable by STEP 5's predicate.
2. On a refusal, exit 2 and print: what was refused, that a creative project needs a plan and a card, and the literal board-tool command that fixes it.
3. Fail OPEN on any internal error, and log it — the same reasoning the existing plan-check gate states for itself: a parser bug here must never wedge editing.
4. Add the hook to the settings file's `PreToolUse` array, matching the existing hook-runner shape exactly.
5. Run the STEP 3 gate harness until all four of its assertions are green.
**DEFINITION OF DONE:** a design-asset write with no creative plan and no card is refused by name with the fixing command printed, and every other write is unaffected.
**PROOF:** `node projects/ops/skippy-jobs/_test-creative-work-gate.mjs` → all four assertions pass · **FAILS IF:** any assertion fails, or the refusal message does not contain the literal `--lane creative`, or a non-design write is blocked.
**If the check fails:** the builder fixes and re-checks the named failure until it passes.
**Checker's job:** re-run the PROOF yourself, once, and additionally read the settings file back and confirm the new entry is genuinely wired. PASS closes the step.
### STEP 7 — Every finished asset is on the shared drive
**FOR NICK:** if Chantelle's Mac dies or she hits a session limit, she opens the same files on your machine, on another account, and carries on — and her Mac gets about a gigabyte back. · **Tier:** FRONT
**Start when:** STEP 3 closed — the asset verifier exists.
**Builder:** GLM 5.3 (`zai`) · **Builder backup:** Qwen 3.8 (`qwen`) · **Checker:** Sonnet · **Checker backup:** DeepSeek V4 Pro (`deepseek`)
**Files you may touch:** the `Creative Projects/` folder on the shared drive, and a new `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/creative/ASSETS.md`. **Never** delete anything from the Mac — removal is a separate, approved act, per §1 ANTI-SCOPE.
**Do exactly this:**
1. Create one folder per STEP 4 project under `Creative Projects/` on the shared drive.
2. COPY each project's files there. Copy only; delete nothing.
3. Wait until the Drive client reports every file uploaded, then verify each file's size and count against the local original.
4. Write the pointer file — one line per project naming its shared-drive folder. No bytes in the repository.
**DEFINITION OF DONE:** every STEP 4 project's files exist on the shared drive with matching file count and byte size, and the repository holds a pointer rather than the bytes.
**PROOF:** `node projects/creative/_verify-assets-on-drive.mjs` → every project reports `MATCH` with its file count and size · **FAILS IF:** any project reports a count or size mismatch, or a project named in the pointer file has no shared-drive folder, or any asset byte is committed to git.
**If the check fails:** the builder fixes and re-checks the named failure until it passes. A Drive upload still in flight is not a failure — wait and re-run; it is only a failure once uploading has stopped and the counts still differ.
**Checker's job:** re-run the PROOF yourself, once, and additionally confirm from a genuinely different account or machine that one named file opens. PASS closes the step.
### STEP 8 — Neeko's sweep reads the creative projects too
**FOR NICK:** the same nightly assistant that checks your build projects have not drifted now checks the design ones as well, so a creative card that stops matching its plan gets caught without anyone looking. · **Tier:** FRONT
**Start when:** STEP 4 closed — creative rows exist in the project status registry.
**Builder:** Qwen 3.8 (`qwen`) · **Builder backup:** DeepSeek V4 Pro (`deepseek`) · **Checker:** Sonnet · **Checker backup:** GLM 5.3 (`zai`)
**Files you may touch:** `/Users/chantellelamoreaux/Documents/Claude 2.0/projects/ops/skippy-jobs/jobs/neeko-project-doc-sweep.mjs`, its discovery function ONLY. **Never** `projects/ops/skippy-jobs/lib/neeko-review-project-docs.mjs` or `projects/ops/skippy-jobs/lib/project-doc.mjs` (owner: the Neeko lane — the two checks are already built and tested and are not changed here).
**Do exactly this:**
1. Record the current run's findings count for the non-creative projects, so the unchanged-behaviour assertion has a baseline.
2. Widen the discovery function so it reads the project status registry IN ADDITION to the legacy `assistants-replan` directory, de-duplicating by resolved path.
3. Change neither of the two existing checks, nor the thresholds, nor the findings-state format.
4. Re-run the sweep.
**DEFINITION OF DONE:** the sweep's checked set includes every creative project registered in STEP 4, and its existing findings for non-creative projects are unchanged.
**PROOF:** `node projects/ops/skippy-jobs/jobs/neeko-project-doc-sweep.mjs` → a swept count that includes the creative projects, and a non-creative findings count identical to the baseline recorded in step 1 · **FAILS IF:** the creative projects are absent from the checked set, or a non-creative project's finding appears or disappears.
**If the check fails:** the builder fixes and re-checks the named failure until it passes.
**Checker's job:** re-run the PROOF yourself, once, and compare the non-creative findings against the recorded baseline. PASS closes the step.
**Handoff:** the moment this step closes, post one dated line into `projects/ops/zion/CHANGES-ZION-7-scheduled-tasks.md`: `STEP 8 closed 2026-09-16 — the Neeko project-doc sweep now discovers from the project status registry, not only assistants-replan.`
**Step-writing rules:** every step names the literal command and the literal expected output · as many steps as the North Star needs, no more · red-first for any fix step · builds and per-step checks on the cheap tier by name; the overseer never builds; the plan is written and the FINISH LINE signed off on Anthropic or OpenAI.
## 4 · Regret Check (the registry failures this build is actually exposed to)
| Failure mode (registry entry) | The measure in THIS plan that prevents it | Where it lives (section / artifact / gate) |
|---|---|---|
| A second system was built because the first was invisible | The ownership check opened the Hub and found the `creative` lane already live; the plan extends it, and a second board is named in the anti-scope | §0 receipts · §1a row 4 · §1 ANTI-SCOPE |
| Output was delivered somewhere the intended reader never looks | The SURFACE row names the board and the two people who open it; U1 and U7 assert the board is actually reachable from the Tasks screen and the rail | §1a row 1 · §2 U1, U7 |
| A "growing" archive had actually frozen | The asset verifier re-runs on demand and compares live counts and sizes, rather than trusting a one-time copy | STEP 7 PROOF |
| A pipeline broke silently and looked identical to a working one | STEP 8 requires the non-creative findings to be provably unchanged against a recorded baseline, so a sweep that silently stopped checking is a FAIL, not a pass | STEP 8 steps 1 and 4 |
| Files were archived but their citations kept pointing at them | STEP 7 copies only and deletes nothing; the repository keeps a pointer file naming every shared-drive folder | STEP 7 steps 2 and 4 |
| A critical boundary was config-editable and could be silently widened | `creative` is added to a frozen code constant, never an environment variable or config file, and the assistants roster is explicitly fenced so the lane can never become a legal assignee | STEP 1 file fence |
| Session rules never reached the subagents doing the work | Every step names its builder and checker by model and carries its own file fence and proof, so no step depends on inherited context | every STEP block |
| **Novel — a gate that wedges all editing** | STEP 6's hook fails OPEN on any internal error and is proven red-first on four cases including the error case, mirroring the existing plan-check gate's own stated reasoning | STEP 6 steps 3 and 5 · STEP 3 |
| **Novel — a builder marking its own test green** | The three harnesses are written by STEP 3, before any of the code they test exists, and proven to fail first | STEP 3 |
| **Novel — a catch-up sync swallowing a gigabyte of untracked assets into git** | The heavy asset paths were excluded from git before any sync ran, and STEP 7's proof fails if a single asset byte is committed | STEP 7 FAILS IF |
## 5 · Topology and roles
- **OVERSEER-AUTHORITY:** none named. **The four approval classes (money leaving · credential rotation · irreversible destruction · a message sent as Nick) and the floor (logins · credentials, tokens and keys · government IDs · card, bank and routing numbers) never move on the overseer's word.**
- Thread layout: one overseer thread, this one; builders and checkers as cheap dispatches, one per step.
- Overseer: Fable · Workers: GLM 5.3 (`zai`), DeepSeek V4 Pro (`deepseek`), Qwen 3.8 (`qwen`), with Sonnet as checker · Cap: 8 per session
- State files location: this file. §8 below is its state, questions and dated deltas — there is no second file, per Nick's 2026-08-26 ruling.
- **Board card id:** `none yet` — STEP 1 files it as `creative-projects-the-board-the-gate-and-the-shared-drive`.
- **Artefact consumers:** the Creative cards → Chantelle and Nick on the Hub · the creative plan files → STEP 5's predicate and Neeko's sweep · the pointer file → the asset verifier and any agent looking for a finished asset · STEP 6's refusal → the agent that tried to write the asset.
- **Write-contention (parallel lanes in a shared checkout):** STEP 1 owns the board tool; STEP 2 owns RULE 24; STEP 3 owns the four new harnesses; STEP 4 owns the registry rows and the new project folders; STEP 5 owns the predicate; STEP 6 owns the new gate and the settings hook array; STEP 7 owns the shared drive and the pointer; STEP 8 owns the sweep's discovery function. No two steps write one file. The shared checkout was proven writable and brought to `origin/main` on 2026-09-16 before any lane opened.
**Per-stage topology — counts DECLARED at plan time:**
| Stage | Overseer | Sub-overseers | Workers |
|---|---|---|---|
| 1 | 1 | 0 | 3 |
| 2 | 1 | 0 | 3 |
| 3 | 1 | 0 | 2 |
**The walk-away contract — a stranger resumes the drive from files alone:**
- **STATE FILE:** this file, §8
- **HEARTBEAT ROW:** `creative-projects-drive` in `projects/personal/skippy-app/ala-state/work-threads.json`
- **MORNING-REPORT LINE:** `Creative Projects — <n> of 8 steps closed` in `projects/ops/walkaway/REPORT.md`
## 6 · Evals — what "working" means, decided now
| Capability | Check (exact command or procedure) | Pass looks like |
|---|---|---|
| 1 · The lane accepts an agent-filed card | File a probe card named `CREATIVE: Test - Filing probe` on the creative lane, then `node projects/ops/skippy-jobs/lib/board-report.mjs --read --lane creative` | The card is returned with an `ac-creative-` id; the probe is then moved to Done and never left open |
| 2 · A badly-named card is refused | File a card named `Brand guidelines`, with no `CREATIVE:` prefix | Refused at the door, with the real allowed shape named in the error |
| 3 · Design output with no project is refused | `node projects/ops/skippy-jobs/_test-creative-work-gate.mjs` | The refusal fires, names the missing plan and card, and prints the command that fixes it |
| 4 · Every current design project is carded | `node projects/ops/skippy-jobs/lib/board-report.mjs --read --lane creative` | One `ac-creative-` row per project in the STEP 4 list, each named `CREATIVE: ` |
| 5 · Neeko sweeps the creative board | `node projects/ops/skippy-jobs/jobs/neeko-project-doc-sweep.mjs` | The checked set includes the creative projects; non-creative findings unchanged |
| 6 · The assets survive the machine | `node projects/creative/_verify-assets-on-drive.mjs`, then open one named file from a different account | Every project reports `MATCH`; the file opens |
## 7 · Assumptions and dated deltas
**Assumptions this drive runs on:**
- The Creative board is the Hub's existing `creative` lane extended, not a newly created board. Settled by opening the Hub's task API source on 2026-09-16 and finding the lane already live with the AI Builds stage vocabulary.
- The asset home is the `Heroes and Sidekicks Claude Infra` shared drive. Nick delegated the choice to measurement on 2026-09-16 and named his own criterion — easiest and fastest retrieval for working on the files, without downloading everything back onto the Macs. Measured the same day: the drive is mounted in streaming mode, holding nothing on local disk, and is a shared drive rather than one tied to either account.
- A card may cover a single asset or a series of assets. Nick's words on 2026-09-16 allow both, so the project decides per case.
**Open questions:** none. Both V1 variables were settled by Nick on 2026-09-16 and are recorded with his words in §1a.
**Dated contract and scope deltas:**
**2026-09-16 — Nick widened the scope, in his own words.** Four additions, each changing a contract frozen earlier the same day:
1. *"i dont ever want her to have to find files in finder she nees to tell an agent which projec tot bring up and there is never any doubt about which ones shes talking about"*. **This retires the Finder route.** §2 U8 said she opens the project's folder in Finder by double-click; that is now the fallback, not the surface. The surface is an agent that takes a spoken project name and brings that project up. A project name must therefore resolve to exactly one project — the registry row's name is that resolver, and no two creative projects may carry a name a person could confuse.
2. *"no other versions no other sources no stale stuff no orphans or extra files that hold part of her creation or other variations or newer piece it all ilves in one place and never anything else"*. **ONE copy per thing is now a finish-line item, not a tidiness preference.** Measured 2026-09-16 before any move: 949 files, 1,263 MB, of which **405 MB across 236 duplicate sets is redundant** — `hs-meadow` alone carries two near-identical project trees (`Premium scrollcraft website design` and `Two premium scrollcraft website designs`), each holding the same images in both `uploads/` and `assets/`, so every studio headshot exists five times; the brand-guidelines PDF exists twice, 38.6 MB wasted. De-duplication is now part of the migration, not a later tidy-up.
3. *"drive is fine as long as its arcitecture is clean and tidy and we have a self cleaning feature meaning old version histroy and cony conflict redundency confusion etc cannot be kept she has one version and one version only unless specifically request and we keep the one she wants"*. **The shared drive must actively reap**, not merely store: conflict copies and superseded revisions are removed on a schedule. Drive's own defaults keep both, which is the thing being refused.
4. *"make sure nothing ever lets her mac get cut off again ever ever ever"*. Added as FINISH LINE item 9. The machine-health half of this belongs to the existing continuity project and is recorded there, not duplicated here.
**A variant is kept only on her word.** Files like `success-manager-v2/v3/v4.jpg` and `hill-*-v2.png` are real alternatives, not accidents. Which one survives is Chantelle's or Nick's call, asked once per set, never guessed — deleting the wrong one is irreversible destruction and is one of the four acts.
## 🎬 PICK UP HERE
One-paragraph resume point for a cold agent. The detail is in §8 below; this heading exists so Neeko's nightly sweep extracts a small current-state block instead of falling back to the whole file.
**Where it stands, 2026-09-16, COMPLETE:** the Creative board carries ten cards, one per design project plus this build, every one named to RULE 24, and the board now refuses a card named any other way. All nine projects are on the shared drive — 570 files, 860MB, after collapsing 402MB of exact duplicates — confirmed against Google's own record. On Nick's approval the local copies were reclaimed: 912 files, 1,262MB, every one cleared by content hash first; a separate session verified NOTHING LOST on six criteria. Chantelle names a project and gets it, or a refusal naming the candidates. The drive self-cleans daily. Her Mac runs a sync-health watchdog every fifteen minutes, and both jobs now install on any Mac. Neeko sweeps 47 projects including this one. Free disk went from 17GB to 30GB.
**Kept on this Mac, and now no longer only here:** `projects/business/website-reskin/site` is a nested git repository with no remote and uncommitted changes — it was excluded from the reclaim because deleting it would have destroyed it permanently. An adversarial pass on 2026-09-17 correctly flagged it as a standing 'only copy is on a Mac' violation, so it was copied WITH ITS `.git` HISTORY to `Website Reskin/_local-only-baseline-repo/` on the shared drive, and proved recoverable by cloning it back from the drive and reading its log (commit 44aa9bd, "baseline: untouched mirror of heroesandsidekicks.io"). That project's tracked plans and reports stayed local and tracked, as they should be.
## 8 · State — the resume point
**PICK UP HERE (2026-09-17): DONE, and independently verified three ways.** The finish line passed 9 of 9 under a cold session; a second session walked it as Chantelle would and passed 6 of 6; a third attacked it adversarially and its findings are all closed or named below. There is no next step waiting.
**Nick's three answers, acted on 2026-09-16/17:**
- *"1 do it"* — the local copies are reclaimed: 912 files, 1,262 MB, every one cleared by content hash against the drive first. Independently verified NOTHING LOST on six criteria.
- *"2 save them all in same place"* — all three `success-manager` variants are kept together in `HS Meadow/hs-meadow/assets/`, verified as real JPEGs. The variant question is CLOSED; nothing is waiting on Chantelle.
- *"3 they can with my approval do it"* — the two test cards are removed. The board is exactly ten cards, every one named to RULE 24.
**What the adversarial pass found, and where each landed:**
- The orphan repo at `website-reskin/site` had NO REMOTE and existed only on this Mac. **Closed**: copied to `Website Reskin/_local-only-baseline-repo/` on the shared drive with its `.git` history, and proved recoverable by cloning it back from the drive and reading its log.
- The watchdog's CLI silently ignored `--repo`, answering confidently about the wrong repository. **Closed**: the flag is honoured, proven against a throwaway repo carrying an abandoned lock.
- "One copy of each thing" did not state its scope. **Closed**: FINISH LINE item 7 now says it is per project, on purpose, with the measured cost (8 groups, 11 files).
- This file carried two contradictory status blocks. **Closed**: this block is the only one.
- Google Drive's own server-side revision history is not actively purged, only left to Google's 30-day / 100-revision expiry. **OPEN, and the only thing not done.** Building it needs Drive API rights this machine's service account was not proven to hold — a probe timed out rather than returning a refusal, so whether it can reach the shared drive is UNKNOWN, not no. It is Nick's call whether that is worth a separate build.
## If you get stuck (all steps)
Before writing "blocked": (1) re-read the step's START WHEN line — most "stuck" is a misread gate, (2) try a concrete workaround, (3) write one line to the overseer naming the ONE missing artefact. Then keep working every other step whose inputs exist. Never idle on a blocker; never end a turn waiting on a background result.
## Your loop
Every pass: every step whose START WHEN inputs exist and which is not yet CLOSED is running, up to the cap → each builder runs its own PROOF, hands to its checker → PASS closes it, FAIL loops it → repeat until the FINISH LINE is proven.
## SUMMARY — a few plain-English lines, read by the status generator
Chantelle's design work has been running without any of the structure every other kind of work here gets — no plan, no card, no nightly check, and the finished files sitting on one Mac. The Hub already has a Creative board built and waiting, but nothing could be filed on it. This puts that right: the board starts accepting work, every design project she has running becomes a card with a plan behind it, an agent is stopped if it tries to make design work without one, the assistant that checks the build projects each night starts checking the design ones too, and the finished files move to the shared drive so she can pick up on any machine or account. Nothing she has made is deleted or changed.
## STEPS
```
1. [Plan] The Creative lane accepts a card from an agent — 100%
DEFINITION OF DONE: the Creative lane returns at least one real card whose id begins ac-creative-
PROOF: `node projects/ops/skippy-jobs/lib/board-report.mjs --read --lane creative`
VERIFIED: 2026-09-16 (100%, Sonnet, separate session, against the COMMITTED tree — the allowlist reads ["ai-builds","zion","creative"], the board returns the card, the working tree matches HEAD, HEAD and origin/main are the same commit, the assistants roster did NOT gain creative. Sensitivity: HEAD~1 of the same file lacks creative, so the check distinguishes before from after.)
2. [Plan] CREATIVE is a real category code in RULE 24 — 100%
DEFINITION OF DONE: RULE 24's category table contains CREATIVE and the rule is stated exactly once
PROOF: `command grep -o "HUB, FA[^)]*" projects/ops/MACHINE-RULES.md`
VERIFIED: 2026-09-16 (100%, Sonnet, separate session, against the committed tree; no other live file carries a category list that now disagrees.)
3. [Tests] Proof harnesses exist and are red before their code — 100%
DEFINITION OF DONE: each capability's harness fails against the unbuilt code before it passes
PROOF: each harness run before its fix — recorded per step below
VERIFIED: 2026-09-16 (100%, every one of the six builds below was proven RED first; three real defects were caught this way and are named in their own lines.)
4. [Framing] Every design project is a card on the board — 100%
DEFINITION OF DONE: every project has a card named CREATIVE: Project - Task, owned and dated
PROOF: `node projects/ops/skippy-jobs/lib/board-report.mjs --read --lane creative`
VERIFIED: 2026-09-16 (100%, nine project cards plus this build's own, each named to RULE 24, owned by Chantelle. The board refused them until an owner and a due date were supplied, which is its own entry rule working.)
5. [Elements] The board REFUSES a badly-named card — 100%
DEFINITION OF DONE: a card not named CREATIVE: Project - Task is refused and nothing is created
PROOF: `node projects/ops/skippy-jobs/lib/board-report.mjs --open --lane creative --title "Just some design thing" ...`
VERIFIED: 2026-09-16 (100%. FOUND FAILING FIRST: two deliberately bad cards were ACCEPTED, because RULE 24's own door covers the build group and the creative lane was unenforced. Now refused at the agent's door; the lane stays at 12 rather than 13, and ai-builds still reads its 7 cards untouched. 🔴 Two test cards remain in Backlog for a human to bin — an agent cannot, because the board correctly refuses to let an agent mark anything Done.)
6. [Elements] Design output with no project is refused — 100%
DEFINITION OF DONE: a design asset written outside a registered creative project is refused by name
PROOF: `node projects/ops/skippy-jobs/_test-creative-work-gate.mjs`
VERIFIED: 2026-09-16 (100%, 31 checks, plus end-to-end through the real hook interface: orphan blocked exit 2, project-internal allowed, another lane's evidence screenshot allowed, source files allowed, kill switch honoured. Scoped to output/ only and fails OPEN, because a gate that judged every image write would break every lane that writes screenshots.)
7. [Details] Every finished asset is on the shared drive — 100%
DEFINITION OF DONE: every project's files are on the drive, and confirmed on Google rather than only locally
PROOF: `node projects/creative/verify-on-google.mjs`
VERIFIED: 2026-09-16 (100%, 570 files across 9 projects, after collapsing 402MB of byte-identical duplicates. Google's own record: 0 queued, 0 local-only, 0 placeholder ids, 0 missing, 0 size disagreements. A defect in the verifier itself was caught first — it matched files by name alone and so collided with unrelated files of the same name elsewhere in the Drive, reporting sixteen false disagreements; now matched on name AND exact byte size. NOTHING LOCAL DELETED — that is filed as one of the four acts and waits on Nick.)
8. [Details] She names a project and gets exactly one, or a refusal — 100%
DEFINITION OF DONE: her words resolve to one project, or refuse and name the candidates; never a guess
PROOF: `node projects/creative/_test-bring-up.mjs`
VERIFIED: 2026-09-16 (100%, 25 checks including that every advertised alias resolves to its own project and no two projects claim a confusable name. Live: "the meadow site" resolves; "the site" refuses and names both the Meadow site and the Website Reskin. One real failure caught: ordinary phrasing did not resolve because "can" and "you" were not treated as filler.)
9. [Details] The drive self-cleans and holds one copy of each thing — 100%
DEFINITION OF DONE: conflict copies and duplicates are reaped on a schedule; unique content cannot be deleted
PROOF: `node projects/creative/_test-reap-drive.mjs` and `node projects/creative/reap-drive.mjs`
VERIFIED: 2026-09-16 (100%, 28 checks. The safety property is structural: a file is removable only when a byte-identical copy provably survives IN THE SAME PROJECT. A file NAMED like a conflict copy whose content is unique is reported, never removed — asserted directly. A real defect was caught before anything was applied: the first version grouped content across the whole drive, so all ten candidate removals were CROSS-project and would have deleted a shared logo or font from one project because another had it. Scheduled daily; live run reports the drive clean.)
10. [Proof] Neeko's sweep reads the creative projects too — 100%
DEFINITION OF DONE: the sweep discovers the creative project, and every project it found before is still found
PROOF: `node projects/ops/skippy-jobs/jobs/neeko-project-doc-sweep.mjs`
VERIFIED: 2026-09-16 (100%, discovery went from 12 to 47 with all 12 originals kept, no duplicates, every path real. Proven end to end rather than asserted: on its first run covering this project Neeko raised a genuine finding against THIS plan file — no pick-up marker, 57.6KB block — the marker was added and the finding cleared on the next run.)
11. [Proof] Her Mac cannot fall silently out of sync — 100%
DEFINITION OF DONE: the causes are detected, healed where possible, surfaced where not, without depending on git
PROOF: `node projects/ops/continuity/_test-sync-health-check.mjs`
VERIFIED: 2026-09-16 (100%, 27 red-first checks, independently verified on six criteria by a separate Sonnet session including a sabotage test that went green → red → green with the working tree left clean. Installed as a launchd job every 15 minutes and at login. A real bug was caught by RUNNING it rather than trusting the tests: the entry guard compared a path to a URL and this workspace's path contains a space, so main() never ran and the command exited 0 having checked nothing.)
12. [Proof] The outage itself is repaired and the disk has headroom — 100%
DEFINITION OF DONE: both repositories current, cleanup able to run again, free disk above the watchdog floor
PROOF: `git status -sb` · `df -h /System/Volumes/Data`
VERIFIED: 2026-09-16 (100%. Root cause: a zero-byte .git/index.lock abandoned 2026-09-11 failed every sync silently — her checkout was 5,529 commits behind and the Hub 1,812. Both current. Automatic cleanup had also been refusing to run since 2026-09-15 behind a stale gc.log. 8GB reclaimed from two leftover worktrees after pushing their uncommitted work to the cloud first; free disk went from 17GB to 29GB and cleanup completes again.)
```
## POSTMORTEM
Written 2026-09-16, with the finish line independently verified 9 of 9 by a session that built none of it.
**What failed, and it is the whole lesson: every single defect here was found by RUNNING the thing, never by reading it.** Six real faults, each of which would have shipped:
1. **The board silently accepted badly-named cards.** The finish line said it refuses them. It did not — RULE 24's own door covers the build group, and the creative lane was unenforced. Found by filing two deliberately bad cards, which were both accepted. Nothing in the code looked wrong.
2. **The drive reaper would have deleted shared assets across projects.** All ten of its candidate removals were cross-project: it would have taken a logo or font out of one project because another project had the same bytes, quietly breaking the project Chantelle opens. Found by inspecting the report before applying it, not by testing the tool.
3. **The Google verifier matched files by name alone**, so an `index.html` in one project matched an unrelated `index.html` elsewhere in the Drive and reported sixteen false size disagreements. The tool was wrong, not the upload.
4. **The variant detector treated any trailing number as a version**, flagging ten different people's headshots as copies of one and two font weights as redundant. It would have sent Chantelle twelve pointless questions instead of the one real choice.
5. **The watchdog's entry guard never matched**, because this workspace's path contains a space and `import.meta.url` percent-encodes it. The command exited 0 having checked nothing — a health check that silently checked nothing is worse than none. Its 27 unit tests all passed, because they import the functions directly and never exercise that line.
6. **The Drive path hardcoded one person's account**, which broke the single requirement the project exists for: Nick could not have opened Chantelle's work on his own Mac.
**What was confused.** Two edits were applied, looked correct, and were silently reverted by the background auto-pull before they were committed — the same cause the registry had already recorded once for another lane. In a shared checkout with a timer-driven pull, an edit and its commit must be one command. That is now written in the plan rather than relearned a third time.
**What to keep.**
- **A check that has never been observed saying no is not a check.** Every harness here was proven red before its code existed, and the independent verifier was asked to plant a decoy that made the Google check fail, then remove it — without that control, its pass proved nothing.
- **Write the negative cases as hard as the positive ones.** The gate's value is not that it blocks orphans; it is that it leaves every other lane alone. A gate that fired on other lanes' screenshots would have been switched off within the hour and protected nothing.
- **Make safety structural rather than promised.** The reaper cannot destroy unique content because a file is removable only when an identical copy provably survives — not because it is careful.
- **A subagent's finding is a claim too.** The verifier reported that the Google check exits 0 while failing; re-measured directly, it exits 1. It was an artifact of reading an exit code after a pipe.