15 KiB
type, title, created, updated, tags, status, related
| type | title | created | updated | tags | status | related | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| meta | 2026-04-24 v1.6.0 Release Session | 2026-04-24 | 2026-04-24 |
|
evergreen |
|
2026-04-24 v1.6.0 Release Session
A same-day release cycle covering v1.5.0, v1.5.1, and v1.6.0.
This session took DragonScale from a three-mechanism opt-in extension to a four-mechanism opt-in extension, with a hardening point release in the middle.
Public release notes: docs/releases/v1.6.0.md. That file is the user-facing artifact and the source to paste into a gh release create v1.6.0 body. This session page is the internal engineering record.
Ground truth for this page comes from:
CHANGELOG.mdentries[1.5.0],[1.5.1], and[1.6.0]wiki/log.mdentries for 2026-04-24 covering Phase 3.5, Phase 3.6, and Phase 4- current repository state for file existence, tags, and commit history
Release Sequence
v1.5.0: Phase 3.5, morning. Cross-phase hardening, opt-in DragonScale installer, reproducible tests,CHANGELOG.md,Makefile, version sync.v1.5.1: Phase 3.6, afternoon. Five surgical hardening fixes across tiling security, rollout baseline, AGENTS docs, wiki-ingest wording, and install guide versioning.v1.6.0: Phase 4, late. DragonScale Mechanism 4 shipped as opt-in boundary-first autoresearch, with the new scorer script, new tests, and no-topic autoresearch candidate flow.
Release Summary
The morning release, v1.5.0, was the hardening pass that closed the hold-ship audit items accumulated across Phases 1 through 3.
The afternoon release, v1.5.1, was a narrow correction pass that fixed five remaining inconsistencies and one tiling write-path confinement issue before Phase 4 moved forward.
The late release, v1.6.0, shipped the previously deferred fourth DragonScale mechanism and completed the opt-in DragonScale set described in [[DragonScale Memory]].
No git tag was created for v1.5.0, v1.5.1, or v1.6.0.
No push to origin/main happened during this release cycle.
git tag verifies that only pre-DragonScale tags exist locally:
v1.1v1.4.0v1.4.1v1.4.2v1.4.3
Phase Timeline For 2026-04-24
Morning: Phase 3.5 to v1.5.0
This was the cross-phase hardening release.
The goal was to close the 10 hold-ship items found by the holistic audit across the earlier DragonScale phases.
The release added the missing installer, test harness, and changelog artifacts that made the extension reproducible instead of partially documented.
Mechanism 4 remained intentionally unshipped at this point.
The spec still marked it as not implemented, and /autoresearch was unchanged.
The release also synchronized plugin and marketplace version strings to 1.5.0.
Afternoon: Phase 3.6 to v1.5.1
This was a targeted hardening point release.
The work did not expand scope.
It corrected five issues that mattered for correctness, consistency, or security:
- tiling report path confinement
- rollout baseline date
- AGENTS skill-table and compatibility wording
- wiki-ingest wording about immutable
.raw/versus maintained manifest - install guide version drift
The result was a smaller, cleaner release state before Mechanism 4 moved from proposal to shipped code.
Late: Phase 4 to v1.6.0
This was the feature release that shipped boundary-first autoresearch as DragonScale Mechanism 4.
The new scorer computes frontier candidates from the wikilink graph and exposes them when /autoresearch is invoked without a topic in a DragonScale-enabled vault.
The mode remained opt-in and was labeled as agenda control throughout the implementation and documentation.
Versions were then synced to 1.6.0 in plugin.json and marketplace.json.
What Shipped In v1.5.0
Added
skills/wiki-fold/as the shipped opt-in fold operator for Mechanism 1. The changelog describes it as extractive and structurally idempotent, with dry-run by default and explicit commit mode.scripts/allocate-address.shand theaddress: c-NNNNNNconvention for Mechanism 2. The allocator is flock-guarded and supports re-ingest idempotency through.raw/.manifest.json address_map.scripts/tiling-check.pyfor Mechanism 3. The checker uses localnomic-embed-textthrough ollama and exposes conservative seeded thresholds for duplicate-page review.wiki/concepts/DragonScale Memory.mdas the full design spec for the extension at v0.3 during this release.bin/setup-dragonscale.shas the idempotent DragonScale installer.- a reproducible
tests/suite for allocator and tiling checks, runnable throughmake test Makefiledeveloper targets for testing, setup, and cleanupCHANGELOG.mdas the first explicit release ledger for this branch of work
Changed
hooks/hooks.jsonstages.vault-meta/in addition towiki/and.raw/, so DragonScale runtime state is captured by the auto-commit hookskills/wiki-ingest/SKILL.mdandskills/wiki-lint/SKILL.mdgained opt-in DragonScale sections behind feature detection, while preserving default behavior for vaults that have not adopted DragonScaleagents/wiki-ingest.mdadded the single-writer rule for address assignmentagents/wiki-lint.mddocumented Address Validation and Semantic Tiling checks- stale
allowed-toolsfrontmatter was removed fromwiki-ingestandwiki-lintto match the kepano-stylenameplusdescriptionconvention for those files - version strings were synced across plugin metadata and documentation
Security
scripts/tiling-check.py defaults OLLAMA_URL to localhost only.
Remote endpoints require the --allow-remote-ollama flag.
Symlinks and vault-root escapes are rejected before any read.
Explicitly Not In v1.5.0
Mechanism 4 was still a future proposal in this release.
The changelog states that boundary-first autoresearch did not ship in v1.5.0 and that skills/autoresearch/SKILL.md was unchanged.
That matters because the same day later reversed this state in v1.6.0.
What Shipped In v1.5.1
v1.5.1 was intentionally narrow.
It fixed five concrete issues and did not introduce a new mechanism.
Fixed
scripts/tiling-check.py: the--report PATHflag is now resolved againstVAULT_ROOTand rejected if it escapes, preventing accidental or hostile writes outside the vault.vault-meta/legacy-pages.txt: rollout baseline corrected from2026-04-24to2026-04-23, which matches the earliest addressed page in the seed vaultAGENTS.md:wiki-foldadded to the skills table, and the blanket statement about all skills using onlynameanddescriptionwas narrowed to newer skills onlyskills/wiki-ingest/SKILL.md: clarified the difference between immutable user-dropped source documents in.raw/and the maintained.raw/.manifest.jsondocs/install-guide.md: version updated from1.2.0to1.5.0, with a DragonScale optional-install callout
Why v1.5.1 Existed
The log entry describes this as pre-Phase-4 hardening.
That is the right framing.
It reduced drift across docs, setup state, and security behavior before the Mechanism 4 rollout.
What Shipped In v1.6.0
Added
- boundary-first autoresearch as DragonScale Mechanism 4, still opt-in
scripts/boundary-score.py, which computes(out_degree - in_degree) * recency_weightover the wikilink graph/autoresearchwithout a topic now offers the top five frontier pages as candidate research targets when DragonScale is presenttests/test_boundary_score.pywith 35 unit tests covering parsing, recency weight, wikilink extraction, graph construction, scoring, and CLI behaviormake test-boundary, integrated intomake test
Changed
skills/autoresearch/SKILL.mdgained a Topic Selection section with explicit, boundary-first, and user-ask pathscommands/autoresearch.mddocuments no-topic usage for the two relevant modeswiki/concepts/DragonScale Memory.mdflipped Mechanism 4 from not implemented to shipped, added the exact scoring formula, and bumped the spec to v0.4- version metadata was synced to
1.6.0across plugin metadata
Scope And Behavior
The log entry is more detailed than the changelog and records the operating constraints clearly:
- the mode is opt-in
- the mode is labeled as agenda control
- helper failure falls back to asking the user
- self-loops, unresolved targets, meta-targets, symlinks, and vault escapes are excluded
- code-fence parsing handles both backticks and tildes with length-aware closure rules
- stale pages approach zero recency weight instead of receiving a floor
Why v1.6.0 Matters
This is the release that completed the originally proposed four-part DragonScale design in shipped form.
It also changed /autoresearch from topic-only operation to a dual-mode flow that can surface candidate frontiers while still keeping user choice explicit.
DragonScale Mechanisms: Opt-In Status
All four mechanisms are opt-in.
No mechanism is always-on for base vault adopters.
- Fold operator (Mechanism 1). Shipped as
skills/wiki-fold/. Dry-run verified. No fold committed in this vault. - Deterministic page addresses (Mechanism 2). Shipped via
scripts/allocate-address.shandaddress: c-NNNNNN. Feature-detected by ingest and lint flows. - Semantic tiling lint (Mechanism 3). Shipped via
scripts/tiling-check.py. Uses local ollama embedding flow and remains optional. - Boundary-first autoresearch (Mechanism 4). Shipped in v1.6.0 via
scripts/boundary-score.pyand no-topic/autoresearchcandidate selection.
Verified New Files Mentioned In This Session
The following files were explicitly requested for verification and do exist in the repository:
scripts/boundary-score.py: yes. New Mechanism 4 scorer in v1.6.0.tests/test_boundary_score.py: yes. New Mechanism 4 unit tests in v1.6.0.bin/setup-dragonscale.sh: yes. New opt-in installer in v1.5.0.CHANGELOG.md: yes. Created in v1.5.0.Makefile: yes. Created in v1.5.0 and later extended in v1.6.0.
Additional new files recorded in the 2026-04-24 log for Phase 3.5 also include:
tests/test_allocate_address.shtests/test_tiling_check.py
Testing And Validation Notes
The release log gives exact validation points that are worth preserving here.
For v1.5.0:
make testran 12 shell assertions for the allocatormake testran 18 Python assertions for tiling-check- no ollama dependency was required for those core tests
For v1.6.0:
tests/test_boundary_score.pyadded 35 unit testsmake test-boundarywas added and folded intomake test
The session also records adversarial review rounds for each phase:
- Phase 3 reached final verdict
10/10 accept - Phase 3.5 recorded
5/5 accepton the doc and agent fixes plus10/10 accepton the final holistic audit pass - Phase 4 reached pass after three adversarial rounds
Those review outcomes explain why the day was split into a hardening release, a point release, and then the final feature release.
Git State And Release State
Version State
Local metadata was bumped to 1.5.0, then 1.5.1, then 1.6.0 across the release cycle.
The user explicitly noted that v1.6.0 shipped locally and that no release tag exists for it.
Current repo checks support that statement.
Tag State
git tag returns:
v1.1v1.4.0v1.4.1v1.4.2v1.4.3
There is no local tag for v1.5.0, v1.5.1, or v1.6.0.
Push State
The 2026-04-24 log entries repeatedly state No push or no push.
This release session remained local.
There was no push to origin/main.
DragonScale Commit Range
The earliest DragonScale-labeled commit in repository history is:
16d9923feat: add flock-guarded address allocator for DragonScale Mechanism 2
The latest commit in the release-phase DragonScale range before later wiki auto-commits is:
09399aechore: bump to v1.6.0 with Phase 4 + Phase 3.6 CHANGELOG entries
For the feature endpoint specifically, the latest DragonScale mechanism commit is:
ad1a1d0feat: autoresearch integrates DragonScale Mechanism 4 (opt-in)
This page treats 16d9923 through 09399ae as the practical release-session range, because the latter is the final version-sync commit that closed the feature release.
Key Lessons
These are pulled from the wiki/hot.md Key Lessons section current at the time of this session.
- Cross-phase audits are essential. Individual phase reviews miss drift between phases.
- Opt-in feature detection (
[ -x script ] && [ -f state ]) preserves default plugin behavior for adopters and non-adopters alike. - PostToolUse hook matcher is
Write|Edit. Bash writes do not fire it. Scripts that mutate tracked state must be Bash-only to avoid side-effect commits. - Seed-vault self-consistency matters. If the spec says post-rollout pages need addresses, the concept page itself has to have one.
- Codex adversarial review rounds stop when the punch list is empty, not when the author feels done.
Session Shape Compared With v1.4
The earlier [[claude-obsidian-v1.4-release-session]] documented a broad ecosystem-response cycle that bundled research, audit response, style cleanup, security history rewrite, and a plugin install hotfix.
This 2026-04-24 session was narrower and more implementation-focused.
The main pattern was:
- complete the missing hardening work for existing DragonScale mechanisms
- correct the remaining drift with a point release
- then ship the previously deferred fourth mechanism
That sequencing was justified by the log and changelog.
Mechanism 4 was not simply appended to an unstable tree.
It was delayed until the earlier mechanism set had been hardened and the docs aligned.
What This Session Did Not Do
It did not create release tags for the three versions shipped that day.
It did not push any of the DragonScale release work to origin/main.
It did not make DragonScale mandatory for users who only want the base wiki plugin.
It did not change the fact that all DragonScale mechanisms remain feature-detected and opt-in.
Canonical Release Narrative
If this day needs to be summarized in one paragraph later, the clean version is this:
Morning v1.5.0 made DragonScale reproducible and internally consistent. Afternoon v1.5.1 cleaned up the remaining hardening issues. Late v1.6.0 shipped the previously deferred boundary-first autoresearch mechanism, completing the four-part DragonScale extension without changing the plugin's opt-in default posture.
Verified Facts Worth Reusing
CHANGELOG.mdcontains explicit entries for[1.5.0],[1.5.1], and[1.6.0]wiki/log.mdcontains same-day entries for Phase 3.5, Phase 3.6, and Phase 4plugin.jsonandmarketplace.jsonare at1.6.0- the DragonScale installer exists as
bin/setup-dragonscale.sh - the Mechanism 4 scorer exists as
scripts/boundary-score.py - the Mechanism 4 tests exist as
tests/test_boundary_score.py MakefileandCHANGELOG.mdexist- only pre-DragonScale tags are present locally
- there was no push to
origin/main
Closing Note
The important distinction for future sessions is that v1.5.0, v1.5.1, and v1.6.0 are real local release states with changelog and log backing, but they are not git-tagged releases in this repository snapshot.