Skip to content

Migration accounting

Produced by python .tfw/scripts/migrate_board.py --manifest. Every board row and every task directory is accounted for exactly once. Re-runnable: the numbers below are recomputed from the tree, not transcribed.

Reconciliation

    4 board data rows
    2 task directories
  ----------------------------------------
    6 source occurrences  ->    4 logical identities

        2  matched       row and directory both exist
        0  board-only    a row with no directory at all
        2  unresolved    a row whose directory the grammar rejects
        0  unresolved    a rejected directory no row names
        0  directory-only  a directory with no row

Rows in a shape no strict | [ID](path) parser matches: 0. They are reported, not repaired.

Board-only rows

A row with no directory at all. A row whose directory exists but whose directory name the grammar rejects is not here — it is under Unresolved inputs, because calling it a backlog idea asserts something the source never said.

None.

Unresolved inputs

A directory the identifier grammar does not parse — not clock YYYYMMDD-HHMMSS__slug, not legacy PREFIX-N optionally followed by __slug. No state file is written for one, and nothing is asserted about whether work happened there. The grammar is not widened to admit it: an accountable person may rename the directory by hand, which leaves a trace, and a tool that normalized it would not. Same rule as UNDECLARED.

Directory Named by a board row? Status the board carried
tasks/TFW-01_awesome_list_restructure TFW-01 ✅ DONE
tasks/TFW-02_enhanced_validation TFW-02 ✅ DONE

Directory-only entries

None — every directory is named by a row, though not every row names it in a shape a strict parser matches.

Malformed rows

None.

Every board identifier, by name — 4

The requirement is that each one resolves somewhere after the board is gone, and that the list is produced by counting rather than asserted. A previous pass claimed 61 rows were retained while the snapshot held zero; naming them individually is what makes that failure impossible to repeat.

# Identifier Resolves to
1 TFW-01 snapshot + directory whose name the grammar rejects + index (unresolved)
2 TFW-02 snapshot + directory whose name the grammar rejects + index (unresolved)
3 [TFW-3](../../../TFW-3__readme_public_readiness/HL-TFW-3__readme_public_readiness.md) snapshot + task directory + index (unresolved or closed)
4 [TFW-4](../../../TFW-4__framework_cleanup/HL-TFW-4__framework_cleanup.md) snapshot + task directory + status.md → index

Unaccounted: 0. Every identifier the board carried resolves after its removal.

Task state written

Only for non-terminal tasks that have a directory. Every value comes from the board or the directory; unrecorded marks a fact the source never carried.

Task Lifecycle Authority Note
[TFW-4](../../../TFW-4__framework_cleanup/HL-TFW-4__framework_cleanup.md) ONB HL-TFW-4__showcase_reorg.md

Guarantees checked

Guarantee How
Zero renames, zero moves the script has no rename or move call
Zero byte changes to existing artifacts only paths that do not yet exist are opened for writing; an existing target aborts the run
No fact invented absent facts are written as unrecorded; a lifecycle outside the vocabulary becomes UNDECLARED plus the verbatim value
Every row and directory accounted once the reconciliation above sums to the source occurrence count

Migration accounting