add claude-obsidian
Tests / Hermetic test suite (push) Has been cancelled
Tests / Skill frontmatter validation (push) Has been cancelled

This commit is contained in:
김경종
2026-05-28 10:57:16 +09:00
parent 1b07531a45
commit 72dad72703
205 changed files with 41703 additions and 80 deletions
+344
View File
@@ -0,0 +1,344 @@
> DragonScale is now a four-mechanism, opt-in memory layer for LLM wiki vaults.
![DragonScale Memory mechanism overview](https://raw.githubusercontent.com/AgriciDaniel/claude-obsidian/main/wiki/meta/dragonscale-mechanism-overview.png)
## TL;DR
- Shipped: DragonScale now has fold rollups, deterministic page addresses, semantic tiling lint, and boundary-first autoresearch.
- Gated on: `bash bin/setup-dragonscale.sh`, plus local dependencies per mechanism.
- Did not ship: fold-of-folds, calibrated tiling thresholds, hosted mode, or multi-vault rollup.
## Same-day release sequence
The plugin version is `1.6.0` and the annotated tag `v1.6.0` points at the release commit on `main`.
The narrative below includes `1.5.0`, `1.5.1`, and `1.6.0` because 2026-04-24 bundled three local release states into one cycle.
`1.5.0` was Phase 3.5.
It hardened the DragonScale base.
It added the installer, test harness, changelog, Makefile targets, and opt-in wiring for the first three mechanisms.
It also synced plugin metadata to `1.5.0`.
`1.5.1` was Phase 3.6.
It fixed five narrow issues before Phase 4.
Those fixes covered tiling report path confinement, rollout baseline date, AGENTS wording, `.raw/` manifest wording, and install-guide version drift.
`1.6.0` was Phase 4.
It shipped Mechanism 4: boundary-first autoresearch.
It added `scripts/boundary-score.py`, wired no-topic `/autoresearch` into frontier suggestions, added boundary-score tests, and bumped the DragonScale spec to v0.4.
## Four mechanisms
<!-- overview diagram rendered at the top of the page. -->
### 1. Fold operator
What:
extractive rollups of `wiki/log.md` entries into fold pages under `wiki/folds/`.
Invoke:
ask `fold the log, dry-run k=3`, then `fold the log, commit k=3` if the output is right.
Skip:
skip when the log has no coherent batch, or when you want deletion-based compaction.
Folds summarize.
They do not garbage collect.
Status:
shipped in `1.5.0`.
First real run:
`wiki/folds/fold-k3-from-2026-04-23-to-2026-04-24-n8.md`.
Observed output:
115 lines.
8 children.
Flat extractive fold.
### 2. Deterministic page addresses
What:
stable `address: c-NNNNNN` frontmatter for new non-meta wiki pages.
Invoke:
run `./scripts/allocate-address.sh` directly, or let `wiki-ingest` assign addresses after DragonScale setup.
Skip:
skip when you do not need stable page IDs, or when more than one writer may assign addresses at the same time.
Status:
shipped in `1.5.0`.
Format:
`c-000042`.
Important limit:
this is a creation-order counter.
It is not a content hash.
Validation run:
counter advanced from 2 to 3.
It returned `c-000002`.
The unassigned reservation gap is acceptable under the spec.
### 3. Semantic tiling lint
What:
embedding-based duplicate-page detection for the wiki.
Invoke:
run `python3 ./scripts/tiling-check.py --peek` for readiness, or `python3 ./scripts/tiling-check.py --report wiki/meta/tiling-report-YYYY-MM-DD.md` for a saved report.
Skip:
skip when `ollama` or `nomic-embed-text` is unavailable, or when uncalibrated review bands would create more noise than signal.
Status:
shipped in `1.5.0`.
Default model:
local `nomic-embed-text` through `ollama`.
Default bands:
`>= 0.90` error.
`0.80` to `0.90` review.
Below `0.80` pass.
Important limit:
the defaults are seed values.
They are not calibrated to this vault.
First full report:
`wiki/meta/tiling-report-2026-04-24.md`.
### 4. Boundary-first autoresearch
What:
frontier scoring for wiki pages, used as candidate selection for no-topic `/autoresearch`.
Invoke:
run `/autoresearch` with no topic in a DragonScale-enabled vault, or run `python3 ./scripts/boundary-score.py --json --top 5`.
Skip:
skip when you want explicit topic control only, or when you want DragonScale limited to pure memory operations.
Status:
shipped in `1.6.0`.
Formula:
`boundary_score(p) = (out_degree(p) - in_degree(p)) * exp(-days_since_updated / 30)`.
What it does:
finds pages that point outward, receive few inbound links, and are still recent enough to be useful.
What it is not:
it is not pure memory.
It is agenda control.
The user still chooses the topic.
First run artifact:
`wiki/meta/boundary-frontier-2026-04-24.md`.
Top frontier facts:
22 scoreable pages.
7 positive-score pages reported.
Top score was `4.693`.
`DragonScale Memory` scored `4.000`.
## The dragon curve, briefly
The Heighway dragon is built by paperfolding recursion.
Each construction step folds a turn sequence into a larger self-similar sequence.
The turn sequence is the regular paperfolding sequence, OEIS A014577.
See [Dragon curve](https://en.wikipedia.org/wiki/Dragon_curve).
Its boundary has fractal dimension about `1.5236`.
That number is useful here as orientation, not as proof.
It says the boundary is not a simple line and not a filled plane.
It is structured frontier.
That makes it a good analogy for a memory layer.
Recursive structure suggests hierarchical rollup.
Self-similar boundary suggests frontier-first agenda.
But this is analogy, not derivation.
DragonScale does not prove optimal memory behavior from curve geometry.
## Enablement
Run:
```bash
bash bin/setup-dragonscale.sh
```
Prereqs:
base vault setup first, `flock` for allocator and tiling locks, `python3` for Mechanisms 3 and 4, and local `ollama` plus `nomic-embed-text` for Mechanism 3.
Guide:
[docs/dragonscale-guide.md](../dragonscale-guide.md).
## Validation
![Six-test validation flow](https://raw.githubusercontent.com/AgriciDaniel/claude-obsidian/main/wiki/meta/dragonscale-6-test-flow.png)
Validation date:
2026-04-24.
Source:
`wiki/log.md`, entry `DragonScale end-to-end validation pass (Teams, 6 tests)`.
Result:
the six-test menu passed.
`make test` stayed green throughout.
T0:
pulled `nomic-embed-text` for local embeddings.
Observed:
274 MB.
15 seconds wall time.
T1:
ran Mechanism 1 dry-run with `k=3`.
Observed:
dry-run OK.
8 children.
No em dashes in generated fold content.
T2:
ran Mechanism 2 real allocation.
Observed:
counter advanced from 2 to 3.
Returned `c-000002`.
The address was an unassigned reservation.
Gap accepted by spec.
T3:
ran Mechanism 3 full tiling with model present.
Observed:
41 pages scanned.
21 pages embedded.
20 pages skipped.
0 errors at `>= 0.90`.
15 review pairs in `0.80` to `0.90`.
Top review pair:
`0.8822` for `Compounding Knowledge` and `LLM Wiki Pattern`.
Interpretation:
legitimate semantic neighbor.
Not an automatic merge.
Report:
`wiki/meta/tiling-report-2026-04-24.md`.
T4:
ran Mechanism 1 commit.
Observed:
first real fold committed.
115 lines.
8 children.
Flat extractive fold.
Fold:
`wiki/folds/fold-k3-from-2026-04-23-to-2026-04-24-n8.md`.
Why it matters:
it flips the old status from dry-run only to one committed fold in this vault.
Closeout test status:
`make test` passed.
Closeout counts:
12 shell assertions for address allocation.
18 Python assertions for tiling.
44 Python assertions for boundary scoring.
Zero `ollama` dependency.
T6:
ran Mechanism 4 no-topic autoresearch.
Observed:
selected `How does the LLM Wiki pattern work?`.
Score `1.7022`.
It was candidate number 3 after skipping the top source page and top self-reference.
Fetches:
6 web fetches.
Inputs included:
Karpathy gist.
RAG paper `arXiv:2005.11401`.
MemGPT paper `arXiv:2310.08560`.
Obsidian docs.
Output:
3 new concept pages filed.
Each included Primary Sources.
New concept pages:
- `wiki/concepts/Persistent Wiki Artifact.md`
- `wiki/concepts/Source-First Synthesis.md`
- `wiki/concepts/Query-Time Retrieval.md`
Integration:
the new concepts were added to `wiki/index.md` and `wiki/concepts/_index.md`.
They extend `How does the LLM Wiki pattern work?`.
They cross-reference `LLM Wiki Pattern`.
![Boundary-first autoresearch: frontier picked, pages filed](https://raw.githubusercontent.com/AgriciDaniel/claude-obsidian/main/wiki/meta/dragonscale-frontier-graph.png)
## What is not in v1.6.0
- No fold-of-folds.
- No hierarchical level stacking beyond one flat committed fold.
- No automatic deletion or compaction of child pages.
- No calibrated M3 thresholds.
- No literature-backed M3 bands for this specific vault.
- No automatic merging from tiling results.
- No pure-memory claim for M4.
- No hidden topic choice in M4.
- No hosted or managed mode.
- No multi-vault fold rollup.
- No multi-writer address-assignment guarantee.
- No alias-aware full Obsidian wikilink resolver in boundary scoring.
- No persistent boundary-score cache.
- No automatic autoresearch trigger.
## Upgrade from v1.4.x
This is non-breaking for base users.
Upgrade path:
1. Pull `main`.
2. Reinstall as a plugin if your agent setup requires it.
3. Keep using the normal v1.4.x wiki workflow if you do not want DragonScale.
4. Opt into DragonScale only when ready:
```bash
bash bin/setup-dragonscale.sh
```
If you do not opt in, nothing changes from your v1.4.x workflow.
DragonScale is feature-detected.
`wiki-ingest`, `wiki-lint`, and `/autoresearch` fall back when the setup state or helper dependencies are absent.
## Attribution
Diagrams in this release note are original SVGs under the repo license (MIT).
The dragon curve and paperfolding references are text-only. For images and construction history, see the Wikipedia article linked above.
Fonts used in the SVGs: Space Grotesk (SIL Open Font License), with system-ui fallback.
## Credits
- Karpathy LLM Wiki pattern.
- Heighway paperfolding and the dragon curve analogy.
- Codex sub-agent delegation for the release validation and review loop.