DAC

Timeline
Login

Timeline

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

7 check-ins

2026-08-09
03:15
Reject unterminated chunks and malformed openers with trailing whitespace

D-011: two previously-silent parsing gaps in canonical dac.tcl, tracked in STATUS.md's Defects since the initial revival investigation, now reject cleanly instead of being silently accepted or misread.

Unterminated chunk at EOF (opened with a chunk header, never closed with a standalone @): previously registered successfully with whatever body had been collected, no diagnostic. Now: "Error: Unterminated chunk 'NAME' (opened at line N, missing closing '@')", stderr, exit 1, zero stdout.

Malformed chunk opener with trailing whitespace after '>>=': previously silently treated as prose (or chunk body content), surfacing only later as a confusing "chunk not found" error or garbled weave output. Two directions were presented as an explicit choice before implementing -- reject as malformed, or widen the grammar to tolerate it like reference lines already do -- reject was chosen. Now: "Error: Malformed chunk opener at line N: trailing whitespace after '>>=' (literal line shown in quotes)", stderr, exit 1, zero stdout.

Both checks run once, during the single chunk-collection pass tangle and weave already share, before either mode's own output logic runs. Unlike D-007's reachability-scoped cycle validation, both are whole-file syntactic checks: malformed/unterminated input anywhere in the file is rejected regardless of whether the requested root would ever reach it.

Two pre-existing dac.test cases turned out to be inescapably testing an unterminated chunk (there's no way for a chunk's final body line to also be the file's last non-newline-terminated bytes without it being unterminated) -- updated in place, not deleted, to assert the new correct rejection.

Five new dac.test cases, confirmed failing against the pre-fix dac.tcl first. dac.test is now 24/24; dac-hfd.test and dac-hfd-components.test unaffected. No repository fixture .dac file contained either defect.

Documentation (DECISIONS.md new D-011, docs/design/semantic-contract.md, COMPATIBILITY.md, STATUS.md, TESTING.md, SEMANTIC-TRACEABILITY.md, meta yaml files) updated in the same unit of work.

Co-Authored-By: Claude Sonnet 5 (noreply@anthropic.com) Leaf check-in: 78cb467920 user: mek tags: trunk

02:57
Split HFD workflow layer into components; make dac.tcl the sole core (D-009, D-010)

D-009: split dac-hfd.tcl (647 lines) into a thin CLI dispatcher plus five small, explicit-input/output sibling files sourced in dependency order: hfd-common.tcl (core_tool, slurp), hfd-build.tcl (tangle/weave caching and atomic output), hfd-lint.tcl (lint, with its analysis logic factored into a pure lint-file proc), hfd-testrunner.tcl (test/green/red/tdd sharing one run_embedded_tests core), and hfd-watch.tcl (watch). Pure structural move: every retained command keeps its exact name, arguments, output, and exit behavior, confirmed by the full pre-split dac-hfd.test suite (33 cases) passing unchanged. This closes the entire D-008 HFD follow-up sequence (stabilize, audit, two repairs, split). New dac-hfd-components.test unit-tests each component's pure procs directly in-process, made possible for the first time since components (unlike the old monolithic file) have no top-level side effects.

D-010: at the user's explicit request (preference for scripts to carry a file extension), reverses D-005's authority designation. dac.tcl -- not the extensionless dac -- is now the sole canonical Tcl implementation and public executable; dac is removed. This was already the workflow layer's de facto default (core_tool always resolved to dac.tcl). dac.test restructured accordingly: with one implementation there is nothing left to keep byte-identical, so its paired dac/dac.tcl comparison helpers collapsed into single-script equivalents, with the same 19 cases now asserting a single expected value instead of a duplicated pair. Makefile's "DAC ?= dac" became "DAC ?= ./dac.tcl", incidentally fixing a previously tracked defect where plain make required dac on $PATH.

Documentation (ARCHITECTURE.md, DECISIONS.md, STATUS.md, COMPATIBILITY.md, README.md, ROADMAP.md, CLAUDE.md, TESTING.md, TDD_GUIDE.md, SEMANTIC-TRACEABILITY.md, docs/design/semantic-contract.md, meta/*.yaml) updated in the same units of work; historical dated log entries and frozen investigation snapshots left untouched per the repository's convention of not rewriting history.

Co-Authored-By: Claude Sonnet 5 (noreply@anthropic.com) check-in: ea6e581150 user: mek tags: trunk

02:29
Audit and repair HFD tangle/weave caching and lint grammar recognition

Audit (no code change) tangle/weave/lint per prompts/audit-hfd-build-and-lint.md: confirms cache-key gaps (tangle can silently serve a different chunk's stale content; both tangle/weave silently serve stale content under clock skew; neither invalidates on a core-tool change), non-atomic output (a failing build truncates a pre-existing good output plus an uncaught Tcl stack trace), and lint's chunk-recognition regexes being stricter than canonical grammar (empty chunk names invisible to it). Findings in docs/investigation/HFD-BUILD-LINT-AUDIT-FINDINGS.md; two scoped repair prompts authored.

Repair tangle/weave: replace the live outfile-vs-source mtime comparison with an exact-match sidecar file (source mtime, core mtime, and for tangle the requested chunk) recording the inputs that produced each build, closing the clock-skew, argument-identity, and core-identity gaps without content hashing. Output is now written to a sibling temp path and renamed into place only on success, so a failing build never corrupts a pre-existing output and reports a clean diagnostic instead of a stack trace. Makefile.hfd's clean now also removes the new cache sidecars. 10 new dac-hfd.test cases.

Repair lint: widen the chunk opener/reference regexes to match canonical dac's grammar exactly, including an empty chunk name, previously invisible on both the definition and reference side. Remove dead open_stack tracking. Document (not change) lint's always-exit-0 contract as deliberate. 4 new dac-hfd.test cases. dac-hfd.test is now 33/33.

This closes both repair prompts scoped by the audit; prompts/split-hfd- workflow-layer.md's prerequisites are now fully satisfied.

Governance docs (STATUS.md, ARCHITECTURE.md, COMPATIBILITY.md, TESTING.md, TDD_GUIDE.md, SEMANTIC-TRACEABILITY.md, meta/*.yaml) updated in the same units of work per the repository's documentation-freshness rule.

Co-Authored-By: Claude Sonnet 5 (noreply@anthropic.com) check-in: 7922637601 user: mek tags: trunk

2026-07-21
03:13
Implement D-007 cycle detection, stabilize HFD test runner, audit HFD build/lint

D-007: add check-cycles active-path validation to dac/dac.tcl, run before any tangle/weave output; closed-path diagnostics, no stack trace, no global visited set. 5 new dac.test cases (19/19).

Stabilize dac-hfd.tcl's test/green/red/tdd/watch around one shared run_embedded_tests result model: fixes false-green on setup failures, red/tdd never exiting nonzero, test's uncaught tangle-failure crash, and non-unique temp script paths; declares stderr/ARGS/interpreter rules in TDD_GUIDE.md. Makefile.hfd's dev-once adjusted since red now has a real exit code. 11 new dac-hfd.test cases (19/19).

Audit (no code change) dac-hfd.tcl's tangle/weave/lint per prompts/audit-hfd-build-and-lint.md: confirms cache-key gaps (missing core and, for tangle, chunk-argument identity - both can silently serve wrong or stale content), non-atomic output (failed build truncates existing good output plus uncaught stack trace), and lint's chunk-recognition regexes being stricter than canonical grammar (empty chunk names invisible to it). Findings in docs/investigation/HFD-BUILD-LINT-AUDIT-FINDINGS.md; two new scoped repair prompts authored for follow-up sessions.

Governance docs (STATUS.md, ARCHITECTURE.md, COMPATIBILITY.md, TESTING.md, SEMANTIC-TRACEABILITY.md, docs/design/semantic-contract.md, docs/investigation/CURRENT-STATE-FINDINGS.md, meta/*.yaml, CLAUDE.md, README.md) updated in the same units of work per the repository's documentation-freshness rule. check-in: c8365f21f9 user: mek tags: trunk

2026-07-20
22:52
Stabilize canonical Tcl behavior and record revival decisions

- select Tcl as the canonical implementation and retain the Perl draft under historical/ as non-normative evidence

- designate dac as the authoritative CLI/source and dac.tcl as a transitional compatibility mirror

- repair final-line handling and standalone weave chunk termination

- repair HFD embedded-test extraction, failure exits, interpreter parsing, input handling, and temporary-output placement

- characterize duplicate definitions and accept ordered append semantics

- retain five generated derivatives with a byte-for-byte reproducibility gate

- define active-path cycle rejection and no fixed semantic depth limit, with a bounded characterization-first repair prompt

- classify HFD as an experimental workflow incubator and scope test-runner stabilization, build/lint audit, and component splitting

- expand canonical Tcl coverage to 14 tests and HFD coverage to 8 tests

- align architecture, compatibility, testing, status, semantic traceability, investigation records, prompts, and metadata

The protected day01.py working change remains unreconciled and was not overwritten. All legacy suites, governance checks, metadata parsing, Tcl mirror identity, and the five generated-derivative comparisons pass. check-in: 6e5236aaaa user: mek tags: trunk

2026-07-14
03:10
review and revived dac code check-in: 1efbcf6c2a user: mek tags: trunk
02:19
initial empty check-in check-in: 0a7a7ca79c user: mek tags: trunk