mirror of
https://github.com/ruvnet/RuVector.git
synced 2026-08-21 14:44:03 +00:00
Merge pull request #857 from ruvnet/fix/pir-wp0a-adr-hygiene
docs(adr): numbering hygiene — freeze duplicates, canonical index + collision check (PIR WP0a)
This commit is contained in:
commit
db6199e278
3 changed files with 857 additions and 0 deletions
83
docs/adr/ADR-316-adr-numbering-hygiene.md
Normal file
83
docs/adr/ADR-316-adr-numbering-hygiene.md
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
# ADR-316: ADR Numbering Hygiene — Frozen Duplicates, Canonical Counter, Collision Gate
|
||||
|
||||
**Status**: Proposed
|
||||
**Date**: 2026-08-19
|
||||
**Relates to**: PIR program issue #845 (WP0a), epic #837
|
||||
**Supersedes**: the "renumber every duplicate" framing in issue #845's original scope
|
||||
|
||||
## Context
|
||||
|
||||
`docs/adr/` accumulated duplicate ADR numbers because numbers were allocated
|
||||
by multiple concurrent authors (humans, agents, nightly research runs) with no
|
||||
single counter. A full audit of `origin/main` (2026-08-19) verified:
|
||||
|
||||
- **336 ADR files** total: 289 on the plain `ADR-NNN` counter, 47 in
|
||||
namespaced families (`ADR-CE-*`, `ADR-DB-*`, `ADR-QE-*`, `ADR-TTS-*`),
|
||||
which are separate numbering spaces and have **no** internal duplicates.
|
||||
- Highest allocated plain number at audit time: **ADR-304** (ADR-305–315 were
|
||||
then claimed on the `feat/pir-adrs` branch and have since merged via
|
||||
PR #847 — hence this ADR is 316).
|
||||
- **27 plain numbers are duplicated**, spanning **61 files**:
|
||||
- ×5: **ADR-272**
|
||||
- ×3: ADR-264, ADR-252, ADR-194, ADR-144
|
||||
- ×2: ADR-268, 266, 260, 258, 256, 254, 143, 139, 138, 137, 136, 135,
|
||||
134, 133, 132, 117, 096, 095, 094, 093, 091, 090
|
||||
|
||||
This corrects two figures in issue #845's body: the "~15+" duplicate estimate
|
||||
(verified: 27), and "ADR-040 ×3" — **ADR-040 is not a collision**. The
|
||||
`ADR-040` / `ADR-040a` / `ADR-040b` suffix pattern is an intentional sub-ADR
|
||||
convention (a parent decision with lettered companion documents) and is
|
||||
preserved as a distinct, valid numbering form.
|
||||
|
||||
## Decision
|
||||
|
||||
1. **Duplicate numbers are frozen historical artifacts. No existing ADR file
|
||||
is renamed or renumbered.** These numbers appear in commit messages, PR
|
||||
bodies, crate docs, code comments, research documents, and external links
|
||||
(the shared brain, other repos' citations of `ruvector` ADRs). Renaming
|
||||
breaks every external reference silently, and redirect stubs cannot cover
|
||||
references we do not control. The collision damage is capped and known;
|
||||
renumbering damage would be open-ended.
|
||||
|
||||
2. **Disambiguation is by slug, not by number.** From now on, any citation of
|
||||
a duplicated number MUST use the form **`ADR-NNN (slug)`**, where the slug
|
||||
is the filename remainder, e.g. `ADR-134 (witness-schema-log-format)` vs.
|
||||
`ADR-134 (ruvector-claude-code-deep-integration)`. Citations of
|
||||
non-duplicated numbers may remain plain `ADR-NNN`.
|
||||
|
||||
3. **New ADRs are allocated from a single canonical counter.** The counter is
|
||||
the plain `ADR-NNN` sequence; the next free number is always
|
||||
max(allocated) + 1. Sub-ADRs (`NNNa`, `NNNb`, …) remain valid as lettered
|
||||
companions to an existing parent ADR and do not consume counter numbers.
|
||||
Namespaced families (`ADR-CE-*` etc.) keep their own internal sequences.
|
||||
"Allocated" includes numbers claimed on open ADR-authoring branches —
|
||||
check open PRs before claiming, as this ADR did with ADR-305–315.
|
||||
|
||||
4. **The generated index is the counter's source of truth.**
|
||||
`docs/adr/INDEX.md` — generated by `node scripts/adr-index.mjs` — lists
|
||||
every ADR file with its number, title, path, date, status, and duplicate
|
||||
flag, and states the **next available number** at the top. Authors and
|
||||
number-allocating tooling (e.g. `ruflo-adr:adr-create`) MUST read the next
|
||||
number from the regenerated index, not from a stale cache or a directory
|
||||
glob. Regenerate the index in the same PR that adds an ADR.
|
||||
|
||||
5. **CI gates new collisions.** `node scripts/adr-index.mjs --check` exits
|
||||
non-zero if `docs/adr/` contains a duplicate plain number that is not in
|
||||
the frozen historical list above (or if a frozen number's file count
|
||||
grows). The frozen list is hardcoded in the script and MUST NOT be
|
||||
extended — a check failure means the new file must be renumbered before
|
||||
merge, never that the list should grow.
|
||||
|
||||
## Consequences
|
||||
|
||||
- Issue #845's acceptance criteria are re-scoped: "zero duplicate numbers" is
|
||||
replaced by "zero *unfrozen* duplicate numbers, enforced by CI"; the
|
||||
renumber/reference-update/redirect-stub items become moot; the policy,
|
||||
index, CI-check, and allocate-from-true-max items are satisfied here.
|
||||
- Load-bearing ambiguous citations (ADR-134, ADR-256, ADR-266 called out in
|
||||
#845) are resolved at the citation site by the `ADR-NNN (slug)` form; PIR
|
||||
documents should adopt it as they are touched, without a mass rewrite.
|
||||
- The 4-digit-namespace assumption in the filename grammar
|
||||
(`ADR-(?:[A-Z]{2,4}-)?NNN[a-z]?-slug.md`) is now normative; files that do
|
||||
not parse are ignored by the index and should be renamed to conform when
|
||||
next edited.
|
||||
364
docs/adr/INDEX.md
Normal file
364
docs/adr/INDEX.md
Normal file
|
|
@ -0,0 +1,364 @@
|
|||
# ADR Index
|
||||
|
||||
**Next available ADR number: 317**
|
||||
|
||||
> Generated by `node scripts/adr-index.mjs` — do not edit by hand.
|
||||
> This file is the canonical allocation counter for new ADR numbers
|
||||
> (policy: `ADR-316`). Duplicate numbers listed below are frozen
|
||||
> historical artifacts and are cited as `ADR-NNN (slug)`.
|
||||
> CI gate: `node scripts/adr-index.mjs --check`.
|
||||
|
||||
- ADR files indexed: **348** (301 on the canonical counter, 47 in namespaced families)
|
||||
- Highest allocated number: **ADR-316**
|
||||
- Frozen duplicate numbers: **27** (spanning 61 files)
|
||||
|
||||
| Number | Title | File | Last commit | Status | Duplicate |
|
||||
|---|---|---|---|---|---|
|
||||
| ADR-001 | ADR-001: Ruvector Core Architecture | [`ADR-001-ruvector-core-architecture.md`](./ADR-001-ruvector-core-architecture.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-002 | ADR-002: RuvLLM Integration with Ruvector | [`ADR-002-ruvllm-integration.md`](./ADR-002-ruvllm-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-003 | ADR-003: SIMD Optimization Strategy for Ruvector and RuvLLM | [`ADR-003-simd-optimization-strategy.md`](./ADR-003-simd-optimization-strategy.md) | 2026-08-13 | ✅ Implemented (v2.1.1) | |
|
||||
| ADR-004 | ADR-004: KV Cache Management Strategy for RuvLLM | [`ADR-004-kv-cache-management.md`](./ADR-004-kv-cache-management.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-005 | ADR-005: WASM Runtime Integration | [`ADR-005-wasm-runtime-integration.md`](./ADR-005-wasm-runtime-integration.md) | 2026-08-13 | | |
|
||||
| ADR-006 | ADR-006: Unified Memory Pool and Paging Strategy | [`ADR-006-memory-management.md`](./ADR-006-memory-management.md) | 2026-08-13 | | |
|
||||
| ADR-007 | ADR-007: Security Review & Technical Debt Remediation | [`ADR-007-security-review-technical-debt.md`](./ADR-007-security-review-technical-debt.md) | 2026-08-13 | Active | |
|
||||
| ADR-008 | ADR-008: mistral-rs Integration for Production-Scale LLM Serving | [`ADR-008-mistral-rs-integration.md`](./ADR-008-mistral-rs-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-009 | ADR-009: Structured Output / JSON Mode for Reliable Agentic Workflows | [`ADR-009-structured-output.md`](./ADR-009-structured-output.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-010 | ADR-010: Function Calling / Tool Use in RuvLLM | [`ADR-010-function-calling.md`](./ADR-010-function-calling.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-011 | ADR-011: Prefix Caching for 10x Faster RAG and Chat Applications | [`ADR-011-prefix-caching.md`](./ADR-011-prefix-caching.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-012 | ADR-012: Security Remediation and Hardening | [`ADR-012-security-remediation.md`](./ADR-012-security-remediation.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-013 | ADR-013: HuggingFace Model Publishing Strategy | [`ADR-013-huggingface-publishing.md`](./ADR-013-huggingface-publishing.md) | 2026-08-13 | **Accepted** - 2026-01-20 | |
|
||||
| ADR-014 | ADR-014: Coherence Engine Architecture | [`ADR-014-coherence-engine.md`](./ADR-014-coherence-engine.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-015 | ADR-015: Coherence-Gated Transformer (Sheaf Attention) | [`ADR-015-coherence-gated-transformer.md`](./ADR-015-coherence-gated-transformer.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-016 | ADR-016: Delta-Behavior System - Domain-Driven Design Architecture | [`ADR-016-delta-behavior-ddd-architecture.md`](./ADR-016-delta-behavior-ddd-architecture.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-017 | ADR-017: Temporal Tensor Compression with Tiered Quantization | [`ADR-017-temporal-tensor-compression.md`](./ADR-017-temporal-tensor-compression.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-018 | ADR-018: Block-Based Storage Engine Architecture for the Temporal Tensor Store | [`temporal-tensor-store/ADR-018-block-based-storage-engine.md`](./temporal-tensor-store/ADR-018-block-based-storage-engine.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-019 | ADR-019: Tiered Quantization Formats for Temporal Tensor Store | [`temporal-tensor-store/ADR-019-tiered-quantization-formats.md`](./temporal-tensor-store/ADR-019-tiered-quantization-formats.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-020 | ADR-020: Temporal Scoring and Tier Migration Algorithm | [`temporal-tensor-store/ADR-020-temporal-scoring-tier-migration.md`](./temporal-tensor-store/ADR-020-temporal-scoring-tier-migration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-021 | ADR-021: Delta Compression and Reconstruction Policies | [`temporal-tensor-store/ADR-021-delta-compression-reconstruction.md`](./temporal-tensor-store/ADR-021-delta-compression-reconstruction.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-022 | ADR-022: WASM API Surface and Cross-Platform Strategy | [`temporal-tensor-store/ADR-022-wasm-api-cross-platform.md`](./temporal-tensor-store/ADR-022-wasm-api-cross-platform.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-023 | ADR-023: Benchmarking, Failure Modes, and Acceptance Criteria | [`temporal-tensor-store/ADR-023-benchmarking-acceptance-criteria.md`](./temporal-tensor-store/ADR-023-benchmarking-acceptance-criteria.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-024 | ADR-024: Craftsman Ultra 30b 1bit — BitNet Integration with RuvLLM | [`ADR-024-craftsman-ultra-30b-1bit-bitnet-integration.md`](./ADR-024-craftsman-ultra-30b-1bit-bitnet-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-025 | ADR-025: EXO-AI Multi-Paradigm Integration Architecture | [`ADR-025-exo-ai-multiparadigm-integration.md`](./ADR-025-exo-ai-multiparadigm-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-026 | ADR-026: Vector-Native COW Branching (RVCOW) and Real Cognitive Containers | [`ADR-026-rvcow-branching-and-real-cognitive-containers.md`](./ADR-026-rvcow-branching-and-real-cognitive-containers.md) | 2026-08-13 | | |
|
||||
| ADR-027 | ADR-027: Fix HNSW Index Segmentation Fault with Parameterized Queries | [`ADR-027-hnsw-parameterized-query-fix.md`](./ADR-027-hnsw-parameterized-query-fix.md) | 2026-08-13 | **Accepted** - 2026-01-28 | |
|
||||
| ADR-028 | ADR-028: eHealth Platform Architecture for 50M Patient Records | [`ADR-028-ehealth-platform-architecture.md`](./ADR-028-ehealth-platform-architecture.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-029 | ADR-029: RVF as Canonical Binary Format Across All RuVector Libraries | [`ADR-029-rvf-canonical-format.md`](./ADR-029-rvf-canonical-format.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-030 | ADR-030: RVF Cognitive Container -- Self-Booting Vector Files | [`ADR-030-rvf-cognitive-container.md`](./ADR-030-rvf-cognitive-container.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-031 | ADR-031: RVF Example Repository — 24 Demonstrations Across Four Categories | [`ADR-031-rvf-example-repository.md`](./ADR-031-rvf-example-repository.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-032 | ADR-032: RVF WASM Integration into npx ruvector and rvlite | [`ADR-032-rvf-wasm-integration.md`](./ADR-032-rvf-wasm-integration.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-033 | ADR-033: Progressive Indexing Hardening — Centroid Stability, Adversarial Resilience, Recall Framing, and Mandatory Signatures | [`ADR-033-progressive-indexing-hardening.md`](./ADR-033-progressive-indexing-hardening.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-034 | ADR-034: QR Cognitive Seed — A World Inside a World | [`ADR-034-qr-cognitive-seed.md`](./ADR-034-qr-cognitive-seed.md) | 2026-08-13 | Implemented | |
|
||||
| ADR-035 | ADR-035: Capability Report — Witness Bundles, Scorecards, and Governance | [`ADR-035-capability-report.md`](./ADR-035-capability-report.md) | 2026-08-13 | Implemented | |
|
||||
| ADR-036 | ADR-036: RuVector AGI Cognitive Container with Claude Code Orchestration | [`ADR-036-agi-cognitive-container.md`](./ADR-036-agi-cognitive-container.md) | 2026-08-13 | Partially Implemented | |
|
||||
| ADR-037 | ADR-037: Publishable RVF Acceptance Test | [`ADR-037-publishable-rvf-acceptance-test.md`](./ADR-037-publishable-rvf-acceptance-test.md) | 2026-08-13 | | |
|
||||
| ADR-038 | ADR-038: npx ruvector & rvlite Witness Verification Integration | [`ADR-038-npx-ruvector-rvlite-witness-integration.md`](./ADR-038-npx-ruvector-rvlite-witness-integration.md) | 2026-08-13 | | |
|
||||
| ADR-039 | ADR-039: RVF Solver WASM — Self-Learning AGI Engine Integration | [`ADR-039-rvf-solver-wasm-agi-integration.md`](./ADR-039-rvf-solver-wasm-agi-integration.md) | 2026-08-13 | | |
|
||||
| ADR-040 | ADR-040: Causal Atlas RVF Runtime — Planet Detection & Life Candidate Scoring | [`ADR-040-causal-atlas-rvf-runtime-planet-detection.md`](./ADR-040-causal-atlas-rvf-runtime-planet-detection.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-040a | ADR-040a: Causal Atlas Dashboard Specification | [`ADR-040a-planet-detection-dashboard.md`](./ADR-040a-planet-detection-dashboard.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-040b | ADR-040b: Microlensing Detection & Cross-Domain Graph-Cut Extensions | [`ADR-040b-microlensing-graphcut-extensions.md`](./ADR-040b-microlensing-graphcut-extensions.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-042 | ADR-042: Security RVF — AIDefence + TEE Hardened Cognitive Container | [`ADR-042-Security-RVF-AIDefence-TEE.md`](./ADR-042-Security-RVF-AIDefence-TEE.md) | 2026-08-13 | | |
|
||||
| ADR-043 | ADR-043: External Intelligence Providers for SONA Learning | [`ADR-043-external-intelligence-providers.md`](./ADR-043-external-intelligence-providers.md) | 2026-08-13 | | |
|
||||
| ADR-044 | ADR-044: ruvector-postgres v0.3 Extension Upgrade | [`ADR-044-ruvector-postgres-v03-extension-upgrade.md`](./ADR-044-ruvector-postgres-v03-extension-upgrade.md) | 2026-08-13 | Accepted — Implementation in progress | |
|
||||
| ADR-045 | ADR-045: Lean-Agentic Integration — Formal Verification & AI-Native Type Theory for RuVector | [`ADR-045-lean-agentic-integration.md`](./ADR-045-lean-agentic-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-046 | ADR-046: Graph Transformer Unified Architecture | [`ADR-046-graph-transformer-architecture.md`](./ADR-046-graph-transformer-architecture.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-047 | ADR-047: Proof-Gated Mutation Protocol | [`ADR-047-proof-gated-mutation-protocol.md`](./ADR-047-proof-gated-mutation-protocol.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-048 | ADR-048: Sublinear Graph Attention | [`ADR-048-sublinear-graph-attention.md`](./ADR-048-sublinear-graph-attention.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-049 | ADR-049: Verified Training Pipeline | [`ADR-049-verified-training-pipeline.md`](./ADR-049-verified-training-pipeline.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-050 | ADR-050: Graph Transformer WASM and Node.js Bindings | [`ADR-050-graph-transformer-bindings.md`](./ADR-050-graph-transformer-bindings.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-051 | ADR-051: Physics-Informed Graph Transformer Layers | [`ADR-051-physics-informed-graph-layers.md`](./ADR-051-physics-informed-graph-layers.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-052 | ADR-052: Biological Graph Transformer Layers | [`ADR-052-biological-graph-layers.md`](./ADR-052-biological-graph-layers.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-053 | ADR-053: Temporal and Causal Graph Transformer Layers | [`ADR-053-temporal-causal-graph-layers.md`](./ADR-053-temporal-causal-graph-layers.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-054 | ADR-054: Economic Graph Transformer Layers | [`ADR-054-economic-graph-layers.md`](./ADR-054-economic-graph-layers.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-055 | ADR-055: Manifold-Aware Graph Transformer Layers | [`ADR-055-manifold-graph-layers.md`](./ADR-055-manifold-graph-layers.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-056 | ADR-056: RVF Knowledge Export for Developer Onboarding | [`ADR-056-rvf-knowledge-export.md`](./ADR-056-rvf-knowledge-export.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-057 | ADR-057: Federated RVF Format for Real-Time Transfer Learning | [`ADR-057-federated-rvf-transfer-learning.md`](./ADR-057-federated-rvf-transfer-learning.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-058 | ADR-058: RVF Hash Security Hardening and Optimization | [`ADR-058-hash-security-optimization.md`](./ADR-058-hash-security-optimization.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-059 | ADR-059: Shared Brain — Google Cloud Deployment | [`ADR-059-shared-brain-google-cloud.md`](./ADR-059-shared-brain-google-cloud.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-060 | ADR-060: Shared Brain Capabilities — Federated MicroLoRA Intelligence Substrate | [`ADR-060-shared-brain-capabilities.md`](./ADR-060-shared-brain-capabilities.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-061 | ADR-061: Reasoning Kernel Architecture — Brain-Augmented Targeted Reasoning | [`ADR-061-reasoning-kernel-architecture.md`](./ADR-061-reasoning-kernel-architecture.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-062 | ADR-062: Brainpedia — Structured Knowledge Encyclopedia with Delta-Based Editing | [`ADR-062-brainpedia-architecture.md`](./ADR-062-brainpedia-architecture.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-063 | ADR-063: WASM Executable Nodes — Deterministic Compute at the Edge | [`ADR-063-wasm-executable-nodes.md`](./ADR-063-wasm-executable-nodes.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-064 | ADR-064: Pi Brain Infrastructure & Landing Page | [`ADR-064-pi-brain-infrastructure.md`](./ADR-064-pi-brain-infrastructure.md) | 2026-08-13 | Accepted, Deployed | |
|
||||
| ADR-065 | ADR-065: npm Publishing Strategy | [`ADR-065-npm-publishing-strategy.md`](./ADR-065-npm-publishing-strategy.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-066 | ADR-066: SSE MCP Transport | [`ADR-066-sse-mcp-transport.md`](./ADR-066-sse-mcp-transport.md) | 2026-08-13 | Accepted, Deployed — Updated 2026-04-02: SSE moved to dedicated subdomain `mcp.p | |
|
||||
| ADR-067 | ADR-067: MCP Gate Permit System | [`ADR-067-mcp-gate-permit-system.md`](./ADR-067-mcp-gate-permit-system.md) | 2026-08-13 | Accepted, Implemented | |
|
||||
| ADR-068 | ADR-068: Domain Expansion Transfer Learning | [`ADR-068-domain-expansion-transfer-learning.md`](./ADR-068-domain-expansion-transfer-learning.md) | 2026-08-13 | Accepted, Implemented | |
|
||||
| ADR-069 | ADR-069: Edge-Net and Pi Brain Integration — Distributed Compute Intelligence | [`ADR-069-google-edge-network-deployment.md`](./ADR-069-google-edge-network-deployment.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-070 | ADR-070: npx ruvector Unified Integration | [`ADR-070-npx-ruvector-unified-integration.md`](./ADR-070-npx-ruvector-unified-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-071 | ADR-071: npx ruvector Ecosystem Gap Analysis | [`ADR-071-npx-ruvector-ecosystem-gap-analysis.md`](./ADR-071-npx-ruvector-ecosystem-gap-analysis.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-072 | ADR-072: RVF Example Management and Downloads in npx ruvector | [`ADR-072-rvf-example-management-downloads.md`](./ADR-072-rvf-example-management-downloads.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-073 | ADR-073: π.ruv.io Platform Security Audit & Optimization | [`ADR-073-pi-platform-security-optimization.md`](./ADR-073-pi-platform-security-optimization.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-074 | ADR-074: RuvLLM Neural Embedding Integration | [`ADR-074-ruvllm-neural-embeddings.md`](./ADR-074-ruvllm-neural-embeddings.md) | 2026-08-13 | Implemented (Phase 2 — RlmEmbedder Active) | |
|
||||
| ADR-075 | ADR-075: Wire Full RVF AGI Stack into mcp-brain-server | [`ADR-075-rvf-agi-stack-brain-integration.md`](./ADR-075-rvf-agi-stack-brain-integration.md) | 2026-08-13 | Implemented | |
|
||||
| ADR-076 | ADR-076: AGI Capability Wiring Architecture | [`ADR-076-agi-capability-wiring-architecture.md`](./ADR-076-agi-capability-wiring-architecture.md) | 2026-08-13 | Implemented | |
|
||||
| ADR-077 | ADR-077: Midstream Platform Integration into mcp-brain-server | [`ADR-077-midstream-brain-integration.md`](./ADR-077-midstream-brain-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-078 | ADR-078: npx ruvector Midstream & Brain AGI Integration | [`ADR-078-npx-ruvector-midstream-integration.md`](./ADR-078-npx-ruvector-midstream-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-079 | ADR-079: SQL Audit Script Hardening & Bug Fixes | [`ADR-079-sql-audit-script-hardening.md`](./ADR-079-sql-audit-script-hardening.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-080 | ADR-080: npx ruvector Deep Capability Audit | [`ADR-080-npx-ruvector-deep-capability-audit.md`](./ADR-080-npx-ruvector-deep-capability-audit.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-081 | ADR-081: Brain Server v0.2.8–0.2.10 Deploy + CLI/MCP Bug Fixes | [`ADR-081-brain-server-v028-deploy-cli-fixes.md`](./ADR-081-brain-server-v028-deploy-cli-fixes.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-082 | ADR-082: Brain Server Security Hardening — PII, Rate Limiting, Anti-Sybil | [`ADR-082-brain-security-hardening.md`](./ADR-082-brain-security-hardening.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-083 | ADR-083: Brain Server Training Loops — Closing the Store→Learn Gap | [`ADR-083-brain-training-loops.md`](./ADR-083-brain-training-loops.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-084 | ADR-084: ruvllm-wasm — First Functional npm Publish | [`ADR-084-ruvllm-wasm-publish.md`](./ADR-084-ruvllm-wasm-publish.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-085 | ADR-085: RuVector Neural Trader — Dynamic Market Graphs, MinCut Coherence Gating, and Proof-Gated Mutation | [`ADR-085-neural-trader-ruvector.md`](./ADR-085-neural-trader-ruvector.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-086 | ADR-086: Neural Trader WASM Bindings | [`ADR-086-neural-trader-wasm.md`](./ADR-086-neural-trader-wasm.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-087 | ADR-087: RuVix Cognition Kernel — An Operating System for the Agentic Age | [`ADR-087-ruvix-cognition-kernel.md`](./ADR-087-ruvix-cognition-kernel.md) | 2026-08-13 | **Accepted** — Phase A Implemented | |
|
||||
| ADR-088 | ADR-088: CNN Contrastive Learning Integration for RuVector | [`ADR-088-cnn-contrastive-integration.md`](./ADR-088-cnn-contrastive-integration.md) | 2026-08-13 | **Proposed** | |
|
||||
| ADR-089 | ADR-089: CNN Browser Demo for GitHub Pages | [`ADR-089-cnn-browser-demo.md`](./ADR-089-cnn-browser-demo.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-090 | ADR-090 Implementation Checklist: Ultra-Low-Bit QAT & Pi-Quantization | [`ADR-090-implementation-checklist.md`](./ADR-090-implementation-checklist.md) | 2026-08-13 | Ready for Implementation (Staged) | DUPLICATE ×2 — cite as `ADR-90 (implementation-checklist)` |
|
||||
| ADR-090 | ADR-090: Ultra-Low-Bit QAT & Pi-Quantization — Domain-Driven Design Architecture | [`ADR-090-ultra-low-bit-qat-pi-quantization-ddd.md`](./ADR-090-ultra-low-bit-qat-pi-quantization-ddd.md) | 2026-08-13 | Accepted (Implementing) | DUPLICATE ×2 — cite as `ADR-90 (ultra-low-bit-qat-pi-quantization-ddd)` |
|
||||
| ADR-091 | ADR-091 Implementation Checklist: INT8 CNN Quantization | [`ADR-091-implementation-checklist.md`](./ADR-091-implementation-checklist.md) | 2026-08-13 | Ready for Implementation | DUPLICATE ×2 — cite as `ADR-91 (implementation-checklist)` |
|
||||
| ADR-091 | ADR-091: INT8 CNN Quantization — Domain-Driven Design Architecture | [`ADR-091-int8-cnn-quantization-ddd.md`](./ADR-091-int8-cnn-quantization-ddd.md) | 2026-08-13 | Accepted (Implementing) | DUPLICATE ×2 — cite as `ADR-91 (int8-cnn-quantization-ddd)` |
|
||||
| ADR-092 | ADR-092: MoE Memory-Aware Routing — Domain-Driven Design Architecture | [`ADR-092-moe-memory-aware-routing-ddd.md`](./ADR-092-moe-memory-aware-routing-ddd.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-093 | ADR-093: Daily Discovery & Brain Training Program | [`ADR-093-daily-discovery-brain-training.md`](./ADR-093-daily-discovery-brain-training.md) | 2026-08-13 | Accepted | DUPLICATE ×2 — cite as `ADR-93 (daily-discovery-brain-training)` |
|
||||
| ADR-093 | ADR-093: DeepAgents Complete Rust Conversion — Overview | [`ADR-093-deepagents-rust-conversion-overview.md`](./ADR-093-deepagents-rust-conversion-overview.md) | 2026-08-13 | | DUPLICATE ×2 — cite as `ADR-93 (deepagents-rust-conversion-overview)` |
|
||||
| ADR-094 | ADR-094: Backend Protocol & Trait System | [`ADR-094-deepagents-backend-protocol-traits.md`](./ADR-094-deepagents-backend-protocol-traits.md) | 2026-08-13 | | DUPLICATE ×2 — cite as `ADR-94 (deepagents-backend-protocol-traits)` |
|
||||
| ADR-094 | ADR-094: π.ruv.io Shared Web Memory on RuVector | [`ADR-094-pi-shared-web-memory.md`](./ADR-094-pi-shared-web-memory.md) | 2026-08-13 | Accepted (Implementing) | DUPLICATE ×2 — cite as `ADR-94 (pi-shared-web-memory)` |
|
||||
| ADR-095 | ADR-095: Middleware Pipeline Architecture | [`ADR-095-deepagents-middleware-pipeline.md`](./ADR-095-deepagents-middleware-pipeline.md) | 2026-08-13 | | DUPLICATE ×2 — cite as `ADR-95 (deepagents-middleware-pipeline)` |
|
||||
| ADR-095 | ADR-095: π.ruv.io API v2 — Full Capability Surface | [`ADR-095-pi-api-v2-capabilities.md`](./ADR-095-pi-api-v2-capabilities.md) | 2026-08-13 | Accepted | DUPLICATE ×2 — cite as `ADR-95 (pi-api-v2-capabilities)` |
|
||||
| ADR-096 | ADR-096: Cloud-Native Data Pipeline, Real-Time Injection & Automated Optimization | [`ADR-096-cloud-pipeline-realtime-optimization.md`](./ADR-096-cloud-pipeline-realtime-optimization.md) | 2026-08-13 | Accepted | DUPLICATE ×2 — cite as `ADR-96 (cloud-pipeline-realtime-optimization)` |
|
||||
| ADR-096 | ADR-096: Tool System — Filesystem, Execute, Grep, Glob | [`ADR-096-deepagents-tool-system.md`](./ADR-096-deepagents-tool-system.md) | 2026-08-13 | | DUPLICATE ×2 — cite as `ADR-96 (deepagents-tool-system)` |
|
||||
| ADR-097 | ADR-097: SubAgent & Task Orchestration | [`ADR-097-deepagents-subagent-orchestration.md`](./ADR-097-deepagents-subagent-orchestration.md) | 2026-08-13 | | |
|
||||
| ADR-098 | ADR-098: Memory, Skills & Summarization Middleware | [`ADR-098-deepagents-memory-skills-summarization.md`](./ADR-098-deepagents-memory-skills-summarization.md) | 2026-08-13 | | |
|
||||
| ADR-099 | ADR-099: CLI & ACP Server Conversion | [`ADR-099-deepagents-cli-acp-server.md`](./ADR-099-deepagents-cli-acp-server.md) | 2026-08-13 | | |
|
||||
| ADR-100 | ADR-100: RVF Integration & Crate Structure | [`ADR-100-deepagents-rvf-integration-crate-structure.md`](./ADR-100-deepagents-rvf-integration-crate-structure.md) | 2026-08-13 | | |
|
||||
| ADR-101 | ADR-101: Testing Strategy & Fidelity Verification | [`ADR-101-deepagents-testing-strategy.md`](./ADR-101-deepagents-testing-strategy.md) | 2026-08-13 | | |
|
||||
| ADR-102 | ADR-102: Implementation Roadmap & Phasing | [`ADR-102-deepagents-implementation-roadmap.md`](./ADR-102-deepagents-implementation-roadmap.md) | 2026-08-13 | | |
|
||||
| ADR-103 | ADR-103: Review Amendments — Performance, RVF Integration & Security Hardening | [`ADR-103-deepagents-review-amendments.md`](./ADR-103-deepagents-review-amendments.md) | 2026-08-13 | | |
|
||||
| ADR-104 | ADR-104: rvAgent MCP Tools/Resources, Enhanced Skills, and Topology-Aware Deployment | [`ADR-104-rvagent-mcp-skills-topology.md`](./ADR-104-rvagent-mcp-skills-topology.md) | 2026-08-13 | | |
|
||||
| ADR-105 | ADR-104: rvAgent MCP Tools and Resources System | [`ADR-105-rvagent-mcp-implementation-details.md`](./ADR-105-rvagent-mcp-implementation-details.md) | 2026-08-13 | | |
|
||||
| ADR-106 | ADR-106: RuVix Kernel Integration with RVF | [`ADR-106-ruvix-kernel-rvf-integration.md`](./ADR-106-ruvix-kernel-rvf-integration.md) | 2026-08-13 | | |
|
||||
| ADR-107 | ADR-107: rvAgent Native Swarm Orchestration with WASM Integration | [`ADR-107-rvagent-native-swarm-wasm.md`](./ADR-107-rvagent-native-swarm-wasm.md) | 2026-08-13 | | |
|
||||
| ADR-108 | ADR-108: rvAgent–ruvbot Integration Architecture | [`ADR-108-rvagent-ruvbot-integration.md`](./ADR-108-rvagent-ruvbot-integration.md) | 2026-08-13 | | |
|
||||
| ADR-109 | ADR-109: Backup and Disaster Recovery Strategy | [`ADR-109-backup-disaster-recovery.md`](./ADR-109-backup-disaster-recovery.md) | 2026-08-13 | Accepted, Implemented | |
|
||||
| ADR-110 | ADR-110: Neural-Symbolic Integration with Internal Voice | [`ADR-110-neural-symbolic-internal-voice.md`](./ADR-110-neural-symbolic-internal-voice.md) | 2026-08-13 | In Progress | |
|
||||
| ADR-111 | ADR-111: Ruvocal UI Integration with rvAgent | [`ADR-111-ruvocal-ui-rvagent-integration.md`](./ADR-111-ruvocal-ui-rvagent-integration.md) | 2026-08-13 | | |
|
||||
| ADR-112 | ADR-112: rvAgent MCP Server with SSE and stdio Transports | [`ADR-112-rvagent-mcp-server.md`](./ADR-112-rvagent-mcp-server.md) | 2026-08-13 | | |
|
||||
| ADR-113 | ADR-113: RVF App Gallery and Ruvix-Powered Applications | [`ADR-113-rvf-app-gallery-ruvix-applications.md`](./ADR-113-rvf-app-gallery-ruvix-applications.md) | 2026-08-13 | | |
|
||||
| ADR-114 | ADR-114: Ruvector-Core Hash Placeholder Embeddings | [`ADR-114-ruvector-core-hash-placeholders.md`](./ADR-114-ruvector-core-hash-placeholders.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-115 | ADR-115: Common Crawl Integration with Semantic Compression | [`ADR-115-common-crawl-temporal-compression.md`](./ADR-115-common-crawl-temporal-compression.md) | 2026-08-13 | Phase 1 Implemented | |
|
||||
| ADR-116 | ADR-116: Spectral Graph Sparsifier Integration with pi.ruv.io | [`ADR-116-spectral-sparsifier-brain-integration.md`](./ADR-116-spectral-sparsifier-brain-integration.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-117 | ADR-117: Pseudo-Deterministic Canonical Minimum Cut | [`ADR-117-canonical-mincut-pseudo-deterministic.md`](./ADR-117-canonical-mincut-pseudo-deterministic.md) | 2026-08-13 | Shipped (all 3 tiers) | DUPLICATE ×2 — cite as `ADR-117 (canonical-mincut-pseudo-deterministic)` |
|
||||
| ADR-117 | ADR-117: DrAgnes Dermatology Intelligence Platform | [`ADR-117-dragnes-dermatology-intelligence-platform.md`](./ADR-117-dragnes-dermatology-intelligence-platform.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-117 (dragnes-dermatology-intelligence-platform)` |
|
||||
| ADR-118 | ADR-118: Cost-Effective Common Crawl Strategy with Sparsifier-Aware Guardrails | [`ADR-118-cost-effective-crawl-strategy.md`](./ADR-118-cost-effective-crawl-strategy.md) | 2026-08-13 | Phase 1 Active | |
|
||||
| ADR-119 | ADR-119: Historical Common Crawl Evolutionary Comparison | [`ADR-119-historical-crawl-evolutionary-comparison.md`](./ADR-119-historical-crawl-evolutionary-comparison.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-120 | ADR-120: WET Processing Pipeline for Medical + CS Corpus Import | [`ADR-120-wet-processing-pipeline.md`](./ADR-120-wet-processing-pipeline.md) | 2026-08-13 | Phase 1 Deployed | |
|
||||
| ADR-121 | ADR-121: Gemini Google Search Grounding for Brain Optimizer | [`ADR-121-gemini-grounding-integration.md`](./ADR-121-gemini-grounding-integration.md) | 2026-08-13 | Implemented | |
|
||||
| ADR-122 | ADR-122: rvAgent Autonomous Gemini Grounding Agents | [`ADR-122-rvagent-gemini-grounding-agents.md`](./ADR-122-rvagent-gemini-grounding-agents.md) | 2026-08-13 | Approved with Revisions | |
|
||||
| ADR-123 | ADR-123: Pi Brain Cognitive Enrichment | [`ADR-123-brain-cognitive-enrichment.md`](./ADR-123-brain-cognitive-enrichment.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-124 | ADR-124: Dynamic MinCut with Partition Cache | [`ADR-124-dynamic-partition-cache.md`](./ADR-124-dynamic-partition-cache.md) | 2026-08-13 | Shipped — All 3 tiers shipped and deployed through ruvbrain-00130 | |
|
||||
| ADR-125 | ADR-125: Resend Email Integration for Pi Brain Notifications | [`ADR-125-resend-email-brain-integration.md`](./ADR-125-resend-email-brain-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-126 | ADR-126: Google Chat Bot for Pi Brain Interaction | [`ADR-126-google-chat-brain-integration.md`](./ADR-126-google-chat-brain-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-127 | ADR-127: Gist Deep Research Loop — Brain-Guided Discovery Publishing | [`ADR-127-gist-deep-research-loop.md`](./ADR-127-gist-deep-research-loop.md) | 2026-08-13 | Implemented | |
|
||||
| ADR-128 | ADR-128: SOTA Gap Implementations — Hybrid Search, MLA, KV-Cache, SSM, Graph RAG | [`ADR-128-sota-gap-implementations.md`](./ADR-128-sota-gap-implementations.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-129 | ADR-129: RuvLTRA Model Training & TurboQuant Optimization on Google Cloud | [`ADR-129-ruvltra-gcloud-training-turboquant.md`](./ADR-129-ruvltra-gcloud-training-turboquant.md) | 2026-08-13 | Accepted — Phase 1 (calibration) deployed and executing. Governance and release | |
|
||||
| ADR-130 | ADR-130: MCP SSE Decoupling via Midstream Queue Architecture | [`ADR-130-mcp-sse-decoupling-midstream-queue.md`](./ADR-130-mcp-sse-decoupling-midstream-queue.md) | 2026-08-13 | **Deployed** (2026-04-02) — Phases 1-3 complete. SSE decoupled to `mcp.pi.ruv.io | |
|
||||
| ADR-131 | ADR-131: Consciousness Metrics Crate — IIT 4.0 Φ, CES, ΦID, PID, Streaming, Bounds | [`ADR-131-consciousness-metrics-crate.md`](./ADR-131-consciousness-metrics-crate.md) | 2026-08-13 | Accepted (Updated) | |
|
||||
| ADR-132 | ADR-132: E2E Browser Testing with @claude-flow/browser | [`ADR-132-e2e-browser-testing-claude-flow.md`](./ADR-132-e2e-browser-testing-claude-flow.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-132 (e2e-browser-testing-claude-flow)` |
|
||||
| ADR-132 | ADR-132: RVM Hypervisor Core — Standalone Coherence-Native Microhypervisor | [`ADR-132-ruvix-hypervisor-core.md`](./ADR-132-ruvix-hypervisor-core.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-132 (ruvix-hypervisor-core)` |
|
||||
| ADR-133 | ADR-133: Claude Code CLI Source Code Analysis | [`ADR-133-claude-code-source-analysis.md`](./ADR-133-claude-code-source-analysis.md) | 2026-08-13 | Deployed (2026-04-02) | DUPLICATE ×2 — cite as `ADR-133 (claude-code-source-analysis)` |
|
||||
| ADR-133 | ADR-133: Partition Object Model | [`ADR-133-partition-object-model.md`](./ADR-133-partition-object-model.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-133 (partition-object-model)` |
|
||||
| ADR-134 | ADR-134: RuVector Deep Integration with Claude Code CLI | [`ADR-134-ruvector-claude-code-deep-integration.md`](./ADR-134-ruvector-claude-code-deep-integration.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-134 (ruvector-claude-code-deep-integration)` |
|
||||
| ADR-134 | ADR-134: Witness Schema and Log Format | [`ADR-134-witness-schema-log-format.md`](./ADR-134-witness-schema-log-format.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-134 (witness-schema-log-format)` |
|
||||
| ADR-135 | ADR-135: MinCut Decompiler with RVF Witness Chains | [`ADR-135-mincut-decompiler-with-witness-chains.md`](./ADR-135-mincut-decompiler-with-witness-chains.md) | 2026-08-13 | Deployed (2026-04-03) — 8-phase pipeline implemented. Louvain partitioning (35x | DUPLICATE ×2 — cite as `ADR-135 (mincut-decompiler-with-witness-chains)` |
|
||||
| ADR-135 | ADR-135: Proof Verifier Design — Three-Layer Verification for Capability-Gated Mutation | [`ADR-135-proof-verifier-design.md`](./ADR-135-proof-verifier-design.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-135 (proof-verifier-design)` |
|
||||
| ADR-136 | ADR-136: GPU-Trained Deobfuscation Model | [`ADR-136-gpu-trained-deobfuscation-model.md`](./ADR-136-gpu-trained-deobfuscation-model.md) | 2026-08-13 | Deployed (2026-04-03) — Model trained (673K params, 95.7% val accuracy), exporte | DUPLICATE ×2 — cite as `ADR-136 (gpu-trained-deobfuscation-model)` |
|
||||
| ADR-136 | ADR-136: Memory Hierarchy and Reconstruction — Four-Tier Coherence-Driven Memory Model | [`ADR-136-memory-hierarchy-reconstruction.md`](./ADR-136-memory-hierarchy-reconstruction.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-136 (memory-hierarchy-reconstruction)` |
|
||||
| ADR-137 | ADR-137: Bare-Metal Boot Sequence | [`ADR-137-bare-metal-boot-sequence.md`](./ADR-137-bare-metal-boot-sequence.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-137 (bare-metal-boot-sequence)` |
|
||||
| ADR-137 | ADR-137: npm Decompiler CLI and MCP Tools | [`ADR-137-npm-decompiler-cli-and-mcp.md`](./ADR-137-npm-decompiler-cli-and-mcp.md) | 2026-08-13 | Deployed (2026-04-03) — CLI command + 6 MCP tools implemented. Decompiler librar | DUPLICATE ×2 — cite as `ADR-137 (npm-decompiler-cli-and-mcp)` |
|
||||
| ADR-138 | ADR-138: LLM Model Weight Decompiler | [`ADR-138-llm-weight-decompiler.md`](./ADR-138-llm-weight-decompiler.md) | 2026-08-13 | Implemented (2026-04-03) -- GGUF and Safetensors format decompilation with archi | DUPLICATE ×2 — cite as `ADR-138 (llm-weight-decompiler)` |
|
||||
| ADR-138 | ADR-138: Seed Hardware Bring-Up | [`ADR-138-seed-hardware-bring-up.md`](./ADR-138-seed-hardware-bring-up.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-138 (seed-hardware-bring-up)` |
|
||||
| ADR-139 | ADR-139: Appliance Deployment Model — Edge Hub with Coherence-Native Control | [`ADR-139-appliance-deployment-model.md`](./ADR-139-appliance-deployment-model.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-139 (appliance-deployment-model)` |
|
||||
| ADR-139 | ADR-139: RVAgent Optimization Using Decompiled Claude Code Intelligence | [`ADR-139-rvagent-claude-code-optimization.md`](./ADR-139-rvagent-claude-code-optimization.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-139 (rvagent-claude-code-optimization)` |
|
||||
| ADR-140 | ADR-140: Agent Runtime Adapter — WASM Agents in Coherence Domains | [`ADR-140-agent-runtime-adapter.md`](./ADR-140-agent-runtime-adapter.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-141 | ADR-141: Coherence Engine — Kernel Integration and Runtime Pipeline | [`ADR-141-coherence-engine-kernel-integration.md`](./ADR-141-coherence-engine-kernel-integration.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-142 | ADR-142: TEE-Backed Cryptographic Verification for the RVM Hypervisor | [`ADR-142-tee-backed-cryptographic-verification.md`](./ADR-142-tee-backed-cryptographic-verification.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-143 | ADR-143: HEARmusica — High-Fidelity Rust Port of Tympan Open-Source Hearing Aid | [`ADR-143-hearmusica-tympan-rust-port.md`](./ADR-143-hearmusica-tympan-rust-port.md) | 2026-08-13 | Accepted | DUPLICATE ×2 — cite as `ADR-143 (hearmusica-tympan-rust-port)` |
|
||||
| ADR-143 | ADR-143: Implement Missing Capabilities in ruvector | [`ADR-143-implement-missing-capabilities.md`](./ADR-143-implement-missing-capabilities.md) | 2026-08-13 | Accepted | DUPLICATE ×2 — cite as `ADR-143 (implement-missing-capabilities)` |
|
||||
| ADR-144 | ADR-144: Candle-Whisper Integration with Musica for Pure-Rust Transcription | [`ADR-144-candle-whisper-musica-transcription.md`](./ADR-144-candle-whisper-musica-transcription.md) | 2026-08-13 | Accepted | DUPLICATE ×3 — cite as `ADR-144 (candle-whisper-musica-transcription)` |
|
||||
| ADR-144 | ADR-144: DiskANN/Vamana Implementation | [`ADR-144-diskann-vamana-implementation.md`](./ADR-144-diskann-vamana-implementation.md) | 2026-08-13 | Implemented | DUPLICATE ×3 — cite as `ADR-144 (diskann-vamana-implementation)` |
|
||||
| ADR-144 | ADR-144: Monorepo Quality Analysis Strategy and Test Plan | [`ADR-144-monorepo-quality-analysis-strategy.md`](./ADR-144-monorepo-quality-analysis-strategy.md) | 2026-08-13 | Accepted | DUPLICATE ×3 — cite as `ADR-144 (monorepo-quality-analysis-strategy)` |
|
||||
| ADR-145 | ADR-145: WASM/NAPI Training Pipeline Fixes | [`ADR-145-wasm-training-pipeline-fixes.md`](./ADR-145-wasm-training-pipeline-fixes.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-146 | ADR-144: DiskANN/Vamana Implementation | [`ADR-146-diskann-vamana-implementation.md`](./ADR-146-diskann-vamana-implementation.md) | 2026-08-13 | Implemented | |
|
||||
| ADR-147 | ADR-147: Stacked KV Cache Compression: TriAttention + TurboQuant Pipeline | [`ADR-147-stacked-kv-cache-triattention-turboquant.md`](./ADR-147-stacked-kv-cache-triattention-turboquant.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-148 | ADR-148: Brain Hypothesis Engine — Self-Improving Knowledge System with Gemini, DiskANN, and Auto-Experimentation | [`ADR-148-brain-hypothesis-engine.md`](./ADR-148-brain-hypothesis-engine.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-149 | ADR-149: Brain Performance Optimizations — SIMD Search, Batch Graph, Incremental LoRA, Quality Gating | [`ADR-149-brain-performance-optimizations.md`](./ADR-149-brain-performance-optimizations.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-150 | ADR-150: π Brain + RuvLtra via Tailscale — Semantic Embedding Upgrade | [`ADR-150-pi-brain-ruvltra-tailscale.md`](./ADR-150-pi-brain-ruvltra-tailscale.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-151 | ADR-151: Miller-Rabin–Driven Prime Optimizations (PIAL) | [`ADR-151-miller-rabin-prime-optimizations.md`](./ADR-151-miller-rabin-prime-optimizations.md) | 2026-08-13 | Accepted (Phase 0 landed 2026-04-16; performance targets revised — see "Phase 0 | |
|
||||
| ADR-153 | ADR-153: Kalshi Integration via RuVector Neural Trader | [`ADR-153-kalshi-neural-trader-integration.md`](./ADR-153-kalshi-neural-trader-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-154 | ADR-154: RaBitQ — Rotation-Based 1-Bit Quantization for ANNS | [`ADR-154-rabitq-rotation-binary-quantization.md`](./ADR-154-rabitq-rotation-binary-quantization.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-155 | ADR-155: ruLake — Vector-Native Federation Intermediary on RVF | [`ADR-155-rulake-datalake-layer.md`](./ADR-155-rulake-datalake-layer.md) | 2026-08-13 | **Accepted (M1)** — core abstraction + LocalBackend + FsBackend shipped | |
|
||||
| ADR-156 | ADR-156: ruLake as Memory Substrate for Agent Brain Systems | [`ADR-156-rulake-as-memory-substrate.md`](./ADR-156-rulake-as-memory-substrate.md) | 2026-08-13 | **Proposed** — positioning addendum, not a replacement. ADR-155 still | |
|
||||
| ADR-157 | ADR-157: Optional Accelerator Plane — `VectorKernel` Trait + Dispatch | [`ADR-157-optional-accelerator-plane.md`](./ADR-157-optional-accelerator-plane.md) | 2026-08-13 | **Proposed** — scaffolding-only decision. No kernel implementations | |
|
||||
| ADR-158 | ADR-158: Optional Rotation Kind (Haar vs Randomized Hadamard) and QVCache Positioning | [`ADR-158-optional-rotation-and-qvcache-positioning.md`](./ADR-158-optional-rotation-and-qvcache-positioning.md) | 2026-08-13 | **Proposed** — a knob-locking decision plus a positioning statement. | |
|
||||
| ADR-159 | ADR-159: A2A (Agent-to-Agent) Protocol Support for rvAgent | [`ADR-159-rvagent-a2a-protocol.md`](./ADR-159-rvagent-a2a-protocol.md) | 2026-08-13 | **Proposed — r3 (second review pass 2026-04-24)**. A new subcrate | |
|
||||
| ADR-160 | ADR-160: ACORN — Predicate-Agnostic Filtered HNSW for ruvector | [`ADR-160-acorn-filtered-hnsw.md`](./ADR-160-acorn-filtered-hnsw.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-161 | ADR-161: Publish `ruvector-rabitq-wasm` as `@ruvector/rabitq-wasm` on npm | [`ADR-161-rabitq-wasm-npm-package.md`](./ADR-161-rabitq-wasm-npm-package.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-162 | ADR-162: Add `ruvector-acorn-wasm` crate and publish as `@ruvector/acorn-wasm` on npm | [`ADR-162-acorn-wasm-npm-package.md`](./ADR-162-acorn-wasm-npm-package.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-165 | ADR-165: Tiny RuvLLM Agents on Heterogeneous ESP32 SoCs | [`ADR-165-tiny-ruvllm-agents-on-esp32-soCs.md`](./ADR-165-tiny-ruvllm-agents-on-esp32-soCs.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-166 | ADR-166: ESP32 Rust Cross-Compile + Bring-Up Operations Manual | [`ADR-166-esp32-rust-cross-compile-bringup-ops.md`](./ADR-166-esp32-rust-cross-compile-bringup-ops.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-167 | ADR-167 — ruvector Hailo-8 NPU embedding backend | [`ADR-167-ruvector-hailo-npu-embedding-backend.md`](./ADR-167-ruvector-hailo-npu-embedding-backend.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-168 | ADR-168 — Cluster CLI surface | [`ADR-168-ruvector-hailo-cluster-cli-surface.md`](./ADR-168-ruvector-hailo-cluster-cli-surface.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-169 | ADR-169 — Cluster cache architecture | [`ADR-169-ruvector-hailo-cluster-cache-architecture.md`](./ADR-169-ruvector-hailo-cluster-cache-architecture.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-170 | ADR-170 — Tracing correlation | [`ADR-170-ruvector-hailo-cluster-tracing-correlation.md`](./ADR-170-ruvector-hailo-cluster-tracing-correlation.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-171 | ADR-171 — ruOS brain + ruview on Pi 5 + Hailo-8 | [`ADR-171-ruos-brain-ruview-pi5-edge-node.md`](./ADR-171-ruos-brain-ruview-pi5-edge-node.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-172 | ADR-172 — Deep security review | [`ADR-172-ruvector-hailo-security-review.md`](./ADR-172-ruvector-hailo-security-review.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-173 | ADR-173 — ruvllm + Hailo on Pi 5 | [`ADR-173-ruvllm-hailo-edge-llm.md`](./ADR-173-ruvllm-hailo-edge-llm.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-174 | ADR-174 — ruOS thermal optimizer | [`ADR-174-ruos-thermal-overclock-pi5.md`](./ADR-174-ruos-thermal-overclock-pi5.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-175 | ADR-175 — Rust-side workarounds for Hailo Dataflow Compiler transformer-encoder bugs | [`ADR-175-hailo-rust-side-workarounds.md`](./ADR-175-hailo-rust-side-workarounds.md) | 2026-08-13 | accepted | |
|
||||
| ADR-176 | ADR-176 — EPIC: Wire HEF into HailoEmbedder for NPU-accelerated embeddings | [`ADR-176-hef-integration-epic.md`](./ADR-176-hef-integration-epic.md) | 2026-08-13 | accepted | |
|
||||
| ADR-177 | ADR-177 — Pi 4 / Pi 5 without AI HAT+ deploy | [`ADR-177-pi4-no-hat-deploy.md`](./ADR-177-pi4-no-hat-deploy.md) | 2026-08-13 | accepted | |
|
||||
| ADR-178 | ADR-178 — ruvector + ruview / hailo cluster integration gap analysis | [`ADR-178-ruvector-ruview-hailo-integration-gap-analysis.md`](./ADR-178-ruvector-ruview-hailo-integration-gap-analysis.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-179 | ADR-179 — EPIC: ruvllm LLM inference on Pi 5 cluster | [`ADR-179-ruvllm-pi-cluster-deployment.md`](./ADR-179-ruvllm-pi-cluster-deployment.md) | 2026-08-13 | proposed | |
|
||||
| ADR-180 | ADR-180 — ServingEngine continuous batching on Pi 5 | [`ADR-180-ruvllm-serving-engine-continuous-batching.md`](./ADR-180-ruvllm-serving-engine-continuous-batching.md) | 2026-08-13 | proposed | |
|
||||
| ADR-181 | ADR-181 — In-tree pi_quant + BitNet b1.58 on Pi 5 | [`ADR-181-ruvllm-pi-quant-bitnet-integration.md`](./ADR-181-ruvllm-pi-quant-bitnet-integration.md) | 2026-08-13 | proposed | |
|
||||
| ADR-182 | ADR-182 — Hailo-10H migration for the Pi 5 cluster | [`ADR-182-hailo-10-cluster-migration.md`](./ADR-182-hailo-10-cluster-migration.md) | 2026-08-13 | proposed | |
|
||||
| ADR-183 | ADR-183 — Move `rand` to dev-dependencies in ruvllm_sparse_attention | [`ADR-183-sparse-attention-rand-dev-dependency.md`](./ADR-183-sparse-attention-rand-dev-dependency.md) | 2026-08-13 | accepted | |
|
||||
| ADR-184 | ADR-184 — One-pass online softmax in SubquadraticSparseAttention::forward | [`ADR-184-sparse-attention-online-softmax.md`](./ADR-184-sparse-attention-online-softmax.md) | 2026-08-13 | accepted | |
|
||||
| ADR-185 | ADR-185 — Exclude current block from non-causal landmark candidates | [`ADR-185-sparse-attention-noncausal-landmark-fix.md`](./ADR-185-sparse-attention-noncausal-landmark-fix.md) | 2026-08-13 | accepted | |
|
||||
| ADR-186 | ADR-186 — Edge-case tests as CI gate before Hailo cluster integration | [`ADR-186-sparse-attention-edge-case-tests.md`](./ADR-186-sparse-attention-edge-case-tests.md) | 2026-08-13 | accepted | |
|
||||
| ADR-187 | ADR-187 — Overflow-checked shape multiplication in `Tensor3::zeros` | [`ADR-187-tensor-zeros-overflow-check.md`](./ADR-187-tensor-zeros-overflow-check.md) | 2026-08-13 | accepted | |
|
||||
| ADR-188 | ADR-188 — Document the intentional stamp scheme difference in sparse attention | [`ADR-188-sparse-attention-stamp-scheme-comment.md`](./ADR-188-sparse-attention-stamp-scheme-comment.md) | 2026-08-13 | accepted | |
|
||||
| ADR-189 | ADR-189 — KV cache incremental decode for sparse attention on Hailo-10H | [`ADR-189-sparse-attention-kv-cache-incremental-decode.md`](./ADR-189-sparse-attention-kv-cache-incremental-decode.md) | 2026-08-13 | accepted | |
|
||||
| ADR-190 | ADR-190 — Grouped-Query / Multi-Query Attention for Hailo-10H production models | [`ADR-190-sparse-attention-gqa-mqa-support.md`](./ADR-190-sparse-attention-gqa-mqa-support.md) | 2026-08-13 | accepted | |
|
||||
| ADR-191 | ADR-191 — Pi Zero 2W production hardening for ruvllm_sparse_attention | [`ADR-191-sparse-attention-pi-zero-2w-production-hardening.md`](./ADR-191-sparse-attention-pi-zero-2w-production-hardening.md) | 2026-08-13 | proposed | |
|
||||
| ADR-192 | ADR-192 — no_std + alloc support for `ruvllm_sparse_attention` | [`ADR-192-sparse-attention-no-std-esp32-support.md`](./ADR-192-sparse-attention-no-std-esp32-support.md) | 2026-08-13 | accepted | |
|
||||
| ADR-193 | ADR-193 — RAIRS IVF: ruvector's First Inverted File Index Family | [`ADR-193-rairs-ivf.md`](./ADR-193-rairs-ivf.md) | 2026-08-13 | accepted | |
|
||||
| ADR-194 | ADR-194 — GNN-Enhanced Candidate Reranking for Approximate ANN | [`ADR-194-gnn-rerank.md`](./ADR-194-gnn-rerank.md) | 2026-08-13 | accepted | DUPLICATE ×3 — cite as `ADR-194 (gnn-rerank)` |
|
||||
| ADR-194 | ADR-194: Proof-Gated Vector Writes with Merkle-Accumulating Witness Logs | [`ADR-194-proof-gated-writes.md`](./ADR-194-proof-gated-writes.md) | 2026-08-13 | Proposed | DUPLICATE ×3 — cite as `ADR-194 (proof-gated-writes)` |
|
||||
| ADR-194 | ADR-194 — RuVector Bundled ONNX Embedder: API Contract & Throughput | [`ADR-194-ruvector-onnx-embedder-api-and-throughput.md`](./ADR-194-ruvector-onnx-embedder-api-and-throughput.md) | 2026-08-13 | accepted | DUPLICATE ×3 — cite as `ADR-194 (ruvector-onnx-embedder-api-and-throughput)` |
|
||||
| ADR-195 | ADR-195 — ONNX Embedder Unification Plan | [`ADR-195-ruvector-embedder-unification-plan.md`](./ADR-195-ruvector-embedder-unification-plan.md) | 2026-08-13 | proposed | |
|
||||
| ADR-196 | ADR-196 — Structure-Preserving Graph Condensation | [`ADR-196-structure-preserving-graph-condensation.md`](./ADR-196-structure-preserving-graph-condensation.md) | 2026-08-13 | accepted | |
|
||||
| ADR-197 | ADR-197 — Differentiable Min-Cut Condensation Loss | [`ADR-197-differentiable-min-cut-condensation-loss.md`](./ADR-197-differentiable-min-cut-condensation-loss.md) | 2026-08-13 | accepted | |
|
||||
| ADR-198 | ADR-198 — Physical Perception Substrate | [`ADR-198-physical-perception-substrate.md`](./ADR-198-physical-perception-substrate.md) | 2026-08-13 | accepted | |
|
||||
| ADR-199 | ADR-199 — Sky Monitor and SkyGraph Appliance | [`ADR-199-sky-monitor-skygraph-appliance.md`](./ADR-199-sky-monitor-skygraph-appliance.md) | 2026-08-13 | proposed | |
|
||||
| ADR-202 | ADR-202 — Fixed-Topology Reuse + Periodic Rebuild on a Real Learned-GNN Trajectory | [`ADR-202-reuse-under-drift-real-gnn-trajectory.md`](./ADR-202-reuse-under-drift-real-gnn-trajectory.md) | 2026-08-13 | proposed | |
|
||||
| ADR-205 | ADR-205 — Triangle-Inequality Cluster Pruning vs Tuned Plain IVF `nprobe` (Structural NO-GO) | [`ADR-205-region-pruned-ivf-vs-plain-ivf-nprobe.md`](./ADR-205-region-pruned-ivf-vs-plain-ivf-nprobe.md) | 2026-08-13 | proposed | |
|
||||
| ADR-206 | ADR-206 — PQ/IVFADC Within-List Pruning vs Tuned Plain IVF `nprobe` (Scale-Gated WIN) | [`ADR-206-pq-ivfadc-within-list-pruning-vs-plain-ivf-nprobe.md`](./ADR-206-pq-ivfadc-within-list-pruning-vs-plain-ivf-nprobe.md) | 2026-08-13 | proposed | |
|
||||
| ADR-210 | ADR-210: Default-On Semantic Embeddings — all-MiniLM-L6-v2 as the Intelligence Engine's Primary Embedder | [`ADR-210-default-on-semantic-embeddings-minilm.md`](./ADR-210-default-on-semantic-embeddings-minilm.md) | 2026-08-13 | accepted (with hardening edits, review of 2026-06-12) | |
|
||||
| ADR-211 | ADR-211 — Temporal Coherence Decay for Agent Memory Retrieval | [`ADR-211-temporal-coherence-agent-memory.md`](./ADR-211-temporal-coherence-agent-memory.md) | 2026-08-13 | accepted | |
|
||||
| ADR-251 | ADR-251: Agentic Time as a First-Class Runtime Primitive | [`ADR-251-agentic-time.md`](./ADR-251-agentic-time.md) | 2026-08-13 | proposed | |
|
||||
| ADR-252 | ADR-252: Coherence-Weighted Agent Memory Compaction | [`ADR-252-agent-memory-compaction.md`](./ADR-252-agent-memory-compaction.md) | 2026-08-13 | Proposed | DUPLICATE ×3 — cite as `ADR-252 (agent-memory-compaction)` |
|
||||
| ADR-252 | ADR-252: FastGRNN Training Pipeline for Tiny Dancer Routing | [`ADR-252-fastgrnn-training-pipeline.md`](./ADR-252-fastgrnn-training-pipeline.md) | 2026-08-13 | accepted | DUPLICATE ×3 — cite as `ADR-252 (fastgrnn-training-pipeline)` |
|
||||
| ADR-252 | ADR-252: Multi-Vector MaxSim Late Interaction Search | [`ADR-252-multi-vector-maxsim.md`](./ADR-252-multi-vector-maxsim.md) | 2026-08-13 | Accepted — PoC merged, production graduation pending | DUPLICATE ×3 — cite as `ADR-252 (multi-vector-maxsim)` |
|
||||
| ADR-253 | ADR-253 — HelixDB vs RuVector: Comparative Analysis and Improvement Opportunities | [`ADR-253-helixdb-comparison-ruvector-improvements.md`](./ADR-253-helixdb-comparison-ruvector-improvements.md) | 2026-08-13 | proposed | |
|
||||
| ADR-254 | ADR-254 — Coherence-Gated HNSW Search | [`ADR-254-coherence-hnsw-search.md`](./ADR-254-coherence-hnsw-search.md) | 2026-08-13 | proposed | DUPLICATE ×2 — cite as `ADR-254 (coherence-hnsw-search)` |
|
||||
| ADR-254 | ADR-254 — ruvector-turbovec: a multi-bit TurboQuant FastScan ANN index | [`ADR-254-ruvector-turbovec-fastscan-index.md`](./ADR-254-ruvector-turbovec-fastscan-index.md) | 2026-08-13 | accepted | DUPLICATE ×2 — cite as `ADR-254 (ruvector-turbovec-fastscan-index)` |
|
||||
| ADR-255 | ADR-255 — ruvector ↔ OIA Model integration (Open Intelligence Architecture v0.1) | [`ADR-255-oia-model-integration.md`](./ADR-255-oia-model-integration.md) | 2026-08-13 | proposed | |
|
||||
| ADR-256 | ADR-256 — Hybrid Sparse-Dense Search: RRF and RSF alongside ScoreFusion | [`ADR-256-hybrid-sparse-dense-search.md`](./ADR-256-hybrid-sparse-dense-search.md) | 2026-08-13 | proposed | DUPLICATE ×2 — cite as `ADR-256 (hybrid-sparse-dense-search)` |
|
||||
| ADR-256 | ADR-256 — Borrowing `metaharness` concepts into `npx ruvector` | [`ADR-256-metaharness-sdk-evaluation.md`](./ADR-256-metaharness-sdk-evaluation.md) | 2026-08-13 | proposed | DUPLICATE ×2 — cite as `ADR-256 (metaharness-sdk-evaluation)` |
|
||||
| ADR-257 | ADR-257 — Extract `ruqu` and `rvdna` into standalone repos (git submodules) | [`ADR-257-ruqu-rvdna-standalone-submodules.md`](./ADR-257-ruqu-rvdna-standalone-submodules.md) | 2026-08-13 | proposed | |
|
||||
| ADR-258 | ADR-258 — ruvector-hnsw-repair: Pluggable HNSW Deletion Strategies | [`ADR-258-hnsw-delete-repair.md`](./ADR-258-hnsw-delete-repair.md) | 2026-08-13 | accepted | DUPLICATE ×2 — cite as `ADR-258 (hnsw-delete-repair)` |
|
||||
| ADR-258 | ADR-258: GPU Optimization of RDT/OpenMythos ACT Halting Loop | [`ADR-258-ruvllm-rdt-gpu-optimization.md`](./ADR-258-ruvllm-rdt-gpu-optimization.md) | 2026-08-13 | Accepted | DUPLICATE ×2 — cite as `ADR-258 (ruvllm-rdt-gpu-optimization)` |
|
||||
| ADR-259 | ADR-259: ruvllm as Local Mutator Backend for Darwin Mode | [`ADR-259-ruvllm-darwin-mode-local-mutator.md`](./ADR-259-ruvllm-darwin-mode-local-mutator.md) | 2026-08-13 | Implemented (code + unit tests + CLI; live-serve e2e blocked by a ruvllm downloa | |
|
||||
| ADR-260 | ADR-260: Darwin Mode as Evolutionary Substrate for MetaHarness | [`ADR-260-darwin-mode-metaharness-integration.md`](./ADR-260-darwin-mode-metaharness-integration.md) | 2026-08-13 | Accepted | DUPLICATE ×2 — cite as `ADR-260 (darwin-mode-metaharness-integration)` |
|
||||
| ADR-260 | ADR-260: PhotonLayer — Learned-Optical-Frontend Computing Simulator | [`ADR-260-photonlayer-optical-computing-simulator.md`](./ADR-260-photonlayer-optical-computing-simulator.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-260 (photonlayer-optical-computing-simulator)` |
|
||||
| ADR-261 | ADR-261: PhotonLayer — Mask Exchange Format & Determinism Invariant | [`ADR-261-photonlayer-mask-exchange-and-determinism.md`](./ADR-261-photonlayer-mask-exchange-and-determinism.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-262 | ADR-262: PhotonLayer — Privacy-Preserving Optical Verification | [`ADR-262-photonlayer-privacy-preserving-optical-verification.md`](./ADR-262-photonlayer-privacy-preserving-optical-verification.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-263 | ADR-263 — PhotonLayer FiberGate | [`ADR-263-photonlayer-fibergate-transmission-matrix.md`](./ADR-263-photonlayer-fibergate-transmission-matrix.md) | 2026-08-13 | proposed | |
|
||||
| ADR-264 | ADR-264: LSM-ANN — Write-Optimised Streaming Vector Index for Agent Memory | [`ADR-264-lsm-ann.md`](./ADR-264-lsm-ann.md) | 2026-08-13 | Accepted | DUPLICATE ×3 — cite as `ADR-264 (lsm-ann)` |
|
||||
| ADR-264 | ADR-264: Matryoshka-Aware Coarse-to-Fine Vector Search | [`ADR-264-matryoshka-coarse-fine-search.md`](./ADR-264-matryoshka-coarse-fine-search.md) | 2026-08-13 | Proposed | DUPLICATE ×3 — cite as `ADR-264 (matryoshka-coarse-fine-search)` |
|
||||
| ADR-264 | ADR-264: Product Quantization with Asymmetric Distance Computation | [`ADR-264-pq-adc-search.md`](./ADR-264-pq-adc-search.md) | 2026-08-13 | Proposed | DUPLICATE ×3 — cite as `ADR-264 (pq-adc-search)` |
|
||||
| ADR-265 | ADR-265: RuVector Comprehensive Benchmark Suite | [`ADR-265-ruvector-comprehensive-benchmark-suite.md`](./ADR-265-ruvector-comprehensive-benchmark-suite.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-266 | ADR-266: MetaHarness Integration for Autonomous ANN Optimization (Darwin Mode) | [`ADR-266-metaharness-darwin-ann-optimization.md`](./ADR-266-metaharness-darwin-ann-optimization.md) | 2026-08-13 | Accepted | DUPLICATE ×2 — cite as `ADR-266 (metaharness-darwin-ann-optimization)` |
|
||||
| ADR-266 | ADR-266: MetaHarness Integration for Autonomous ANN Optimization (Darwin Mode) | [`ADR-266-metaharness-darwin-integration.md`](./ADR-266-metaharness-darwin-integration.md) | 2026-08-13 | Accepted | DUPLICATE ×2 — cite as `ADR-266 (metaharness-darwin-integration)` |
|
||||
| ADR-267 | ADR-267: SOTA Validation Protocol for RuVector | [`ADR-267-sota-validation-protocol.md`](./ADR-267-sota-validation-protocol.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-268 | ADR-268: Capability-Gated ANN Search | [`ADR-268-capability-gated-ann.md`](./ADR-268-capability-gated-ann.md) | 2026-08-13 | Proposed | DUPLICATE ×2 — cite as `ADR-268 (capability-gated-ann)` |
|
||||
| ADR-268 | ADR-268 — SPANN Partition Spilling: Boundary-Safe ANN | [`ADR-268-spann-partition-spill.md`](./ADR-268-spann-partition-spill.md) | 2026-08-13 | accepted | DUPLICATE ×2 — cite as `ADR-268 (spann-partition-spill)` |
|
||||
| ADR-269 | ADR-269: MRAgent Graph Memory over RuVector, Optimized by Darwin Mode | [`ADR-269-mragent-graph-memory-darwin-optimization.md`](./ADR-269-mragent-graph-memory-darwin-optimization.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-270 | ADR-270: Self-Reconstructing Graph Memory — Beyond MRAgent | [`ADR-270-self-reconstructing-graph-memory-beyond-sota.md`](./ADR-270-self-reconstructing-graph-memory-beyond-sota.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-271 | ADR-271: Metaharness-Darwin for SONA Self-Improvement — EWC Config Evolution, the weightAdapter Gene, and Ornith-1.0 Reward-Hacking Defenses | [`ADR-271-metaharness-darwin-sona-self-improvement.md`](./ADR-271-metaharness-darwin-sona-self-improvement.md) | 2026-08-13 | Proposed (all four components prototyped — PR #615) | |
|
||||
| ADR-272 | ADR-272: Adaptive Recall-Targeted ANN Search | [`ADR-272-adaptive-recall-ann.md`](./ADR-272-adaptive-recall-ann.md) | 2026-08-13 | Proposed | DUPLICATE ×5 — cite as `ADR-272 (adaptive-recall-ann)` |
|
||||
| ADR-272 | ADR-272: Bounded Context RAG via MinCut Graph Partitioning | [`ADR-272-bounded-rag-mincut.md`](./ADR-272-bounded-rag-mincut.md) | 2026-08-13 | Proposed | DUPLICATE ×5 — cite as `ADR-272 (bounded-rag-mincut)` |
|
||||
| ADR-272 | ADR-272: Diverse Beam ANN — MMR Post-Reranking and Coherence-Pruned Beam Search | [`ADR-272-diverse-beam-ann.md`](./ADR-272-diverse-beam-ann.md) | 2026-08-13 | Proposed (implemented and benchmarked — `crates/ruvector-diverse-beam`) | DUPLICATE ×5 — cite as `ADR-272 (diverse-beam-ann)` |
|
||||
| ADR-272 | ADR-272: Recall-Bounded Approximate Nearest-Neighbour Search | [`ADR-272-recall-bounded-ann.md`](./ADR-272-recall-bounded-ann.md) | 2026-08-13 | Proposed — proof-of-concept in `crates/ruvector-recall-bounded` | DUPLICATE ×5 — cite as `ADR-272 (recall-bounded-ann)` |
|
||||
| ADR-272 | ADR-272: Speculative ANN Search | [`ADR-272-speculative-ann-search.md`](./ADR-272-speculative-ann-search.md) | 2026-08-13 | Proposed | DUPLICATE ×5 — cite as `ADR-272 (speculative-ann-search)` |
|
||||
| ADR-273 | ADR-273 — rvAgent Harness Reliability Floor | [`ADR-273-rvagent-harness-reliability-floor.md`](./ADR-273-rvagent-harness-reliability-floor.md) | 2026-08-13 | accepted | |
|
||||
| ADR-274 | ADR-274 — rvAgent Context Management: Masking over Summarization | [`ADR-274-rvagent-context-management.md`](./ADR-274-rvagent-context-management.md) | 2026-08-13 | accepted | |
|
||||
| ADR-275 | ADR-275 — rvAgent Subagent Topology: Single Writer with Auxiliary Intelligence | [`ADR-275-rvagent-subagent-topology.md`](./ADR-275-rvagent-subagent-topology.md) | 2026-08-13 | accepted | |
|
||||
| ADR-276 | ADR-276 — rvAgent Learning Loop: Gating, Trust Tiers and Measurement | [`ADR-276-rvagent-learning-loop-gating.md`](./ADR-276-rvagent-learning-loop-gating.md) | 2026-08-13 | accepted | |
|
||||
| ADR-277 | ADR-277 — rvAgent Positioning, Protocols and Benchmark Claims | [`ADR-277-rvagent-positioning-and-claims.md`](./ADR-277-rvagent-positioning-and-claims.md) | 2026-08-13 | accepted | |
|
||||
| ADR-278 | ADR-278 — rvAgent Self-Learning: Adopt the metaharness Flywheel; Shift from Memory to Policy | [`ADR-278-rvagent-flywheel-adoption.md`](./ADR-278-rvagent-flywheel-adoption.md) | 2026-08-13 | accepted | |
|
||||
| ADR-279 | ADR-279 — No C in the Core; and the 2026 SOTA Program | [`ADR-279-no-c-and-the-sota-program.md`](./ADR-279-no-c-and-the-sota-program.md) | 2026-08-13 | accepted | |
|
||||
| ADR-280 | ADR-280: Durable Metadata for Self-Contained RVF Artifacts | [`ADR-280-rvf-durable-self-contained-metadata.md`](./ADR-280-rvf-durable-self-contained-metadata.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-281 | ADR-281: Role-Aware Embedding APIs for Asymmetric Retrieval | [`ADR-281-role-aware-embedding-apis.md`](./ADR-281-role-aware-embedding-apis.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-282 | ADR-282: Pre-PR Quality Gate for Nightly “Dream” Research | [`ADR-282-nightly-research-quality-gate.md`](./ADR-282-nightly-research-quality-gate.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-283 | ADR-283: RVForge — One Canonical RVF to Signed Platform Installers | [`ADR-283-rvf-forge-canonical-installer-pipeline.md`](./ADR-283-rvf-forge-canonical-installer-pipeline.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-284 | ADR-284: RVF Execution Contract for RVM Backends | [`ADR-284-rvf-execution-contract.md`](./ADR-284-rvf-execution-contract.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-285 | ADR-285: Hosted RVM Security Boundary | [`ADR-285-hosted-rvm-security-boundary.md`](./ADR-285-hosted-rvm-security-boundary.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-286 | ADR-286: RVF Capability Schema Mapping into `rvm-cap` | [`ADR-286-rvf-capability-schema-mapping.md`](./ADR-286-rvf-capability-schema-mapping.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-287 | ADR-287: WASM Component Model Integration for the RVM Runtime | [`ADR-287-wasm-component-model-integration.md`](./ADR-287-wasm-component-model-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-288 | ADR-288: Immutable Base RVF and Encrypted State Delta Lifecycle | [`ADR-288-immutable-base-state-delta-lifecycle.md`](./ADR-288-immutable-base-state-delta-lifecycle.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-289 | ADR-289: Desktop Host Adapters, Lifecycle CLI, and Embedding Surfaces | [`ADR-289-desktop-host-adapters.md`](./ADR-289-desktop-host-adapters.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-290 | ADR-290: Forge Build and Signing Trust Boundary | [`ADR-290-forge-build-signing-trust-boundary.md`](./ADR-290-forge-build-signing-trust-boundary.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-291 | ADR-291: Runtime Compatibility and Version Negotiation | [`ADR-291-runtime-compatibility-version-negotiation.md`](./ADR-291-runtime-compatibility-version-negotiation.md) | 2026-08-13 | Implemented | |
|
||||
| ADR-292 | ADR-292: Native Acceleration Isolation | [`ADR-292-native-acceleration-isolation.md`](./ADR-292-native-acceleration-isolation.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-293 | ADR-293: RVM Installer and Appliance Formats | [`ADR-293-rvm-installer-appliance-formats.md`](./ADR-293-rvm-installer-appliance-formats.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-294 | ADR-294: RVForge Platform — Agent Store, Registry, and Trust System | [`ADR-294-rvforge-platform-store-registry-trust.md`](./ADR-294-rvforge-platform-store-registry-trust.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-295 | ADR-295: RVForge Agent Dock — Persistent Security and Control Surface | [`ADR-295-rvforge-agent-dock.md`](./ADR-295-rvforge-agent-dock.md) | 2026-08-13 | Implemented | |
|
||||
| ADR-296 | ADR-296: Turbo4 — 4-bit Lloyd-Max Quantized Vector Datatype with Direct Packed HNSW Scoring | [`ADR-296-turbo4-quantized-vector-datatype.md`](./ADR-296-turbo4-quantized-vector-datatype.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-297 | ADR-297: Adaptive Compression & Retrieval Plane (ACRP) | [`ADR-297-adaptive-compression-retrieval-plane.md`](./ADR-297-adaptive-compression-retrieval-plane.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-299 | ADR-299: Namespace-Merge via S-T Mincut Routing | [`ADR-299-namespace-merge-mincut.md`](./ADR-299-namespace-merge-mincut.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-300 | ADR-300: Hierarchical Cluster-Summary Retrieval for Agent Memory RAG | [`ADR-300-hierarchical-cluster-rag.md`](./ADR-300-hierarchical-cluster-rag.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-301 | ADR-301: Semantic Query Cache for ANN | [`ADR-301-semantic-query-cache.md`](./ADR-301-semantic-query-cache.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-302 | ADR-302: Streaming Quantized Neighbourhood Graphs (QNG-Stream) | [`ADR-302-streaming-qng.md`](./ADR-302-streaming-qng.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-303 | ADR-303: Entropy-Adaptive Beam Search for ANN Graph Traversal | [`ADR-303-entropy-adaptive-ann.md`](./ADR-303-entropy-adaptive-ann.md) | 2026-08-13 | Closed — negative result (documented; not recommended for production) | |
|
||||
| ADR-304 | ADR-304: Retrieval Receipts — Witness-Chained Provenance for ANN Query Results | [`ADR-304-retrieval-receipts.md`](./ADR-304-retrieval-receipts.md) | 2026-08-13 | Proposed. Experimental crate (`ruvector-retrieval-receipt`), not wired into | |
|
||||
| ADR-305 | ADR-305: Adopt Autogenous ADR-401 and LatentMesh ADR-009 as the Perpetual Intelligence Runtime's Definition and Control-Loop Spine | [`ADR-305-adopt-latentmesh-adr009-control-loop-spine.md`](./ADR-305-adopt-latentmesh-adr009-control-loop-spine.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-306 | ADR-306: Dream Machine — Adopt the Consolidating Evaluation Engine, Wired to research-gate and Darwin | [`ADR-306-dream-machine-sona-darwin-unification.md`](./ADR-306-dream-machine-sona-darwin-unification.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-307 | ADR-307: Three-Level Persistent Memory Architecture (LiveMem + TARL Pattern) on RuVector | [`ADR-307-three-level-persistent-memory-livemem-tarl.md`](./ADR-307-three-level-persistent-memory-livemem-tarl.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-308 | ADR-308: WorldCycle-Style Verification for the Physical Action Loop | [`ADR-308-worldcycle-verification-physical-action-loop.md`](./ADR-308-worldcycle-verification-physical-action-loop.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-309 | ADR-309: Build LatentMesh Integration Inside ruvector as New Crates, Coordinated on Wire Format | [`ADR-309-latentmesh-greenfield-crates-wire-format-coordination.md`](./ADR-309-latentmesh-greenfield-crates-wire-format-coordination.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-310 | ADR-310: Causal-Attribution Gate for Latent Communication | [`ADR-310-causal-attribution-gate-latent-communication.md`](./ADR-310-causal-attribution-gate-latent-communication.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-311 | ADR-311: Anomaly Quarantine for Latent Channels (Net-New Work — Not "LATTE") | [`ADR-311-anomaly-quarantine-latent-channels-net-new.md`](./ADR-311-anomaly-quarantine-latent-channels-net-new.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-312 | ADR-312: Shared Witness Record Schema and Cross-Layer Anchoring Contract (rvm-witness ↔ autogenous witness) | [`ADR-312-shared-witness-schema-anchoring-contract.md`](./ADR-312-shared-witness-schema-anchoring-contract.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-313 | ADR-313: SHAPER-Pattern Skill/Harness Evolution Loop (Frozen Weights) | [`ADR-313-shaper-frozen-weight-skill-harness-evolution.md`](./ADR-313-shaper-frozen-weight-skill-harness-evolution.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-314 | ADR-314: KV-Cache Cross-Model Migration in ruvLLM (Fast-Follow) | [`ADR-314-kv-cache-cross-model-migration-ruvllm.md`](./ADR-314-kv-cache-cross-model-migration-ruvllm.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-315 | ADR-315: Governance Constitution for Capability Expansion | [`ADR-315-governance-constitution-capability-expansion.md`](./ADR-315-governance-constitution-capability-expansion.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-316 | ADR-316: ADR Numbering Hygiene — Frozen Duplicates, Canonical Counter, Collision Gate | [`ADR-316-adr-numbering-hygiene.md`](./ADR-316-adr-numbering-hygiene.md) | 2026-08-19 | Proposed | |
|
||||
| ADR-CE-001 | ADR-CE-001: Sheaf Laplacian Defines Coherence Witness | [`coherence-engine/ADR-CE-001-sheaf-laplacian-coherence.md`](./coherence-engine/ADR-CE-001-sheaf-laplacian-coherence.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-002 | ADR-CE-002: Incremental Coherence Computation | [`coherence-engine/ADR-CE-002-incremental-computation.md`](./coherence-engine/ADR-CE-002-incremental-computation.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-003 | ADR-CE-003: PostgreSQL + Ruvector Unified Substrate | [`coherence-engine/ADR-CE-003-hybrid-storage.md`](./coherence-engine/ADR-CE-003-hybrid-storage.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-004 | ADR-CE-004: Signed Event Log with Deterministic Replay | [`coherence-engine/ADR-CE-004-signed-event-log.md`](./coherence-engine/ADR-CE-004-signed-event-log.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-005 | ADR-CE-005: First-Class Governance Objects | [`coherence-engine/ADR-CE-005-governance-objects.md`](./coherence-engine/ADR-CE-005-governance-objects.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-006 | ADR-CE-006: Coherence Gate Controls Compute Ladder | [`coherence-engine/ADR-CE-006-compute-ladder.md`](./coherence-engine/ADR-CE-006-compute-ladder.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-007 | ADR-CE-007: Thresholds Auto-Tuned from Production Traces | [`coherence-engine/ADR-CE-007-threshold-autotuning.md`](./coherence-engine/ADR-CE-007-threshold-autotuning.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-008 | ADR-CE-008: Multi-Tenant Isolation | [`coherence-engine/ADR-CE-008-multi-tenant-isolation.md`](./coherence-engine/ADR-CE-008-multi-tenant-isolation.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-009 | ADR-CE-009: Single Coherence Object | [`coherence-engine/ADR-CE-009-single-coherence-object.md`](./coherence-engine/ADR-CE-009-single-coherence-object.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-010 | ADR-CE-010: Domain-Agnostic Nodes and Edges | [`coherence-engine/ADR-CE-010-domain-agnostic-substrate.md`](./coherence-engine/ADR-CE-010-domain-agnostic-substrate.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-011 | ADR-CE-011: Residual = Contradiction Energy | [`coherence-engine/ADR-CE-011-residual-contradiction-energy.md`](./coherence-engine/ADR-CE-011-residual-contradiction-energy.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-012 | ADR-CE-012: Gate = Refusal Mechanism with Witness | [`coherence-engine/ADR-CE-012-gate-refusal-witness.md`](./coherence-engine/ADR-CE-012-gate-refusal-witness.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-013 | ADR-CE-013: Not Prediction | [`coherence-engine/ADR-CE-013-not-prediction.md`](./coherence-engine/ADR-CE-013-not-prediction.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-014 | ADR-CE-014: Reflex Lane Default | [`coherence-engine/ADR-CE-014-reflex-lane-default.md`](./coherence-engine/ADR-CE-014-reflex-lane-default.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-015 | ADR-CE-015: Adapt Without Losing Control | [`coherence-engine/ADR-CE-015-adapt-without-losing-control.md`](./coherence-engine/ADR-CE-015-adapt-without-losing-control.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-016 | ADR-CE-016: RuvLLM CoherenceValidator Uses Sheaf Energy | [`coherence-engine/ADR-CE-016-ruvllm-coherence-validator.md`](./coherence-engine/ADR-CE-016-ruvllm-coherence-validator.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-017 | ADR-CE-017: Unified Audit Trail | [`coherence-engine/ADR-CE-017-unified-audit-trail.md`](./coherence-engine/ADR-CE-017-unified-audit-trail.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-018 | ADR-CE-018: Pattern-to-Restriction Bridge | [`coherence-engine/ADR-CE-018-pattern-restriction-bridge.md`](./coherence-engine/ADR-CE-018-pattern-restriction-bridge.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-019 | ADR-CE-019: Memory as Nodes | [`coherence-engine/ADR-CE-019-memory-as-nodes.md`](./coherence-engine/ADR-CE-019-memory-as-nodes.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-020 | ADR-CE-020: Confidence from Energy | [`coherence-engine/ADR-CE-020-confidence-from-energy.md`](./coherence-engine/ADR-CE-020-confidence-from-energy.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-021 | ADR-CE-021: Shared SONA | [`coherence-engine/ADR-CE-021-shared-sona.md`](./coherence-engine/ADR-CE-021-shared-sona.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-CE-022 | ADR-CE-022: Failure Learning | [`coherence-engine/ADR-CE-022-failure-learning.md`](./coherence-engine/ADR-CE-022-failure-learning.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-DB-001 | ADR-DB-001: Delta Behavior Core Architecture | [`delta-behavior/ADR-DB-001-delta-behavior-core-architecture.md`](./delta-behavior/ADR-DB-001-delta-behavior-core-architecture.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-DB-002 | ADR-DB-002: Delta Encoding Format | [`delta-behavior/ADR-DB-002-delta-encoding-format.md`](./delta-behavior/ADR-DB-002-delta-encoding-format.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-DB-003 | ADR-DB-003: Delta Propagation Protocol | [`delta-behavior/ADR-DB-003-delta-propagation-protocol.md`](./delta-behavior/ADR-DB-003-delta-propagation-protocol.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-DB-004 | ADR-DB-004: Delta Conflict Resolution | [`delta-behavior/ADR-DB-004-delta-conflict-resolution.md`](./delta-behavior/ADR-DB-004-delta-conflict-resolution.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-DB-005 | ADR-DB-005: Delta Index Updates | [`delta-behavior/ADR-DB-005-delta-index-updates.md`](./delta-behavior/ADR-DB-005-delta-index-updates.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-DB-006 | ADR-DB-006: Delta Compression Strategy | [`delta-behavior/ADR-DB-006-delta-compression-strategy.md`](./delta-behavior/ADR-DB-006-delta-compression-strategy.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-DB-007 | ADR-DB-007: Delta Temporal Windows | [`delta-behavior/ADR-DB-007-delta-temporal-windows.md`](./delta-behavior/ADR-DB-007-delta-temporal-windows.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-DB-008 | ADR-DB-008: Delta WASM Integration | [`delta-behavior/ADR-DB-008-delta-wasm-integration.md`](./delta-behavior/ADR-DB-008-delta-wasm-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-DB-009 | ADR-DB-009: Delta Observability | [`delta-behavior/ADR-DB-009-delta-observability.md`](./delta-behavior/ADR-DB-009-delta-observability.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-DB-010 | ADR-DB-010: Delta Security Model | [`delta-behavior/ADR-DB-010-delta-security-model.md`](./delta-behavior/ADR-DB-010-delta-security-model.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-001 | ADR-QE-001: Quantum Engine Core Architecture | [`quantum-engine/ADR-QE-001-quantum-engine-core-architecture.md`](./quantum-engine/ADR-QE-001-quantum-engine-core-architecture.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-002 | ADR-QE-002: Crate Structure & ruVector Integration | [`quantum-engine/ADR-QE-002-crate-structure-integration.md`](./quantum-engine/ADR-QE-002-crate-structure-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-003 | ADR-QE-003: WebAssembly Compilation Strategy | [`quantum-engine/ADR-QE-003-wasm-compilation-strategy.md`](./quantum-engine/ADR-QE-003-wasm-compilation-strategy.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-004 | ADR-QE-004: Performance Optimization & Benchmarks | [`quantum-engine/ADR-QE-004-performance-optimization-benchmarks.md`](./quantum-engine/ADR-QE-004-performance-optimization-benchmarks.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-005 | ADR-QE-005: Variational Quantum Eigensolver (VQE) Support | [`quantum-engine/ADR-QE-005-vqe-algorithm-support.md`](./quantum-engine/ADR-QE-005-vqe-algorithm-support.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-006 | ADR-QE-006: Grover's Search Algorithm Implementation | [`quantum-engine/ADR-QE-006-grover-search-implementation.md`](./quantum-engine/ADR-QE-006-grover-search-implementation.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-007 | ADR-QE-007: QAOA MaxCut Implementation | [`quantum-engine/ADR-QE-007-qaoa-maxcut-implementation.md`](./quantum-engine/ADR-QE-007-qaoa-maxcut-implementation.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-008 | ADR-QE-008: Surface Code Error Correction Simulation | [`quantum-engine/ADR-QE-008-surface-code-error-correction.md`](./quantum-engine/ADR-QE-008-surface-code-error-correction.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-009 | ADR-QE-009: Tensor Network Evaluation Mode | [`quantum-engine/ADR-QE-009-tensor-network-evaluation.md`](./quantum-engine/ADR-QE-009-tensor-network-evaluation.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-010 | ADR-QE-010: Observability & Monitoring Integration | [`quantum-engine/ADR-QE-010-observability-monitoring.md`](./quantum-engine/ADR-QE-010-observability-monitoring.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-011 | ADR-QE-011: Memory Gating & Power Management | [`quantum-engine/ADR-QE-011-memory-gating-power-management.md`](./quantum-engine/ADR-QE-011-memory-gating-power-management.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-012 | ADR-QE-012: Min-Cut Coherence Integration | [`quantum-engine/ADR-QE-012-mincut-coherence-integration.md`](./quantum-engine/ADR-QE-012-mincut-coherence-integration.md) | 2026-08-13 | Proposed | |
|
||||
| ADR-QE-013 | ADR-QE-013: Deutsch's Theorem — Proof, Historical Comparison, and Verification | [`quantum-engine/ADR-QE-013-deutsch-theorem-proof-verification.md`](./quantum-engine/ADR-QE-013-deutsch-theorem-proof-verification.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-QE-014 | ADR-QE-014: Exotic Quantum-Classical Hybrid Discoveries | [`quantum-engine/ADR-QE-014-exotic-discoveries.md`](./quantum-engine/ADR-QE-014-exotic-discoveries.md) | 2026-08-13 | Accepted | |
|
||||
| ADR-QE-015 | ADR-QE-015: Quantum Hardware Integration & Scientific Instrument Layer | [`quantum-engine/ADR-QE-015-blockchain-forensics-scientific-instrument.md`](./quantum-engine/ADR-QE-015-blockchain-forensics-scientific-instrument.md) | 2026-08-13 | Accepted | |
|
||||
410
scripts/adr-index.mjs
Normal file
410
scripts/adr-index.mjs
Normal file
|
|
@ -0,0 +1,410 @@
|
|||
#!/usr/bin/env node
|
||||
/**
|
||||
* adr-index.mjs — canonical ADR index generator + duplicate-number gate.
|
||||
*
|
||||
* Usage:
|
||||
* node scripts/adr-index.mjs # regenerate docs/adr/INDEX.md
|
||||
* node scripts/adr-index.mjs --check # exit 1 if a NEW duplicate ADR number
|
||||
* # exists (one not in the frozen
|
||||
* # historical list below); exit 0 otherwise
|
||||
* node scripts/adr-index.mjs --self-test # build an adversarial fixture tree in a
|
||||
* # temp dir (symlinks, hostile filenames)
|
||||
* # and assert the script handles it safely
|
||||
*
|
||||
* Policy: see docs/adr/ADR-316-adr-numbering-hygiene.md.
|
||||
* Duplicate numbers that existed before ADR-316 are FROZEN historical
|
||||
* artifacts — they are never renamed, and are disambiguated in prose as
|
||||
* "ADR-NNN (slug)". This script's --check mode is the CI gate that keeps
|
||||
* the frozen list from growing.
|
||||
*
|
||||
* Security posture (Phase-4 review, PR #857):
|
||||
* - Symlinks in docs/adr/ are NEVER followed (neither file nor directory
|
||||
* symlinks) — they are skipped with a warning, so a committed symlink
|
||||
* cannot exfiltrate content from outside the tree into INDEX.md.
|
||||
* - Every visited entry is belt-and-braces asserted (via realpath) to
|
||||
* resolve inside docs/adr/; anything that escapes is skipped.
|
||||
* - Traversal is wrapped per-entry: broken symlinks, permission errors,
|
||||
* and cycles produce a warning + skip, never a stack-trace abort, so
|
||||
* the --check gate fails (or passes) cleanly on adversarial trees.
|
||||
* - All filename-derived text (slug, rel) is escaped before being
|
||||
* interpolated into INDEX.md, and link targets are URI-encoded.
|
||||
*
|
||||
* No dependencies beyond node >= 18 and git.
|
||||
*/
|
||||
|
||||
import { execFileSync, spawnSync } from 'node:child_process';
|
||||
import {
|
||||
readdirSync, readFileSync, writeFileSync, realpathSync,
|
||||
mkdirSync, mkdtempSync, rmSync, symlinkSync, copyFileSync,
|
||||
} from 'node:fs';
|
||||
import { join, relative, dirname, basename, sep } from 'node:path';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const SCRIPT_PATH = fileURLToPath(import.meta.url);
|
||||
const REPO_ROOT = join(dirname(SCRIPT_PATH), '..');
|
||||
const ADR_DIR = join(REPO_ROOT, 'docs', 'adr');
|
||||
const INDEX_PATH = join(ADR_DIR, 'INDEX.md');
|
||||
|
||||
/**
|
||||
* FROZEN historical duplicate list (verified against origin/main, 2026-08-19,
|
||||
* at the time ADR-316 was written). Key = plain ADR number (no namespace,
|
||||
* no a/b sub-ADR suffix), value = number of files historically sharing it.
|
||||
* Do NOT add entries here — new collisions must be renumbered before merge.
|
||||
*/
|
||||
const FROZEN_DUPLICATES = {
|
||||
272: 5,
|
||||
264: 3, 252: 3, 194: 3, 144: 3,
|
||||
268: 2, 266: 2, 260: 2, 258: 2, 256: 2, 254: 2,
|
||||
143: 2, 139: 2, 138: 2, 137: 2, 136: 2, 135: 2,
|
||||
134: 2, 133: 2, 132: 2, 117: 2,
|
||||
96: 2, 95: 2, 94: 2, 93: 2, 91: 2, 90: 2,
|
||||
};
|
||||
|
||||
// Filename shapes handled:
|
||||
// ADR-016-slug.md (plain, canonical counter)
|
||||
// ADR-040a-slug.md (sub-ADR convention — distinct from ADR-040)
|
||||
// ADR-DB-001-slug.md (namespaced family: DB, CE, QE, TTS, ...)
|
||||
const FILE_RE = /^ADR-(?:([A-Z]{2,4})-)?(\d+)([a-z])?(?:[-_](.+?))?\.md$/;
|
||||
|
||||
function warn(msg) {
|
||||
console.error(`adr-index: warning: ${msg}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Walk `dir` collecting .md files. Symlinks (file or directory) are NEVER
|
||||
* followed — skipped with a warning. Every kept entry must realpath-resolve
|
||||
* under `rootReal` (belt-and-braces against anything that still escapes).
|
||||
* Unreadable/broken entries are skipped with a warning, never a throw.
|
||||
*/
|
||||
function walk(dir, rootReal, visited = new Set()) {
|
||||
const out = [];
|
||||
let dirReal;
|
||||
try {
|
||||
dirReal = realpathSync(dir);
|
||||
} catch (err) {
|
||||
warn(`cannot resolve directory ${dir}: ${err.message}`);
|
||||
return out;
|
||||
}
|
||||
if (visited.has(dirReal)) {
|
||||
warn(`directory cycle detected at ${dir} — skipping`);
|
||||
return out;
|
||||
}
|
||||
visited.add(dirReal);
|
||||
|
||||
let dirents;
|
||||
try {
|
||||
dirents = readdirSync(dir, { withFileTypes: true });
|
||||
} catch (err) {
|
||||
warn(`cannot read directory ${dir}: ${err.message}`);
|
||||
return out;
|
||||
}
|
||||
for (const dirent of dirents) {
|
||||
const p = join(dir, dirent.name);
|
||||
if (dirent.isSymbolicLink()) {
|
||||
warn(`skipping symlink (not followed): ${p}`);
|
||||
continue;
|
||||
}
|
||||
if (dirent.isDirectory()) {
|
||||
out.push(...walk(p, rootReal, visited));
|
||||
continue;
|
||||
}
|
||||
if (!dirent.isFile() || !dirent.name.endsWith('.md')) continue;
|
||||
try {
|
||||
const real = realpathSync(p);
|
||||
if (real !== rootReal && !real.startsWith(rootReal + sep)) {
|
||||
warn(`skipping entry that resolves outside the ADR tree: ${p} -> ${real}`);
|
||||
continue;
|
||||
}
|
||||
} catch (err) {
|
||||
warn(`skipping unresolvable entry ${p}: ${err.message}`);
|
||||
continue;
|
||||
}
|
||||
out.push(p);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function parseTitle(content, fallback) {
|
||||
const m = content.match(/^#\s+(.+?)\s*$/m);
|
||||
return m ? m[1].trim() : fallback;
|
||||
}
|
||||
|
||||
function parseStatus(content) {
|
||||
// Frontmatter: status: Accepted
|
||||
let m = content.match(/^status:\s*(.+?)\s*$/im);
|
||||
if (m && content.slice(0, 4) === '---\n') return m[1];
|
||||
// Inline: **Status**: Proposed / **Status:** Proposed / - Status: Proposed
|
||||
m = content.match(/^[-*\s]*\*\*Status:?\*\*:?\s*(.+?)\s*$/im) ||
|
||||
content.match(/^[-*]\s*Status:\s*(.+?)\s*$/im);
|
||||
if (m) return m[1].replace(/\*+/g, '').trim();
|
||||
// Section: ## Status \n <first non-empty line>
|
||||
m = content.match(/^##\s*Status\s*\n+([^\n#]+)/im);
|
||||
if (m) return m[1].trim();
|
||||
return '';
|
||||
}
|
||||
|
||||
function gitDate(relPath, repoRoot) {
|
||||
try {
|
||||
const out = execFileSync(
|
||||
'git', ['log', '--follow', '-1', '--format=%ci', '--', relPath],
|
||||
{ cwd: repoRoot, encoding: 'utf8' },
|
||||
).trim();
|
||||
return out ? out.slice(0, 10) : '';
|
||||
} catch {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
function collect({ withDates, adrDir = ADR_DIR, repoRoot = REPO_ROOT }) {
|
||||
let rootReal;
|
||||
try {
|
||||
rootReal = realpathSync(adrDir);
|
||||
} catch (err) {
|
||||
throw new Error(`ADR directory not found or unreadable: ${adrDir} (${err.message})`);
|
||||
}
|
||||
const entries = [];
|
||||
for (const abs of walk(adrDir, rootReal)) {
|
||||
// path.sep-safe (Windows included): basename + relative, normalized to '/'.
|
||||
const rel = relative(repoRoot, abs).split(sep).join('/');
|
||||
const base = basename(abs);
|
||||
if (base === 'README.md' || base === 'INDEX.md') continue;
|
||||
const m = base.match(FILE_RE);
|
||||
if (!m) continue; // non-ADR markdown (design notes etc.)
|
||||
const [, ns, numStr, subSuffix, slug] = m;
|
||||
const num = parseInt(numStr, 10);
|
||||
let title = '', status = '';
|
||||
try {
|
||||
const content = readFileSync(abs, 'utf8');
|
||||
title = parseTitle(content, slug ?? base);
|
||||
status = parseStatus(content);
|
||||
} catch { /* unreadable file — keep filename-derived fields */ }
|
||||
entries.push({
|
||||
ns: ns ?? '',
|
||||
num,
|
||||
subSuffix: subSuffix ?? '',
|
||||
slug: slug ?? '',
|
||||
rel,
|
||||
title,
|
||||
status,
|
||||
date: withDates ? gitDate(rel, repoRoot) : '',
|
||||
// Duplicate-detection key. The a/b sub-ADR suffix makes a DISTINCT
|
||||
// key on purpose: ADR-040 / ADR-040a / ADR-040b never collide.
|
||||
key: `${ns ? ns + ':' : ''}${num}${subSuffix ?? ''}`,
|
||||
});
|
||||
}
|
||||
entries.sort((a, b) =>
|
||||
a.ns.localeCompare(b.ns) || a.num - b.num ||
|
||||
a.subSuffix.localeCompare(b.subSuffix) || a.rel.localeCompare(b.rel));
|
||||
return entries;
|
||||
}
|
||||
|
||||
function groupDuplicates(entries) {
|
||||
const byKey = new Map();
|
||||
for (const e of entries) {
|
||||
if (!byKey.has(e.key)) byKey.set(e.key, []);
|
||||
byKey.get(e.key).push(e);
|
||||
}
|
||||
return byKey;
|
||||
}
|
||||
|
||||
function maxPlainNum(entries) {
|
||||
// reduce, not Math.max(...): an empty set yields 0, not -Infinity.
|
||||
return entries.filter(e => !e.ns).reduce((m, e) => Math.max(m, e.num), 0);
|
||||
}
|
||||
|
||||
function check() {
|
||||
const entries = collect({ withDates: false });
|
||||
const byKey = groupDuplicates(entries);
|
||||
const violations = [];
|
||||
for (const [key, group] of byKey) {
|
||||
if (group.length < 2) continue;
|
||||
const e = group[0];
|
||||
const frozen = e.ns === '' && e.subSuffix === '' ? FROZEN_DUPLICATES[e.num] : undefined;
|
||||
if (frozen === undefined) {
|
||||
violations.push(`NEW duplicate ${key}: ${group.map(g => g.rel).join(', ')}`);
|
||||
} else if (group.length > frozen) {
|
||||
violations.push(
|
||||
`Duplicate count for ADR-${e.num} grew: ${group.length} files ` +
|
||||
`(frozen historical allowance is ${frozen}): ${group.map(g => g.rel).join(', ')}`);
|
||||
}
|
||||
}
|
||||
if (violations.length > 0) {
|
||||
console.error('ADR duplicate-number check FAILED:\n');
|
||||
for (const v of violations) console.error(` - ${v}`);
|
||||
console.error('\nPick the next available number from docs/adr/INDEX.md ' +
|
||||
'(regenerate with `node scripts/adr-index.mjs`). Never reuse a number.');
|
||||
process.exit(1);
|
||||
}
|
||||
const maxNum = maxPlainNum(entries);
|
||||
console.log(`ADR duplicate-number check OK: ${entries.length} ADR files, ` +
|
||||
`no duplicates outside the frozen historical list. Next available number: ${maxNum + 1}.`);
|
||||
}
|
||||
|
||||
// Escape text destined for a markdown table cell.
|
||||
function mdCell(s) {
|
||||
return String(s ?? '').replace(/\|/g, '\\|').replace(/\s+/g, ' ').trim();
|
||||
}
|
||||
|
||||
// Escape text destined for markdown link text inside a table cell.
|
||||
function mdLinkText(s) {
|
||||
return mdCell(s).replace(/\[/g, '\\[').replace(/\]/g, '\\]');
|
||||
}
|
||||
|
||||
// Encode a markdown link target: encodeURI, plus the characters that would
|
||||
// terminate the link or the table cell but that encodeURI leaves alone.
|
||||
function mdLinkTarget(s) {
|
||||
return encodeURI(String(s ?? ''))
|
||||
.replace(/\(/g, '%28')
|
||||
.replace(/\)/g, '%29');
|
||||
}
|
||||
|
||||
function formatRow(e, group) {
|
||||
const numLabel = `ADR-${e.ns ? e.ns + '-' : ''}${String(e.num).padStart(3, '0')}${e.subSuffix}`;
|
||||
const dup = group.length > 1
|
||||
? `DUPLICATE ×${group.length} — cite as \`ADR-${e.num} (${mdCell(e.slug) || 'untitled'})\``
|
||||
: '';
|
||||
const shortRel = e.rel.replace('docs/adr/', '');
|
||||
const link = `[\`${mdLinkText(shortRel)}\`](${mdLinkTarget('./' + shortRel)})`;
|
||||
return `| ${numLabel} | ${mdCell(e.title)} | ${link} | ${e.date} | ${mdCell(e.status).slice(0, 80)} | ${dup} |`;
|
||||
}
|
||||
|
||||
function generate() {
|
||||
const entries = collect({ withDates: true });
|
||||
const byKey = groupDuplicates(entries);
|
||||
const plain = entries.filter(e => !e.ns);
|
||||
const maxNum = maxPlainNum(entries);
|
||||
const next = maxNum + 1;
|
||||
const dupKeys = [...byKey.values()].filter(g => g.length > 1);
|
||||
const dupFileCount = dupKeys.reduce((n, g) => n + g.length, 0);
|
||||
|
||||
const lines = [];
|
||||
lines.push('# ADR Index');
|
||||
lines.push('');
|
||||
lines.push(`**Next available ADR number: ${next}**`);
|
||||
lines.push('');
|
||||
lines.push('> Generated by `node scripts/adr-index.mjs` — do not edit by hand.');
|
||||
lines.push('> This file is the canonical allocation counter for new ADR numbers');
|
||||
lines.push('> (policy: `ADR-316`). Duplicate numbers listed below are frozen');
|
||||
lines.push('> historical artifacts and are cited as `ADR-NNN (slug)`.');
|
||||
lines.push('> CI gate: `node scripts/adr-index.mjs --check`.');
|
||||
lines.push('');
|
||||
lines.push(`- ADR files indexed: **${entries.length}** ` +
|
||||
`(${plain.length} on the canonical counter, ${entries.length - plain.length} in namespaced families)`);
|
||||
lines.push(`- Highest allocated number: **ADR-${maxNum}**`);
|
||||
lines.push(`- Frozen duplicate numbers: **${dupKeys.length}** ` +
|
||||
`(spanning ${dupFileCount} files)`);
|
||||
lines.push('');
|
||||
lines.push('| Number | Title | File | Last commit | Status | Duplicate |');
|
||||
lines.push('|---|---|---|---|---|---|');
|
||||
for (const e of entries) {
|
||||
lines.push(formatRow(e, byKey.get(e.key)));
|
||||
}
|
||||
lines.push('');
|
||||
writeFileSync(INDEX_PATH, lines.join('\n'));
|
||||
console.log(`Wrote ${relative(REPO_ROOT, INDEX_PATH).split(sep).join('/')}: ${entries.length} entries, ` +
|
||||
`${dupKeys.length} frozen duplicate numbers, next available ADR-${next}.`);
|
||||
}
|
||||
|
||||
/**
|
||||
* --self-test: build an adversarial fixture tree in a temp dir, copy this
|
||||
* script into it (REPO_ROOT derives from the script location, so the copy
|
||||
* operates on the fixture), and assert:
|
||||
* 1. a symlink pointing outside the tree is skipped — its content never
|
||||
* reaches INDEX.md;
|
||||
* 2. a hostile filename (|, [, ], (, )) is escaped in the generated table;
|
||||
* 3. a tree containing broken symlinks and a symlink loop is traversed
|
||||
* cleanly — --check exits 0 with warnings, no stack trace.
|
||||
*/
|
||||
function selfTest() {
|
||||
const failures = [];
|
||||
const ok = (cond, label) => {
|
||||
if (cond) console.log(` PASS ${label}`);
|
||||
else { console.error(` FAIL ${label}`); failures.push(label); }
|
||||
};
|
||||
|
||||
const root = mkdtempSync(join(tmpdir(), 'adr-index-selftest-'));
|
||||
try {
|
||||
const adr = join(root, 'docs', 'adr');
|
||||
mkdirSync(adr, { recursive: true });
|
||||
mkdirSync(join(root, 'scripts'), { recursive: true });
|
||||
copyFileSync(SCRIPT_PATH, join(root, 'scripts', 'adr-index.mjs'));
|
||||
|
||||
// Legit ADR.
|
||||
writeFileSync(join(adr, 'ADR-001-real.md'),
|
||||
'# Real decision\n\n**Status**: Accepted\n');
|
||||
// Hostile filename: pipes, brackets, parens in slug.
|
||||
const hostile = 'ADR-090-beta|BROKEN](httpX) [pwn](httpY.md';
|
||||
writeFileSync(join(adr, hostile), '# Hostile | title\n\n**Status**: Evil|Status\n');
|
||||
// Secret outside the ADR tree + file symlink to it.
|
||||
writeFileSync(join(root, 'outside-secret.txt'),
|
||||
'# TOP SECRET DEPLOY KEY abc123\nstatus: leaked\n');
|
||||
symlinkSync(join(root, 'outside-secret.txt'), join(adr, 'ADR-500-exfil.md'));
|
||||
// Directory symlink escaping the tree.
|
||||
mkdirSync(join(root, 'outside-dir'));
|
||||
writeFileSync(join(root, 'outside-dir', 'ADR-600-outside.md'),
|
||||
'# OUTSIDE REPO SECRET\n');
|
||||
symlinkSync(join(root, 'outside-dir'), join(adr, 'vendor'));
|
||||
// Broken symlink.
|
||||
symlinkSync('/nonexistent/target.md', join(adr, 'ADR-502-broken.md'));
|
||||
// Symlink loop.
|
||||
symlinkSync('.', join(adr, 'loop'));
|
||||
|
||||
const script = join(root, 'scripts', 'adr-index.mjs');
|
||||
const run = (args) => {
|
||||
const r = spawnSync(process.execPath, [script, ...args],
|
||||
{ encoding: 'utf8', timeout: 30_000 });
|
||||
return { code: r.status ?? 1, stdout: r.stdout ?? '', stderr: r.stderr ?? '' };
|
||||
};
|
||||
|
||||
// --- 3. adversarial tree: --check exits cleanly, no stack trace ---
|
||||
const chk = run(['--check']);
|
||||
ok(chk.code === 0, '--check exits 0 on adversarial tree (no dupes present)');
|
||||
ok(chk.stdout.includes('check OK'), '--check prints its normal summary');
|
||||
ok(!(chk.stdout + chk.stderr).includes('at walk'),
|
||||
'no stack trace on broken symlink / symlink loop');
|
||||
ok(chk.stderr.includes('skipping symlink'),
|
||||
'symlinks produce a skip warning');
|
||||
|
||||
// --- 1 + 2. generate: symlinks skipped, hostile filename escaped ---
|
||||
const gen = run([]);
|
||||
ok(gen.code === 0, 'generate exits 0 on adversarial tree');
|
||||
const index = readFileSync(join(adr, 'INDEX.md'), 'utf8');
|
||||
ok(!index.includes('TOP SECRET'),
|
||||
'file symlink target content is NOT inlined into INDEX.md');
|
||||
ok(!index.includes('OUTSIDE REPO SECRET') && !index.includes('ADR-600'),
|
||||
'directory symlink is NOT followed');
|
||||
ok(!index.includes('ADR-500') && !index.includes('ADR-502'),
|
||||
'symlinked/broken entries are absent from the index');
|
||||
ok(index.includes('ADR-090'), 'hostile-named ADR is still indexed');
|
||||
const hostileRow = index.split('\n').find(l => l.includes('ADR-090'));
|
||||
const unescapedPipes = hostileRow.replace(/\\\|/g, '').split('|').length - 1;
|
||||
ok(unescapedPipes === 7,
|
||||
'hostile filename: table row has exactly 7 unescaped pipes (cells intact)');
|
||||
// The link target is the one that starts with './' (escaped `\](`
|
||||
// sequences inside the link text would otherwise match first).
|
||||
const target = hostileRow.match(/\]\((\.\/[^)]*)\)/)?.[1] ?? '';
|
||||
ok(target.startsWith('./ADR-090') && !/[ |[\]]/.test(target)
|
||||
&& !target.includes('('),
|
||||
'hostile filename: link target is URI-encoded (no raw space | [ ] ( )');
|
||||
ok(index.includes('Next available ADR number: 91'),
|
||||
'counter unaffected by symlinked ADR-500/600');
|
||||
} finally {
|
||||
rmSync(root, { recursive: true, force: true });
|
||||
}
|
||||
|
||||
if (failures.length > 0) {
|
||||
console.error(`\nself-test FAILED: ${failures.length} assertion(s)`);
|
||||
process.exit(1);
|
||||
}
|
||||
console.log('\nself-test OK: all assertions passed');
|
||||
}
|
||||
|
||||
try {
|
||||
if (process.argv.includes('--self-test')) selfTest();
|
||||
else if (process.argv.includes('--check')) check();
|
||||
else generate();
|
||||
} catch (err) {
|
||||
console.error(`adr-index: fatal: ${err.message}`);
|
||||
process.exit(1);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue