349 lines
15 KiB
Markdown
349 lines
15 KiB
Markdown
---
|
|
type: meta
|
|
title: "2026-04-24 v1.6.0 Release Session"
|
|
created: 2026-04-24
|
|
updated: 2026-04-24
|
|
tags:
|
|
- meta
|
|
- session
|
|
- release
|
|
- dragonscale
|
|
status: evergreen
|
|
related:
|
|
- "[[log]]"
|
|
- "[[hot]]"
|
|
- "[[DragonScale Memory]]"
|
|
- "[[claude-obsidian-v1.4-release-session]]"
|
|
---
|
|
|
|
# 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](../../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.md` entries `[1.5.0]`, `[1.5.1]`, and `[1.6.0]`
|
|
- `wiki/log.md` entries 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.1`
|
|
- `v1.4.0`
|
|
- `v1.4.1`
|
|
- `v1.4.2`
|
|
- `v1.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.sh` and the `address: c-NNNNNN` convention for Mechanism 2. The allocator is flock-guarded and supports re-ingest idempotency through `.raw/.manifest.json address_map`.
|
|
- `scripts/tiling-check.py` for Mechanism 3. The checker uses local `nomic-embed-text` through ollama and exposes conservative seeded thresholds for duplicate-page review.
|
|
- `wiki/concepts/DragonScale Memory.md` as the full design spec for the extension at v0.3 during this release.
|
|
- `bin/setup-dragonscale.sh` as the idempotent DragonScale installer.
|
|
- a reproducible `tests/` suite for allocator and tiling checks, runnable through `make test`
|
|
- `Makefile` developer targets for testing, setup, and cleanup
|
|
- `CHANGELOG.md` as the first explicit release ledger for this branch of work
|
|
|
|
### Changed
|
|
|
|
- `hooks/hooks.json` stages `.vault-meta/` in addition to `wiki/` and `.raw/`, so DragonScale runtime state is captured by the auto-commit hook
|
|
- `skills/wiki-ingest/SKILL.md` and `skills/wiki-lint/SKILL.md` gained opt-in DragonScale sections behind feature detection, while preserving default behavior for vaults that have not adopted DragonScale
|
|
- `agents/wiki-ingest.md` added the single-writer rule for address assignment
|
|
- `agents/wiki-lint.md` documented Address Validation and Semantic Tiling checks
|
|
- stale `allowed-tools` frontmatter was removed from `wiki-ingest` and `wiki-lint` to match the kepano-style `name` plus `description` convention 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 PATH` flag is now resolved against `VAULT_ROOT` and rejected if it escapes, preventing accidental or hostile writes outside the vault
|
|
- `.vault-meta/legacy-pages.txt`: rollout baseline corrected from `2026-04-24` to `2026-04-23`, which matches the earliest addressed page in the seed vault
|
|
- `AGENTS.md`: `wiki-fold` added to the skills table, and the blanket statement about all skills using only `name` and `description` was narrowed to newer skills only
|
|
- `skills/wiki-ingest/SKILL.md`: clarified the difference between immutable user-dropped source documents in `.raw/` and the maintained `.raw/.manifest.json`
|
|
- `docs/install-guide.md`: version updated from `1.2.0` to `1.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_weight` over the wikilink graph
|
|
- `/autoresearch` without a topic now offers the top five frontier pages as candidate research targets when DragonScale is present
|
|
- `tests/test_boundary_score.py` with 35 unit tests covering parsing, recency weight, wikilink extraction, graph construction, scoring, and CLI behavior
|
|
- `make test-boundary`, integrated into `make test`
|
|
|
|
### Changed
|
|
|
|
- `skills/autoresearch/SKILL.md` gained a Topic Selection section with explicit, boundary-first, and user-ask paths
|
|
- `commands/autoresearch.md` documents no-topic usage for the two relevant modes
|
|
- `wiki/concepts/DragonScale Memory.md` flipped 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.0` across 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.
|
|
|
|
1. Fold operator (Mechanism 1). Shipped as `skills/wiki-fold/`. Dry-run verified. No fold committed in this vault.
|
|
2. Deterministic page addresses (Mechanism 2). Shipped via `scripts/allocate-address.sh` and `address: c-NNNNNN`. Feature-detected by ingest and lint flows.
|
|
3. Semantic tiling lint (Mechanism 3). Shipped via `scripts/tiling-check.py`. Uses local ollama embedding flow and remains optional.
|
|
4. Boundary-first autoresearch (Mechanism 4). Shipped in v1.6.0 via `scripts/boundary-score.py` and no-topic `/autoresearch` candidate 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.sh`
|
|
- `tests/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 test` ran 12 shell assertions for the allocator
|
|
- `make test` ran 18 Python assertions for tiling-check
|
|
- no ollama dependency was required for those core tests
|
|
|
|
For v1.6.0:
|
|
|
|
- `tests/test_boundary_score.py` added 35 unit tests
|
|
- `make test-boundary` was added and folded into `make 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 accept` on the doc and agent fixes plus `10/10 accept` on 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.1`
|
|
- `v1.4.0`
|
|
- `v1.4.1`
|
|
- `v1.4.2`
|
|
- `v1.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:
|
|
|
|
- `16d9923` `feat: add flock-guarded address allocator for DragonScale Mechanism 2`
|
|
|
|
The latest commit in the release-phase DragonScale range before later wiki auto-commits is:
|
|
|
|
- `09399ae` `chore: bump to v1.6.0 with Phase 4 + Phase 3.6 CHANGELOG entries`
|
|
|
|
For the feature endpoint specifically, the latest DragonScale mechanism commit is:
|
|
|
|
- `ad1a1d0` `feat: 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.
|
|
|
|
1. Cross-phase audits are essential. Individual phase reviews miss drift between phases.
|
|
2. Opt-in feature detection (`[ -x script ] && [ -f state ]`) preserves default plugin behavior for adopters and non-adopters alike.
|
|
3. 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.
|
|
4. Seed-vault self-consistency matters. If the spec says post-rollout pages need addresses, the concept page itself has to have one.
|
|
5. 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.md` contains explicit entries for `[1.5.0]`, `[1.5.1]`, and `[1.6.0]`
|
|
- `wiki/log.md` contains same-day entries for Phase 3.5, Phase 3.6, and Phase 4
|
|
- `plugin.json` and `marketplace.json` are at `1.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`
|
|
- `Makefile` and `CHANGELOG.md` exist
|
|
- 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.
|