Tree:
bcf6625d7b
master
v0.1a
${ noResults }
2 Commits (bcf6625d7b9d108fa83dc6af5a7e345fe728af89)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
b692979c6a |
G-135 + G-136: per-asset assetorigin sidecars replace the directory record
Pre-activation review outcome (user-approved wording): G-135's record shape pivots from one assetorigin.toml per directory to a per-asset sidecar, <asset-filename>.assetorigin.toml beside the asset it describes. G-135 contract: Scope (both tiers, mirror-identical) names per-asset *.assetorigin.toml sidecars. Acceptance rebuilt - records are bound by the sidecar's own filename (suffix stripped, same directory; files ending in the suffix are records, never assets; reader tolerance kept); the checker's state model is repaired to six states evaluated in table order with first match winning (artifact-absent added for records whose paired asset is gone; verified now requires every hash the sidecar records to match, so a hash-only sidecar verifies on the artifact hash alone; fixtures must distinguish stale / replaced / artifact-absent); the generator clause requires byte-identity per the invocation profile that produced each .ico and that the generator (re)writes each produced artifact's sidecar, so regeneration cannot leave a stale record; the final clause requires sidecars to exist and verify for every generated artifact under the four asset directories. G-135 body: Approach carries the pairing rationale (no path key, file- pair lifecycle, survives wholesale and single-asset copies, composes under merge_over same-path replacement) and the hash-required minimum; the six-row state table gains the evaluation-order and unhashed-claims notes. Alternatives inverted: the per-directory [[asset]] record is now the rejected shape (shared-state writers - the punkcheck G-094/G-095 lesson; file-level clobber at a .vfs root under overlay merges; invisible dangling entries; single-asset copies lose their record), and a fauxlink-carried record is recorded as considered-and-rejected (the filename would encode a mutable fact; overlay pairing would need a nominal-keyed composition invariant in every composer), preserving the nominal-keyed idea as fauxlink hardening independent of this goal (71 fauxlinks in tree, zero same-directory nominal collisions, surveyed 2026-07-28). Notes add the override-without-sidecar kit behaviour (travelled common sidecar truthfully reads replaced), the eased checker parsing posture, and the open pre-activation items (which of the four build-consumed punkshell.ico copies get sidecars; whether a _vfscommon.vfs sidecar shipping inside every baked kit is the intent). G-136: acceptance names icon.ico.assetorigin.toml and the per-asset dependency; Approach/Notes reworded to match. G-057: one Notes sentence disambiguates its per-kit icon sidecar from G-135's record sidecars. goals_lint clean (index/detail mirrors exact, archived-goal references markered); goals_xref score G-135 re-run - G-136 and G-057 linked. G-135 stays proposed; activation is the user's flip. Claude-Session: https://claude.ai/code/session_014wNGMsdNFFrU1duADeirgm Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com |
2 days ago |
|
|
164687d260 |
G-135 + G-136: asset provenance records and generated-project icon seeding
Two proposed goals from the src/assets/logo work, split rather than combined: "the master-to-derived chain is verifiable anywhere" and "generated projects arrive with an icon" are separate outcomes with separate acceptance, and the second merely consumes the first. G-135 - asset provenance records. Nothing currently states that src/runtime/punkshell.ico came from punk-mark.svg, so one failure is undetectable: edit the SVG, forget to regenerate, and the committed .ico silently stops depicting the master. An optional directory-scoped assetorigin.toml records the derivation; a plain-Tcl checker classifies each asset as unrecorded / verified / source-absent / replaced / stale, advisory only. Absence of a record is the DEFAULT and stays silent - a record is an opt-in claim, and every field but path is optional, so "I know this file, I don't know where it came from" is expressible. The same goal retires the Windows tie in make-ico.ps1. The dependency is one line - System.Drawing, decoding PNG to raw BGRA - since pwsh and rsvg-convert are both cross-platform and Tcl core ships zlib. G-136 - generated projects seeded from src/assets/logo/project-default/ at generation time, as a sibling to bootsupport_inject with punkcheck install records, rather than storing artwork in layout trees. Layout storage would mean three copies with no master (project-0.1, basic, and the punkcheck-managed modpod-templates copy), reversing G-087's thin-layout achievement. Because G-135's record is directory-scoped with relative paths it copies verbatim and reads `verified` at the destination. Scope for G-135 separates the two tools rather than bundling them: the generator is replaced in place under src/assets/logo/ (it operates on the files beside it and is already documented there), while the checker is a lint in the shape of goals_lint and architecture_lint and belongs in scriptlib/developer/ - with the home explicitly revisited if it becomes a bake step, since scriptlib/ is user-only and make.tcl must not depend on it. That deferral follows G-057's existing "helper proc location decided in the work" pattern. Both goals record the workflow questions deliberately kept OUT of their acceptance: when the checker runs (bake step vs subcommand), and which layouts declare an icon slot. G-057 gains a Related pointer to G-135 per the dependency-direction convention - its per-kit sidecar is specified to carry "source .ico identity and provenance", which these records are the natural source for. goals_lint clean (86 active-index goals, 50 archived); the G-133 reference carries its archive marker in Notes per the Archive rules. Claude-Session: https://claude.ai/code/session_01YNjnq6oDzecknLg7AuWZgU Assisted-by: harness=claude; primary-model=claude-opus-5[1m]; api-location=anthropic.com |
3 days ago |