Skip to content

Commit c1cc4c1

Browse files
committed
Merge remote-tracking branch 'origin/main' into claude/smoke-tests-performance-e19kk1
# Conflicts: # dashboard.html
2 parents 06500a9 + 311cf26 commit c1cc4c1

10 files changed

Lines changed: 704 additions & 4 deletions

AGENTS.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,10 @@ For the full workflow narrative, conventions, and registry schemas, read
6868
coupled to the registry. Claude and Codex discovery is installed by
6969
PyAutoBrain; they source `scripts/prompt_sync.sh` for commit/push.
7070
- **Scripts**`scripts/status.sh` (inventory), `scripts/prompt_sync.sh`
71-
(commit/push helpers).
71+
(commit/push helpers), `scripts/lifecycle.py` (state moves + drift checks;
72+
`lifecycle.py dates [--write]` reports/backfills the date every registry
73+
entry and issued prompt carries — see [REFERENCE.md](REFERENCE.md) "Task
74+
dates").
7275

7376
## Hard rules
7477

REFERENCE.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ Free-form markdown. Strong conventions:
300300
Autonomy: supervised # safe | supervised | human-required
301301
Priority: normal # low | normal | high
302302
Status: draft
303+
Issued: 2026-08-19 # optional; set when the prompt advances to active/
303304
Blocked-by: PyAutoFit#1436 # optional; see "Declaring a gate" below
304305
```
305306

@@ -354,6 +355,7 @@ Each task is an H2 section:
354355
```markdown
355356
## <task-name-kebab-case>
356357
- issue: https://github.com/<owner>/<repo>/issues/<n>
358+
- issued: YYYY-MM-DD # the day the task was issued
357359
- session: claude --resume <session-id> # optional
358360
- status: <library-dev | workspace-dev | ready-to-ship | awaiting-input | …>
359361
- location: <cli-in-progress | ready-for-mobile | …> # optional, used by /handoff
@@ -375,6 +377,54 @@ Each task is an H2 section:
375377
Free-form summary of progress and next steps.
376378
```
377379

380+
### Task dates
381+
382+
The Mind used to date only what it **finished** — every completion record
383+
carries `completed:` — so it could answer "what shipped in July?" but not "what
384+
did we start?". Every task now carries a machine-readable date from the moment
385+
it leaves the backlog:
386+
387+
| Where | Field | The event it dates |
388+
|-------|-------|--------------------|
389+
| `active.md` | `- issued: YYYY-MM-DD` | the day the task got its GitHub issue |
390+
| `planned.md` | `- filed: YYYY-MM-DD` | the day it was scoped |
391+
| `parked.md` | `- parked: YYYY-MM-DD` | the day it stopped |
392+
| `active/<name>.md` | `Issued: YYYY-MM-DD` | the prompt's own copy, in its light header |
393+
| `complete/<YYYY>/<MM>/<slug>.md` | `- completed: YYYY-MM-DD` | unchanged — the ledger already did this |
394+
395+
The **key names the event**, so a merged feed can say what each date means
396+
rather than showing a bare timestamp. Reading is tolerant: `registered:`,
397+
`started:`, `planned:`, `found:` and `shipped:` are all read as dates too (the
398+
registries are hand-edited by many sessions, and an entry that says when it
399+
happened should count however it said it) — the table is what a *writer*
400+
should use. The most specific event wins when an entry carries several, so a
401+
task that was filed and later issued dates from its issue.
402+
403+
A date inside another field's prose (`- issue: …/1501 (issued 2026-08-19)`) is
404+
deliberately **not** read — that is the un-parseable habit this convention
405+
replaces. The prompt's `Issued:` header is its own copy of the registry date,
406+
so an issued prompt stays dated even if its registry row goes missing.
407+
408+
`scripts/lifecycle.py dates` reports every entry and issued prompt carrying no
409+
date; `dates --write` backfills them retroactively from the evidence the repo
410+
already holds, annotating each inferred date with where it came from:
411+
412+
```
413+
Issued: 2026-08-18 (backfilled from parked.md `parked:`)
414+
```
415+
416+
The sources, in order: the commit that introduced the entry or moved the prompt
417+
into `active/`; the dated registry entry that claims the prompt; a date the
418+
entry already stated in its own prose. Nothing is guessed — an entry with no
419+
evidence is reported for a human to date by hand. A **shallow** clone (CI, a
420+
cloud session) cannot see past its boundary commit, so git dates at or before
421+
it are discarded rather than stamping every task with the day the clone was
422+
made.
423+
424+
The dashboard's [Recent](dashboard.md#recent) table is the payoff: the 20
425+
newest events on the work in hand — issued, parked, filed — in one place.
426+
Shipped work stays out of it; `complete/index.md` is where the ledger is read.
427+
378428
### Completion record (`complete/<YYYY>/<MM>/<slug>.md`) schema
379429

380430
The dated records are the completion ledger (`complete/AGENTS.md`; the

active.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## transformed-message-factor-gradient-unpack
44
- issue: https://github.com/PyAutoLabs/PyAutoFit/issues/1501 (issued 2026-08-19)
5+
- issued: 2026-08-19
56
- prompt: active/16_transformed_message_factor_gradient_unpack.md
67
- status: HOLD — do not start dev. Fix-or-delete hangs off the PyAutoFit#1498 logpdf-contract
78
decision (parked #1500 design bundle); dead code (zero production callers), crashes on first

active/12_single_source_density_refactor.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Difficulty: too-large
66
Autonomy: supervised
77
Priority: normal
88
Status: formalised
9+
Issued: 2026-08-18 (backfilled from parked.md `parked:`)
910

1011
Found during the priors/messages audit (see
1112
`PyAutoPrompt/autofit/priors_and_messages_math_audit.md`, finding C1).

active/13_collapse_prior_and_message.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Difficulty: too-large
66
Autonomy: supervised
77
Priority: normal
88
Status: formalised
9+
Issued: 2026-08-18 (backfilled from parked.md `parked:`)
910

1011
Found during the priors/messages audit (see
1112
`PyAutoPrompt/autofit/priors_and_messages_math_audit.md`, finding C4).

active/16_transformed_message_factor_gradient_unpack.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Autonomy: supervised
77
Priority: normal
88
Status: issued 2026-08-19 as PyAutoFit#1501 — awaiting external verification
99
(fix-or-delete hangs off the #1498 contract decision); do not start dev
10+
Issued: 2026-08-19 (backfilled from active.md `registered:`)
1011

1112
Same shape as census finding A1 (#1331-01): a code path that has never run
1213
end-to-end, dead on arrival.

active/pyautoreduce_slacs1430_acs_comparison.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Difficulty: medium
99
Autonomy: safe
1010
Priority: normal
1111
Status: formalised
12+
Issued: 2026-08-08 (backfilled from parked.md `parked:`)
1213

1314
Validate PyAutoReduce against a trusted legacy reduction: reduce the SLACS lens slacs1430+4105 from archival HST/ACS data using PyAutoReduce, then compare the resulting modeling-ready dataset (data, noise map, PSF) to the long-used collaborator-provided dataset at /mnt/c/Users/Jammy/Science/subhalo/dataset/slacs/slacs1430+4105 (used for many years in subhalo work). Comparison is a science project driven through autolens_assistant: image/noise/PSF residuals plus lens-model parity fits on both datasets.
1415

0 commit comments

Comments
 (0)