Files
MultiPhysicsVault/wiki/meta/2026-04-24-v1.6.0-release-session.md
T
김경종 72dad72703
Tests / Hermetic test suite (push) Has been cancelled
Tests / Skill frontmatter validation (push) Has been cancelled
add claude-obsidian
2026-05-28 10:57:16 +09:00

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.