Feature plan: Step 1 · Step 2 · Step 3 · Step 4

Debug mode: enabled, inherited from approved Step 3.

Execution state

  • Steps 1–3 approved; branch feature/markdown-task-lists, planning 2dc733152. Reconciled newer origin/main (c7796cac1) without changing the canonical renderer; preserved todo counter note ee0f5b173 and unrelated untracked research files.

  • Study entry before implementation: railspike-effort / v3/markdown_task_lists, v1/R1/P2, baseline 682ab5b40, Codex single exposed rater; 0.35 total reaffirmed, prior intake/checkpoints retained. No measured labor, independent rating or accepted outcome.

  • Four sequential stages. Counter and wider-column follow-ups remain separate. Zero dependencies/schema/navigation changes; no deployment, merge/push or recovery-storage disposal authorized by this step.

Stage 1 - Canonical task rendering and boundaries

  • Changes: supported unordered items recognize one leading checked/unchecked marker and emit a native disabled checkbox within a first-paragraph label. Wrapped task text remains in the label; children/later paragraphs stay outside. No generated identifiers, form names, values or handlers. Canonical inline/link rendering and whole-list recovery remain the only paths. Task item/label classes provide scoped presentation hooks for Stage 2. Invisible/empty labels conservatively retain literal markers.

  • Verification — passed: 43/43 task/list/table/reader PHP cases and renderer lint/whitespace. Six registered task methods cover checked/unchecked/uppercase states, nesting, mixed siblings, wrapped labels, repeated tasks, later/ordered/escaped/code/table/malformed/empty negatives, whole-list fallback/code bytes, comment hiding, safe links/HTML/image alternatives and an actual onboarding-checklist reader. Prior literal-task expectations updated to require disabled task state while retaining all safety assertions.

  • Notes: planning 2dc733152. Source-only blocks retain original markers and no inputs; native naming/immutability, bullet alignment, contrast and actual keyboard/theme checks remain Stage 2. No full-suite/UI/release claim. Saved source metrics and substantive study entries here outside the planning commit; unrelated research remains unstaged.

Stage 2 - Accessible immutable reader

  • Changes: scoped native checkbox sizing/reset, ordinary task-text font, marker-gutter alignment and task-only bullet replacement; ordinary siblings remain unchanged. Browser fixture covers state, first-paragraph names, nested children, repeated tasks, literal/ordered/code/table negatives and whole-list source recovery. Normal Tools→Docs→Browse all→onboarding checklist is exercised without JavaScript using existing browse pagination.

  • Verification — passed: 8 dynamic browser scenarios, desktop/390px × default/Word97/Chicago/Midnight, JavaScript disabled. Browser accessible-role queries confirm exact names, checked/disabled states and no child/later-paragraph contamination; five controls each have one implicit label, no IDs/names. Real pointer/Space attempts preserve every state; real Tab skips inputs, reaches task links and existing scroll regions, and actual task links navigate correctly. Existing procedure/table/list/fallback checks and no page-wide overflow pass.

  • Visual review — passed: task alignment, native checked/unchecked distinction and link focus in all four phone themes plus desktop Word97/default. No visible legend or editing controls; neutral native disabled appearance retained. Durable measurements dynamic_browser_evidence.json; fixture/screenshots /tmp/markdown-tasks-dynamic-g50vburz. Browser/whitespace checks passed.

  • Corrections: initial browse locator matched hidden recovery links as well as Browse all; narrowed to the named link. A pointer-loop scroll-stability timeout followed Space scrolling; use instant positioning before genuine pointer attempts and wait for resulting scroll. Full matrix then passed. No product behavior change was needed for these harness corrections.

  • Notes: Stage 1 a6d2591b6. Browser semantics are not physical screen-reader/device acceptance. Copied/generated publication/recovery remains Stage 3; unrelated research stays preserved.

Stage 3 - Portable publication and recovery

  • Changes: copied-package and static-reader checks now require native disabled tasks, checked-state counts, existing task labels and byte-identical source downloads. Actual task fixture is generated alongside existing list/table fixtures; failure retention also checks the published task page.

  • Verification — passed: 2/2 complete static inventory/on-demand tests in isolated source snapshot /tmp/markdown-tasks-static-pbmwppmc; renderer/CSS/static-test hashes match this checkout. Full catalog/download byte checks include original Markdown, not stripped rendered task text. Isolated snapshots prevent unrelated research edits from changing an active inventory build.

  • Verification — passed: copied complete dependency-free application on PHP 8.1.2, actual full/shared CLI publication, dynamic/generated tasks/lists/tables/fallback parity, five disabled fixture controls with three checked, exact task-source download, stale/deleted-reader refresh, injected renderer-failure 503, retained active published task page, restoration/rebuild. 8 generated reader + 8 static discovery scenarios pass across desktop/390px and four themes, including accessible names, pointer/Space immutability, Tab skipping, actual links and existing scroll/structure behavior. Inspected all four generated phone task screenshots.

  • Evidence: release_recovery_evidence.json, static_browser_evidence.json, static_discovery_evidence.json, static_verification_evidence.json; copied package /tmp/markdown-release-we3h09lr. Syntax/whitespace checks passed.

  • Notes: Stage 2 214612173. No production activation/full-suite/physical-device claim. Corpus/classification and closeout remain Stage 4; native disabled semantics do not substitute for physical assistive-technology testing.

Stage 4 - Corpus acceptance and closeout

  • Changes: frozen/refreshed compact render reports, reusable dependency-free task audit, all 47 measured task-document classifications and acceptance report; runbook now states precise read-only marker/naming/literal boundaries. No task counter or wider-column implementation.

  • Verification — passed: frozen 1,420 documents at 682ab5b40 all match original source hashes and render without errors; refreshed 1,425 tracked documents at c908ec4aa render without errors. All 1,182 measured candidates are independently accounted for per document/state: 598 checked + 511 unchecked native displays, 46 checked + 27 unchecked source candidates retained. Classification: 40 displayed, three mixed, four literal/source-only task documents. Audit verifies disabled/native/no-submission attributes, one nonempty label per control, no child/paragraph capture, valid bounded lists and unchanged safety-filtered source regions; label-text hashes only, no source/HTML dumps.

  • Verification — passed: final 52/52 task/list/table/reader/catalog PHP cases plus Stage 3 2/2 static cases (54 distinct focused cases), metrics fixture, corpus audit, PHP/Node/Python syntax, artifact links, whitespace and approved dependency inventory. Dynamic/static/discovery evidence covers 24 distinct theme/viewport scenarios. Representative screenshots and browser accessibility names/states are verified; not all 47 documents visually reviewed and no physical assistive-technology claim.

  • Notes: Stage 3 c908ec4aa; renderer/CSS unchanged after Stage 2 candidate 214612173, so complete copied-package/reader/recovery evidence remains applicable. Unrelated research snapshot hashes remain unchanged and those files remain untracked/unstaged. Counter todo note ee0f5b173 retained unchanged. No full suite, live deployment, merge/push, dependency/schema/nav change or recovery-storage disposal.

Study closeout and handoff

  • Stable v3/markdown_task_lists, scope v1 clarified/R1/P2, baseline 682ab5b40, Codex single exposed rater. Planning 2dc733152; Stages 1–3 a6d2591b6, 214612173, c908ec4aa; Stage 4 follows. Four planned/four completed stages, no split/new feature request. Corrections: browser browse selector narrowed to the visible named link; pointer-loop positioning stabilized after Space scrolling. Empty/invisible labels conservatively stay literal; this implements the approved nonempty-label boundary. No remaining implementation within the supported/literal contract.

  • Intake/entry/projected 0.35 total preserved/reaffirmed; separate retrospective scope 0.40 for native first-paragraph naming, link/immutability/theme evidence, source/download recovery and full task-corpus accounting. Frozen R1 report/diff/historical feedback hashes reverified; same exposed rater, no measured labor or independent rating. Maintainer comfortable-fit judgment and acceptance pending; no accepted-count increment. Parent list/table functional acceptances and historical-retention limits remain separate.

  • Dependency delta zero external additions/upgrades/copied code; manifests/locks and third-party tree unchanged. Technically complete local handoff; full suite, physical devices/assistive technology and deployment remain unverified. Counter/wider-layout follow-ups and all recovery storage are preserved.

UAT correction and consolidated checklist — 2026-10-23T19:38:43.951498+00:00

  • Request: checked/unchecked states are barely distinguishable in most themes; fix their visibility and create a relevance-sorted checklist covering remaining and completed Markdown work.

  • Disposition: in-scope correction to the approved task-state legibility/contrast requirement on the still-unmerged task branch; user explicitly requested the correction. Retain native checkbox elements, disabled semantics, names and links while replacing low-contrast browser-disabled painting with strong theme-token styling. No new role/control, dependency or task editing. The earlier native-paint visual acceptance is superseded by the reported UAT failure; renewed verification pending.

  • Separate documentation request: consolidate existing Markdown implementation/acceptance/compatibility/history items in ../markdown_work_checklist.md, distinguishing requested work from optional decisions. No new optional-feature implementation or recovery disposal authorized. Counter and wider-column follow-ups remain deferred; todo.txt unchanged.

Correction verification and disposition

  • Changes: theme-token CSS draws hollow unchecked boxes versus solid checked boxes with contrasting ticks; native disabled inputs, names and renderer output unchanged. Forced colors use Canvas/CanvasText. Added tests/browser/docs_task_contrast.mjs for every registered theme and state-pair screenshots. Arena's transparent panel exposed an invisible tick in the first sweep; opaque page-color ticks resolve it. No theme-specific overrides or dependencies.

  • Verification — passed: 46 dynamic + 46 generated Chromium cases, JavaScript off, all 16 themes plus Auto light/dark, LCD's three additional palettes and forced light/dark, each at 1280px/390px. All 46 pairs visually inspected; generated pairs are pixel-identical to dynamic. Minimum computed unchecked border/backdrop 8.46:1, checked tick/fill 3.95:1; each exceeds the 3:1 fixture threshold. These are local computed-color/shape checks, not general accessibility certification.

  • Verification — passed: actual isolated copied-package build-static --shared-only publication, followed by 8 final generated reader regressions, including names/state, pointer/Space immutability, Tab skipping, links, source downloads and list/table/scroll/overflow. Eight initial-correction dynamic reader cases also passed before the Arena tick refinement. 52/52 focused PHP task/list/table/reader/catalog checks pass. Final syntax, local artifact links and whitespace checked. Evidence: task_contrast_verification.json; dynamic /tmp/markdown-task-contrast-5dinak1b, generated /tmp/markdown-release-we3h09lr. Existing corpus/failure-recovery evidence remains historical; renderer/source untouched.

  • Documentation: created relevance-sorted ../markdown_work_checklist.md, linked from plans index; completed versus pending acceptance, requested usability follow-ups, optional compatibility decisions and history-retention limits are distinct. Corrected stale rendered-table verification wording in the runbook. No todo.txt edit, recovery deletion, counter/wider-layout implementation or unrelated change.

  • Study checkpoint: same v3/markdown_task_lists, v1 clarified/R1/P2, baseline 682ab5b40, Codex single exposed rater. All three canonical frozen R1 hashes reverified. Original projected 0.35 preserved and separate retrospective 0.40 reaffirmed, including this ordinary in-scope visual correction; no new feature/cycle/split or measured labor. The user reported a failed visual outcome, which supersedes initial appearance acceptance. Corrected local verification is complete; maintainer UAT/comfortable-fit judgment and accepted-count increment remain pending.

  • Handoff: correction ready for user retest; current branch remains unmerged/unpublished. Full suite, physical devices/assistive technology and production remain unverified. Dependency delta zero; manifests/locks/third-party trees untouched. Prior stage commits and all recovery data preserved. A separate fix commit contains this refinement and summary, followed by log-only diagnostic handoff.

Maintainer acceptance and main integration — 2026-10-23

User accepted the corrected result (“Good enough”) and explicitly authorized merging into main. Functional UAT is accepted; this does not establish physical AT/device verification or study comfortable-fit judgment. Integrated updated origin/main in 25be97203, retaining both checklist/register navigation, all study cycle records and recovered R1 provenance, plus both independently authorized todo entries. No new todo request was added. Renderer/CSS merged without conflict; focused 52-case regression rerun recorded in the merge handoff. Existing audit/recovery refs and backups remain untouched. Main publication is Git integration, not production deployment. Original projected 0.35/retrospective 0.40 remain unchanged; no inferred study accepted-count increment.