Repository navigation
Tags
Tags
Release 1.12.0: document and decision retrieval, write context, trust… … records, secured Neo4j Version 1.12.0 in plugin.json, marketplace.json, pyproject.toml, writ/__init__.py and the version-consistency pin, the CHANGELOG entry covering every commit since 1.11.1, and the program handoff updated for the release.
v1.8.0 Eight entries close one seam from eight directions: a Bash-mediated write that reached neither gate. A control operator with no space in front of it, a shell group, six wrapper prefixes, a command inside find's argument list, a newline, three further prefixes, the shell expansions that decide where a write lands, and a tab or doubled space in front of a verb each hid a real write, and each was measured through the running hook rather than read off the code. A dispatched sub-agent's writes are now bounded by its declared role instead of by whoever dispatched it, and the test suite runs against its own Neo4j instance so a suite run can no longer reach the graph the interactive daemon serves. This release also repairs continuous integration, which had been reporting green over a suite it was not finishing. The test job's 20-minute limit was cancelling the run at 64 percent, hiding six tests that had never once executed on a runner because they assumed a developer's machine: a live daemon, a reachable production graph, real session caches. Each is fixed at its seam rather than skipped. CI now runs the two graph instances a developer machine has, and a seeded witness record proves across every run that nothing wipes the production-address instance. writ.__version__ was pinned by nothing, so a release could have shipped a package reporting the previous number. It is pinned now, and the new assertion was proved conditional by mutation rather than by being green. Verified: 12,278 tests pass locally and 11,517 pass in CI, with zero failures in either, and 17 benchmark targets pass. The gap between those two numbers is 566 test functions that gate on an untracked directory and skip on a runner, measured and recorded in docs/adr/ADR-ci-graph-topology.md rather than left to be rediscovered.
Skip the host-settings assertion when ~/.claude/settings.json is absent The test asserts a stale Bash permission was removed from the HOST's installed global config; CI runners never had one. Its two guarded siblings (pol5b4 global-settings check, the installed-systemd-unit check) already skip this way; this was the only bare host-state read left in the suite.
v1.5.0: Unify bible ingestion under writ import-markdown
writ import-markdown becomes the single canonical entry point for ingesting
every node type under bible/ (Rule + Skill + Playbook + AntiPattern + Phase +
Technique + Rationalization + SubagentRole + WorkedExample + ForbiddenResponse).
Pre-1.5.0 the CLI handled only Rule nodes; methodology required shelling out
to scripts/migrate.py --methodology-dir. The duplicate parse/validate/write
loop collapses into one library module that both call sites consume
(DRY-DUP-002). Per-node-type dispatch becomes a registry lookup (SOLID-OCP-002),
and validation failures surface as typed IngestError instead of raw Pydantic
tracebacks (API-ERROR-002).
Added:
- writ/graph/methodology_ingest.py library (ingest_path, ingest_edges,
INGESTER_REGISTRY, KNOWN_NODE_TYPES, IngestReport, IngestError)
- --only TYPE[,...] and --dry-run flags on writ import-markdown
- tests/_writ_cmd.py shared CLI resolver (.venv/bin/writ -> python -m
writ.cli fallback) consumed by every test that subprocess-invokes the CLI
- tests/test_import_markdown_unified.py (27 tests, 7 classes)
- tests/test_methodology_ingest.py (14 unit tests)
Changed:
- writ/cli.py import_markdown rewritten as a thin Typer wrapper over the
library. writ migrate now in-process; exit-code contract preserved.
- scripts/migrate.py reduced from 257 lines to a ~71-line shim that
preserves --bible-dir / --methodology-dir / --dry-run argparse surface
and re-exports run_migration + run_methodology_migration for the
test_phase6bcd_verification import contract.
- tests/conftest.py::pytest_sessionfinish, tests/test_retrieval.py,
tests/test_post_suite_neo4j_restoration.py, tests/test_graph_proximity.py,
tests/test_embeddings.py shell out to writ import-markdown bible/ (was:
scripts/migrate.py --methodology-dir bible/methodology).
- tests/test_ingest.py::TestMigrationIntegration uses MERGE-aware unique
rule_id count (the 286-vs-276 disparity was 10 enforcement-rule IDs that
legitimately live in both bible/<topic>/rules.md and
bible/methodology/<topic>/rules.md).
- .github/actions/setup-writ/action.yml + .github/workflows/pr.yml call
writ import-markdown bible/. CI gains methodology coverage.
- README.md, bible/methodology/PBK-AUTHOR-001.md,
docs/extraction/{04,08,09}-*.md, benchmarks/bench_targets.py,
scripts/instrument-cold-start.py, .claude/CODEBASE.md, templates/CLAUDE.md
-- migrate.py user-facing references repointed at writ import-markdown.
- Version 1.3.0 -> 1.5.0 across pyproject.toml, .claude-plugin/plugin.json,
.claude-plugin/marketplace.json (both metadata.version and
plugins[0].version). tests/test_version_consistency.py EXPECTED_VERSION
bumped accordingly.
- CHANGELOG.md prepends a [1.5.0] entry that documents both the absorption
work (commit 0882dd6) and this commit's unify work as a single release.
Fixed:
- writ import-markdown no longer auto-exports the full graph when invoked
against a subdirectory. Pre-fix, running writ import-markdown
bible/methodology/ triggered an auto-export whose file-location lookup
only scanned within the subdir; rules whose original files lived outside
scope fell through to <output_dir>/<domain>/rules.md, creating bogus
duplicates like bible/methodology/process/rules.md. Auto-export is now
gated on path.resolve() == DEFAULT_BIBLE_DIR.resolve(). Regression tests
in tests/test_import_markdown_unified.py::TestImportMarkdownEdgeCases
cover the subdir-skip and default-root-still-fires cases.
Notes:
- Backwards compat: python scripts/migrate.py [--bible-dir ...]
[--methodology-dir ...] [--dry-run] and from scripts.migrate import
run_migration continue to work unchanged. The shim prints a deprecation
notice to stderr on direct invocation but does not change exit codes.
- Intentional behavior change: writ import-markdown with no flags now
imports methodology too. Pre-1.5.0 invocations relying on the Rule-only
side effect should add --only Rule to preserve the old scope.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
PreviousNext