../../docs/design/00-meta-spec.md §2.3): exploration proposes,
resolution disposes, synthesis reports — and progress only reports. It
adjudicates nothing, scores nothing, and touches no claim.
The single source of truth is the artifact itself. Every hypothesis, paper,
and thesis artifact carries a small status block in its markdown frontmatter,
versioned in git alongside the thing it describes — the living-document pattern
(RSC Digital Discovery, DOI:10.1039/D3DD00032J). There is deliberately no
separate progress file to drift out of sync. progress reads that frontmatter
and rolls it up; the generated dashboard is a pure projection of it, nothing more.
Grounding: ../../resources/references/thesis-and-progress-tracking.md (Part B),
ADR-0014 (../../decisions/0014-progress-cross-cutting.md), meta-spec §3.6,
lifecycle §5 (../../docs/design/01-lifecycle.md).
When to use
- You want the current state of one artifact or of a whole level (“where is paper X?”, “which hypotheses are still open?”, “is the thesis defensible yet?”).
- You want to see blockers (a refuted load-bearing hypothesis, an uncovered
aim) or staleness (artifacts whose
last-updatedhas gone cold relative to their backend evidence — cross-check with the experiment backend’sis-current, resolved from thebackend:binding indocs/research/papers.md). - You need to regenerate
docs/research/dashboard.mdafter any status frontmatter changed.
defend (the understanding field); progress only reads it.
Verbs
statusis the everyday verb; run it freely, it mutates nothing.dashboardoverwrites the generated file wholesale from current frontmatter. If someone hand-edited the dashboard, those edits are (correctly) lost — status belongs in the artifacts, not the projection. The file carries a<!-- generated by honest-scholar:progress — do not edit -->banner.- The dashboard lists, per artifact: level, id, link, verdict, readiness,
coverage/blockers,
last-updated, and (if present)understanding. It links artifacts along the hypothesis → paper → thesis-aim chain. It shows no totals, no scores, no percentages.
Status frontmatter
The block each artifact owns. Fields are small and orthogonal; absence means “not yet set,” never zero. Verdict and readiness are distinct axes (see below).- A material decision (
verdicton a hypothesis,verdict: publish/no-goon a paper,defensibleon a thesis) is only real whensigned-off-byis set — the named-human requirement of §2.1. Progress reports an unsigned verdict as not yet decided, never as done. evidencepoints at backend run-refs; progress does not read the numbers, only that they exist and (viais-current) whether they are stale.
Where the status block lives
Each level has one authoritative roll-up artifact that carries theverdict /
readiness / sign-off block progress reads; the other staged docs may carry their
own lighter understanding + last-updated (written by defend), which progress
also surfaces but never treats as the verdict source.
Definition of done
Per-level exit criteria — the Stage-Gate framing (gate = exit criteria + decision) the resolve gates already embody, not a burndown %:- hypothesis = resolved — has a
verdict(confirmed / refuted / inconclusive) backed by recorded evidence and a named sign-off. Pending = no verdict. - paper = done — its constituent hypotheses are all resolved and the
paper is submission-ready (a signed
decision).drafting → under-review → publishedare sub-states of done, not extra gates. - thesis = defensible — every aim is covered by ≥1 paper and the kappa
states a coherent through-line / original contribution. Program milestones
(
thesis/milestones.yml) are reported alongside but are not the done criterion.
Roll-up rules
Roll-up is a semantic function of children’s states + the level’s gate criteria — never arithmetic. Surface coverage and blockers; never an average or percentage. Averaging would hide exactly the failures that matter.- hypothesis → paper. “All constituent hypotheses resolved AND the claim is
written.” A single refuted
load-bearing: truehypothesis is a blocker on its paper — it invalidates the claim regardless of how many other hypotheses resolved. Report ascovered: 4/5 resolved; BLOCKED by <id> (load-bearing, refuted), not80%. - paper → thesis. “All aims covered by ≥1 paper AND the kappa states the through-line.” Roll up as uncovered aims + through-line stated? — the exact things an examiner checks. Paper count is never the target (there is no universal N; the binding norm is scope).
- staleness is orthogonal: an artifact whose evidence the backend reports as
not-current (
is-current) is flagged stale regardless of verdict. Progress surfaces it; the human decides whether to re-run.
{covered / total by state} + {explicit blockers} +
{stale?}. No rolled-up number leaves this skill.
Anti-Goodhart
A hard design principle, not a nicety — documented here so it cannot be quietly “improved” into a score later. A self-tracking research tool is especially Goodhart-prone: the same person sets and games the metric.- Surface state, gaps, and staleness — never a productivity score. Show open hypotheses, uncovered aims, overdue milestones, stale evidence, unresolved understanding gaps. Never a single “progress number.”
- Verdict and readiness are distinct axes. A refuted hypothesis reads as done/green, not failed/red — refutation is successful science; conflating it with failure is a modeling error that would punish honest negative results.
- Do NOT count or compute: word counts, paper counts, citation/impact proxies, commit counts, %-complete on unresolved work, or a hypothesis “success rate.”
- Rationale (cited so it stays honest): Goodhart’s law and Campbell’s law (a
measure that becomes a target stops measuring); the DORA (2012) and Leiden
Manifesto (Hicks & Wouters et al. 2015) principle that metrics support, never
replace, qualitative judgment. See
../../resources/references/thesis-and-progress-tracking.md(Part B) and ADR-0014.
Guardrails
Load-bearing constraints, not preferences.- Read-only on state. Progress never writes status frontmatter and never
changes a verdict, decision, or
understandingfield — those are owned by the resolve skills, the human sign-off, anddefend. The only file it writes is the generateddashboard.md. - Respects the firewall (§2.3) and agency (§2.1). It reports; it does not propose, dispose, or adjudicate. It never infers whether a decision should be made — only whether one has been (signed) and what remains uncovered.
- The dashboard is a projection, never a source. If frontmatter and dashboard
disagree, the frontmatter wins and
dashboardregenerates from it. Nothing in the dashboard is ground truth; there is nothing there to sync or to game. - No scores, ever (see Anti-Goodhart). If a future request asks for a percentage, a velocity, a burndown, or a success rate, decline and point here — this is a design invariant, not a missing feature.
Commit attribution
When you commit artifacts produced by this skill, add these git trailers — discovery + provenance (see../../resources/commit-attribution.md):