Skip to content

I0003 — Implement the model loader and the status derivation engine

Load every canonical file into one normalised model and derive issue and milestone status from recorded facts, in exactly one implementation that every surface calls.

DONE wave 2 · p0 · deep-work profile · runs alone

Part of M000 — Milestone and DAG driven development.

Objective

Load every canonical file into one normalised model and derive issue and milestone status from recorded facts, in exactly one implementation that every surface calls.

Why

Four surfaces need to know what is READY. Four implementations of READY is four answers. One engine is the whole architecture.

Current state

Nothing read the canonical files.

Desired state

lib/project.sh loads the files, lib/project.awk derives the model, and the CLI, the site generator and the GitHub adapter all read that model.

Scope

  • lib/project.sh
  • lib/project.awk

Out of scope

  • Any status field a human can set directly

Dependencies

What waits on this

Acceptance criteria

  • Issue status is derived from started_at, verified_at, completed_at, cancelled, evidence coverage and dependency state
  • Milestone status is derived from its issues and its own evidence
  • The active milestone is derived from order and status, not declared
  • A completed issue whose required evidence is missing derives VERIFY, not DONE

Validation

  • bash test/run.sh 41_project_status

Evidence required

  • status_test

Evidence

coverstypecommandresultat commit
status_testtestbash test/run.sh 41_project_status1 passed, 0 failed2dd5915

Risk

bash 3.2 has no associative arrays; the graph work is done in awk, which does.

Timeline

started
2026-09-04T03:12:45Z
verified
2026-09-04T03:12:46Z
completed
2026-09-04T03:12:47Z

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I0003.yaml. Read it back with majordomus plan show I0003.