RF โ TFW-60 / Phase AB: Honest Migration¶
Date: 2026-08-30 Author: saubakirov Status: ๐ข RF โ Complete Parent HL: HL-TFW-60 TS: TS Phase AB Revision 2: REVIEW findings D1 and D2 corrected; evidence wording for E3 made explicit
1. What Was Done¶
New Files¶
| File | Description |
|---|---|
journal/20260829-165540__transition__d26e.md |
Durable Executor transition from approved onboarding into RF execution |
journal/20260830-103847__transition__6544.md |
Clock-read REVIEW correction event; also records the prior missing execution-to-RF handoff without back-dating |
evidence/parser_and_prose_before_after.txt |
Pre-change cause and post-change HELPDESK_SHAPE classification/prose output |
evidence/runtime_guarantees.txt |
Passing arithmetic plus a deliberately failed invariant naming [TFW-9](../../TFW-9__update_source_mechanism/HL-TFW-9__update_source_mechanism.md) |
evidence/current_id_end_to_end.txt |
Disposable Git-backed ABT task and its rendered index row |
evidence/four_corpora_compatibility.txt |
Identifier-by-identifier comparison at four pinned commits |
evidence/verification_gates.txt |
Configured gates, split test runs, tag refusal, adapter hashes, scope measurement and seven dispositions |
evidence/EV__phase-ab__honest_migration.md |
Acceptance evidence register and verdict |
Modified Files¶
| File | Changes |
|---|---|
.tfw/scripts/gen_index.py |
Added the current grammar, whole-input dispatch, directory collision refusal, truthful malformed reporting, ReaderError key recovery, free-form via validation and retired-key checks |
.tfw/scripts/migrate_board.py |
Replaced prefix extraction with shared whole parsing; added duplicate refusal, exact partitions, computed pre-write guarantees, faithful prose normalization and manifest disclosure |
.tfw/scripts/test_gen_index.py, .tfw/scripts/test_migrate_board.py |
Added current/dirty/legacy, malformed, collision, guarantee, prose, via, ReaderError and retired-key regressions, including the committed HELPDESK_SHAPE fixture |
.tfw/conventions.md, .tfw/glossary.md, .tfw/project_config.yaml |
Made PREFIX_stamp_ABBR the issued grammar, preserved both historical forms, defined collision refusal and declared via free-form |
.tfw/workflows/plan.md, .tfw/workflows/init.md |
Require owner abbreviation approval before creation, one real clock read, exact-path refusal and session naming with the full new ID |
.tfw/workflows/update.md |
Reduced to 852 words; added source/tag pins and recheck, installed-baseline provenance handling, reachable retired-term checks and installed-adapter-only sync |
.tfw/migrations/2.0.0.md |
Named all three grammars, removed the staging claim, made malformed inputs non-actionable and documented split test commands |
.tfw/templates/project_config.yaml, .tfw/templates/HL.md, .tfw/templates/status.md |
Updated issuance examples, added the HL abbreviation field and preserved project-owned scope budgets |
.tfw/compilable_contract.md, docs/scripts/gen_docs.py, docs/scripts/test_gen_docs.py |
Extended artifact, phase, HL and bare-task references across all three grammars with underscore-safe boundaries and exact normalized directory matching |
.claude/commands/tfw-{plan,update,init}.md, .agent/workflows/tfw-{plan,update,init}.md |
Re-synced six approved byte-identical workflow copies |
status.md |
Recorded the phase's RF lifecycle and completion timestamp |
REVIEW REVISE Correction Round¶
| Finding | Correction |
|---|---|
| D1 โ literal guarantee | Deleted the redundant Unaccounted: 0 sentence and the two assertions that enshrined it. The computed Guarantees checked section is now the only guarantee rendering |
| D2 โ false gitignore claim | Deleted both claims that .tfw/.upstream/ and .tfw/.upstream-source/ are gitignored, then re-synced the two approved full copies. update.md remains under its ceiling at 840 words |
2. Key Decisions¶
- One shared dispatcher classifies an entire candidate as
current,clock,legacy, or malformed. Board-specific prefix extraction was the mechanism that shortenedHD-30btoHD-30; removing it fixes the cause rather than widening the legacy grammar. - Migration guarantees are executable partitions, not prose assertions. The same function gates planning and manifest rendering before any output path is opened, and its arithmetic is printed verbatim in the manifest.
- New identifiers use
PREFIX_YYYYMMDD-HHMMSS_ABBR. The owner approvesABBRin the planning exchange; on collision the workflow asks for a different abbreviation and neither recomputes the stamp nor invents a suffix. - Historical paths are immutable compatibility inputs. Legacy and
2.0.0-dirtyidentifiers remain supported forever; validation stops on normalized duplicates instead of choosing a path silently. viais descriptive provenance, not authentication. It is absent for a hand edit or a non-empty free-form provider/tool string; no provider registry is invented. This resolves TD-197's decision in favor of the approved free-form option.- Release mutation remains atomic and Coordinator-owned. VERSION, CHANGELOG and tag work is deliberately deferred to
/tfw-releaseafter review, as approved in ONB answer 2 and TS revision 2.
What an existing 2.0.0-dirty project must know¶
- Do not rename
YYYYMMDD-HHMMSS__slugdirectories. Every consumer continues to read them; only newly created tasks usePREFIX_stamp_ABBR. - Planning now asks the owner to approve an uppercase alphanumeric abbreviation before creation. Merge the framework
id_format, current prefix semantics and retired-key removals while preserving project-ownedtask_containers,build.*andscope_budgets. - Re-run migration from a committed board. Run
-k "not repository"during migration and-k repositoryafter the board is removed and the derived index exists. - A malformed board identifier or directory is reported without state or inferred reason. Duplicate normalized rows or directories stop before the manifest is written.
- Update from a pinned source commit whose target tag exists. Use
installed_fromto distinguish provenance drift from customization and repeat the source/tag checks after payload writes. - Run
python .tfw/scripts/gen_index.py --check project; removeinitial_seq,id_max_retries, andreview.default_modewhen reported. - The eventual
2.0.0version marker, CHANGELOG entry and verified tag are produced together by/tfw-releaseafter an approving review.
3. Acceptance Criteria¶
- [x] AC-1: exact three-form parsing, visible malformed inputs, duplicate row/directory refusal and four pinned-corpus compatibility are verified.
- [x] AC-2: every row, parsed directory and malformed directory participates in a computed exact-once guarantee; deliberate imbalance stops and names
[TFW-9](../../TFW-9__update_source_mechanism/HL-TFW-9__update_source_mechanism.md). - [x] AC-3: canon, configuration, planning/init workflows, templates and documentation resolver issue and resolve the approved current grammar; the disposable
ABTtask rendered its full title in the index. - [x] AC-4: Markdown presentation is removed while
normalize_text()andworking_daysremain intact. - [x] AC-5: framework and repository-state test groups are independently runnable and documented in migration order.
- [x] AC-6: source/tag quiescence, provenance drift, reachable retired-vocabulary checking and the 1200-word ceiling are satisfied.
- [x] AC-7: canon and validator agree on optional, non-empty, free-form
via; TD-197's implementation decision is closed in this RF. - [x] AC-8 executor: all seven third-report ยง7 items are fixed or filed with exact scope reasons, and dirty-era consumer instructions are recorded above.
- [ ] AC-8 release: DEFERRED by approved role sequencing โ
/tfw-releaseperforms VERSION, CHANGELOG and verified tag together after review.
REVIEW findings D1 and D2 are closed in revision 2. No optional REVIEW recommendation was added to this corrective pass; TD-200 and TD-201 remain reviewer-filed follow-up work.
4. Verification¶
- Lint (
python -m pytest .tfw/scripts/ docs/scripts/ -q --collect-only): PASS โ 284 collected. - Tests (
python -m pytest .tfw/scripts/ docs/scripts/ -q): PASS โ 283 passed, 1 skipped in 291.65 s. - Verify (
python .tfw/scripts/gen_index.py --check tasks): PASS โ 53 task states valid. - Project check (
python .tfw/scripts/gen_index.py --check project): PASS โ consistent with declared2.0.0-dirty.3payload. - Targeted migration file: PASS โ 50 passed, 1 skipped.
- Repository-state selection: PASS โ 2 passed, 1 skipped, 281 deselected.
- Adapter parity: PASS โ corrected
update.mdtriplet byte-identical; prior plan/init triplets and 11 Codex skill source/copy pairs unchanged. - Update workflow ceiling: PASS โ 840 words.
- Scope: PASS โ 23 physical implementation paths, 17 counted, 0 new implementation files, 1027 counted-line churn.
5. Evidence¶
Cognitive mode: Observational verification โ evidence lives in the EV file, not inline.
See EV file for full evidence details.
Evidence verdict: 8/9 VERIFIED, 1 DEFERRED, 0 BLOCKED, 0 N/A.
6. Observations (out-of-scope, not modified)¶
| # | File | Line(s) | Type | Description |
|---|---|---|---|---|
| O1 | KNOWLEDGE.md |
102, 162 | naming | D68 and ยง3 Legacy still call dirty-clock task IDs current (and D68 still calls the event suffix an actor). D37 reserves this index for /tfw-docs; update it after review from this RF |
| O2 | .tfw/templates/team/profile.md |
12-14, 27-33 | style | The template says profiles cover humans and agents, then says team/ holds people and agent profiles are unusable. This third-report item was outside the approved Phase AB surface and is filed for a scoped follow-up |
| O3 | .tfw/adapters/antigravity/tfw-rules.md.template, .agent/rules/tfw.md |
5-7, 5-8 | duplication | Adapter source requires {version} substitution while the rendered rule correctly reads .tfw/VERSION. Both paths were outside the approved surface; align source/rendering in a scoped adapter update |
| O4 | .tfw/templates/journal/event.md |
49, 70 | naming | The event template still describes via as a provider family. The canonical convention and validator now deliberately accept free-form provider/tool text; update this omitted carrier in a scoped follow-up |
7. Fact Candidates¶
fact-candidates: processed 2026-08-30
No fact candidates. The execution introduced no new human-only project facts beyond the approved ONB decisions already preserved in the task trace.
8. Strategic Insights (Execution)¶
fact-candidates: processed 2026-08-30
No strategic insights. No new domain correction or strategic context was supplied during execution.
9. Diagrams¶
board rows + task directories
|
v
whole-candidate dispatcher
current | dirty-clock | legacy | malformed
|
v
duplicate normalized-ID gate --------> REFUSE before any output
|
v
exact reconciliation partitions
rows: matched / board-only / unresolved / malformed
dirs: matched / directory-only / row-named malformed / orphan malformed
|
v
computed exact-once guarantees --------> REFUSE with guarantee + identifiers
|
v
manifest (arithmetic + checked/not-checked disclosure)
|
--apply only
v
new status.md files + BOARD-SNAPSHOT.md
RF โ TFW-60 / Phase AB: Honest Migration | 2026-08-29