Releases: vr000m/skein
Releases · vr000m/skein
Release list
skein v0.2.4
[0.2.4] - 2026-06-21
Added
- Mermaid diagrams render live in
/plan-viewHTML.render_markdownnow emits<pre class="mermaid">for```mermaidfences (HTML-escaped,<pre>chosen so the raw diagram source stays readable as fallback), and bothtemplate.html/plan-template.htmlload the Mermaid v11 ESM runtime from jsDelivr (mermaid@11,startOnLoad: true,securityLevel: 'strict'). CDN-only by design (no vendoring); diagrams need a network fetch to render. Applied identically to the skein-codex mirror. - Conditional
## Architecture & Call Flowsection in the dev-plan template. Included only when a plan has 2+ independently-executing components: a component graph (Mermaid), a trigger-ordersequenceDiagram, and a context-lifecycle table.dev-planSKILL.md documents the inclusion heuristic, a pre-phase user-confirmation gate, the three sub-elements, placement (after Integration Seams, before Testing Notes), and that the section is above the review marker (immutable contract). - Negative-space topology audit in the
/review-planarchitecture lens. The lens now reconstructs the implied call-flow from Files-to-Modify + Technical Specifications and flags components/triggers/context-transitions a plan needs but never names, plus a topology-omission backstop (Missing Task / Important when 2+ components lack an## Architecture & Call Flowsection). - Interactive triage-and-clarify elicitation loop in
/review-plan(default-on Step 6.4): triage via free-form selection over unbounded findings, per-finding clarify options, then route — act-on decisions to/dev-plan update(above the marker), waived findings to a### Review Waiverssubheading (below the marker). New--batchflag skips the loop for unattended/CI runs and is orthogonal to--auto-fix=trivial. A write-then-hash ordering invariant pins: loop edits flush → auto-fix → marker hashed exactly once. - Model / thinking-level routing table in the skills-architecture design doc (per skill → lens → Claude model+effort → Codex reasoning level) with a maintenance note.
Changed
- Bumped both plugin manifests to
0.2.4in lockstep (theversionfield is the update cache key; both mirrors must move together). ## Architecture & Call Flowadded toAF_FORBIDDEN_HEADINGS(canonicalscripts/lib/auto-fix-common.sh, re-bundled to all skill subtrees) and to bothreview-planprose forbid lists, so--auto-fix=trivialcannot rewrite the new immutable section.
skein v0.2.3
Fixed
/review-plannow writes its review marker via a bundled deterministic entrypoint (scripts/write-review-marker.py) instead of an LLM hand-following a prose recipe at Step 7. Root cause (confirmed from session transcripts, both/review-planand/conducton 0.2.2): the 0.2.2 fix hardenedconduct/marker.py(code) and both SKILL.md mirrors (prose), but/review-planstill computed the marker hash by hand — and an agent, despite the byte-faithful prose in context, wroteabove = b'\n'.join(lines[:idx]), which drops the newline immediately above the marker (joinseparates, it does not terminate). That rstripped hash diverged fromconduct's byte-faithful slice (plan_text[:span_start]), so/conductfalse-flagged a freshly reviewed plan as drifted. Prose cannot prevent thesplitlines/joinnewline-eating trap; only shared deterministic code can.- The marker hash is now computed by the same
marker.pyauthority/conductvalidates with — promoted to a canonicalscripts/marker.pyand fanned into bothreview-planmirrors byscripts/bundle-appliers.sh(per-skill extras viabundle_extra_for). All copies (conduct ×2, review-plan ×2) are anchored byte-identical to the canonical file bytests/parity/test-marker-parity.sh, so the two skills can no longer disagree on a plan's hash. /review-planStep 7 adopts the auto-fix applier's abort-if-absent / never-hand-compute contract, and now aborts (rather than appending the marker at EOF) when a plan has no marker line and no template placeholder divider — burying the marker below the workspace would fold the workspace into the hashed contract.
Changed
- Bundle map (
scripts/lib/bundle-map.sh) grows a per-skill extras hook (bundle_extra_for) somarker.py+write-review-marker.pyship intoreview-planonly (notdeep-review), preserving the "bundled == operative" invariant.check-sync.shandtests/parity/test-applier-bundle-parity.shenumerate the extras so their byte-identity is guarded. - Added
tests/parity/test-marker-parity.sh(anchored byte-identity + post-write round-trip + the named9fa0989-vs-df8d891divergence regression) andtests/auto-fix/test-review-plan-marker-write.sh(recipe-removed negative assertion across both mirrors, abort contract, placeholder happy path).
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
skein v0.2.1
Documentation
- Clarified in both
deep-reviewSKILL.md copies thatscripts/render-reconciled-report.shis a repo-only reference renderer, deliberately not bundled into the installed skill (perscripts/lib/bundle-map.sh) — the running review renders by hand from the report template, so the renderer's absence under the installedscripts/is expected, not a broken bundle. Prevents review runs from false-flagging it as a missing artifact.
Full changelog: CHANGELOG.md
skein v0.2.0
Added
- Fifth
assumptionslens (Opus) for/review-plan: audits claims the plan states as settled fact but cannot verify from the codebase — backend/external behaviour, business semantics, data shape, unread contracts, environmental facts./review-plannow runs four high-reasoning Opus lenses plus one Haiku factual lens.
Fixed
- Cross-lens reconciliation (
scripts/reconcile-findings.sh) no longer collapses unanchored findings. Findings with no location anchor (emptyfile+-1line) each receive a unique merge signature instead of sharing one("", -1, category)signature and silently dropping all but one. Anchored merge/related behaviour is byte-for-byte unchanged; both thejqand awk-fallback parsers partition identically (including an explicitline:-1). Also benefits/deep-review, which shares the engine.
skein v0.1.0 — first public release
First public release of skein — a namespaced skill plugin for Claude Code and the OpenAI Codex CLI. All skills load under the skein: namespace to avoid collisions.
Install
Claude Code:
/plugin marketplace add vr000m/skein
/plugin install skein@skein
Codex CLI:
codex plugin marketplace add vr000m/skein --ref v0.1.0
codex plugin add skein@skein
Added
- Eleven namespaced skills under
skein:*shipped as a single plugin for Claude Code and OpenAI Codex CLI:dev-plan,review-plan,conduct,fan-out,deep-review,content-draft,content-review,rfc-finder,spec-compliance,update-docs,plan-view. - Dual-harness plugin layout:
plugins/skein/(Claude mirror) andplugins/skein-codex/(Codex mirror) with intentional dispatch-idiom and path-anchor divergence (${CLAUDE_PLUGIN_ROOT}template substitution vs$SKILL_DIRenv-export). - Opt-in
--auto-fix=trivialtier for/deep-reviewand/review-plan, gated by a single-source allowlist (scripts/auto-fix-allowlist.json) and bundled appliers (regenerated byjust bundle-appliers). - Repo invariants: canonical-↔-bundled byte-identity check, Claude-↔-Codex SKILL.md prompt parity check, trunk-snippet parity check, no-manual-apply-fallback enforcement.
scripts/delete-skills.shto surgically remove pre-plugin flat skill copies after a successful plugin install.- Public GitHub install: both harnesses install directly from
vr000m/skeinwithout a local clone; local-clone form retained as a contributor workflow.
Changed
- Marketplace renamed from
skein-localtoskeinin both.claude-plugin/marketplace.jsonand.agents/plugins/marketplace.json. Install command is/plugin install skein@skein(Claude) andcodex plugin add skein@skein(Codex).
See CHANGELOG.md and README.md for full details.