skein v0.2.2
Fixed
- Quoted SKILL.md frontmatter values that contain multiple bracketed argument tokens or colon-bearing prose so Codex can load all bundled
skein:*skills without YAML parse warnings. /conductreview-marker hashing (conduct/marker.py) is now byte-faithful, matching the documented recipe (git hash-objectof the bytes above the marker line).strip_marker_for_hashingpreviously popped the blank line that normally precedes the marker and round-tripped throughsplitlines()/join(), silently normalizing CRLF→LF;compute_plan_hashalso read viaread_text, translating line endings before hashing. Together these made the computed hash disagree withgit hash-objectof the above-marker bytes whenever a plan had a blank line before its marker (the common markdown style) or used CRLF endings — so preflight false-flagged a valid plan as stale (hard-stopping a first run, or, on--resume, rewriting the marker into a form no byte-faithful external checker accepts). Hashing now slices the plan at the marker line's exact byte offset with line endings preserved. Migration: markers written by/review-planwith a blank line before them now validate correctly; any marker previously written by the oldmarker.pyblank-popping path on such a plan reports stale once and refreshes on the next/review-planor--resume.write_markernow hashes the exact bytes it writes above the marker. It previously hashed the contract before appending the trailing newline that separates the contract from the marker line, so marking a plan that had no trailing newline (e.g. a freshly authored plan) recorded a hash of bytes that were never written above the marker — leaving the plan stale the instant/review-planmarked it, and/conductwould then reject a plan the user had just reviewed. (Pre-existing; surfaced by adversarial review.)write_markerreads and writes plan bytes directly (read_bytes/write_bytes) instead of text-moderead_text/write_text. Text mode applies universal-newline translation whose direction is platform-dependent — on Windowswrite_textre-expands\nto\r\non disk — so the byteswrite_markerhashed could differ from the bytescompute_plan_hash(byte-faithful since this release) reads back, marking a CRLF plan stale on Windows the instant it was written. Reading and writing raw bytes keeps both sides on identical bytes on every platform and preserves a plan's existing line endings.
Changed
- Hardened the review-marker locators:
last_marker_index(line index) and_marker_line_span(byte offset) now share one_scan_marker_linesfence-tracking core so they can never drift to different markers on the same plan. Documented the byte-faithful invariant inconductandreview-planSKILL.md (both mirrors) to prevent re-introducing line-ending/blank-line normalization. Addedtests/parity/test-conduct-marker-parity.sh(wired intojust parity-tests) assertingconduct/marker.pystays byte-identical across the skein and skein-codex mirrors.
Full changelog: CHANGELOG.md