Skip to content

Commit 1bb85fe

Browse files
hyperpolymathclaude
andcommitted
docs(adr): record octad/verification/justfile decisions, strip empty trees
Adds three ADRs for verisimiser and one for verisimdb-data, plus the mechanical file deletions they authorise. - ADR-0001 (octad-ontology): concerns octad is canonical; modalities become Tier 2 overlays. Closes #19; sets up #20; closes #21 wontfix. - ADR-0002 (verification-tree): strip the empty 8-subdirectory tree; Idris2 stubs in src/interface/abi/ are unaffected. Closes #15. - ADR-0003 (justfile-aspirational-recipes): delete recipes that name non-existent clap subcommands. Closes #11 (#10 is the mechanical follow-up). - ADR-0001 (verisimdb-data, repo-purpose): repo carries two explicit purposes (scan store + ABI dogfood). Lands in the data repo commit. Deletes: - examples/SafeDOMExample.res, examples/web-project-deno.json (unrelated template flotsam — closes #12) - root SECURITY.md, root CODE_OF_CONDUCT.md (duplicate; .github/ versions are canonical — closes #13, #14) - verification/ subtree (closes #15 via ADR-0002) Closes #11, #12, #13, #14, #15, #19, #21 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 36f5932 commit 1bb85fe

25 files changed

Lines changed: 220 additions & 294 deletions

CODE_OF_CONDUCT.md

Lines changed: 0 additions & 27 deletions
This file was deleted.

SECURITY.md

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3+
= ADR-0001: Canonical octad ontology — concerns, not modalities
4+
:revdate: 2026-05-13
5+
:status: Accepted
6+
7+
== Status
8+
9+
Accepted — 2026-05-13.
10+
11+
Resolves: https://github.com/hyperpolymath/verisimiser/issues/19[V-L1-A1].
12+
13+
Closes as wontfix: https://github.com/hyperpolymath/verisimiser/issues/21[V-L1-A3] (the modalities-first refactor).
14+
15+
Unblocks: https://github.com/hyperpolymath/verisimiser/issues/20[V-L1-A2] (the README rewrite).
16+
17+
== Context
18+
19+
Two competing ontologies have lived in this repository under the same name
20+
("octad"):
21+
22+
Modalities octad (README §"VeriSimDB's Octad: Eight Modalities")::
23+
Graph · Vector · Tensor · Semantic · Document · Temporal · Provenance · Spatial.
24+
These are *representations* of an entity — how the same data is stored in
25+
different shapes. The README's eight cross-modal drift categories
26+
(structural, semantic, temporal, statistical, referential, provenance,
27+
spatial, embedding) presuppose this ontology.
28+
29+
Concerns octad (`src/abi/mod.rs::OctadDimension`, `src/manifest/mod.rs::OctadConfig`, `src/main.rs::print_octad`)::
30+
Data · Metadata · Provenance · Lineage · Constraints · AccessControl ·
31+
Temporal · Simulation. These are *concerns/aspects* of data — what you
32+
want to know or enforce about it.
33+
34+
The code commits to the concerns octad; the README leads with the modalities
35+
octad. A user cannot answer "what does an octad-augmented entity look like?"
36+
without picking one.
37+
38+
== Decision
39+
40+
The *concerns* octad is canonical.
41+
42+
The eight dimensions of the verisimiser octad are:
43+
44+
. **Data** — the original entity as stored in the target database.
45+
. **Metadata** — schema and type information.
46+
. **Provenance** — SHA-256 hash-chain tracking of who did what and when.
47+
. **Lineage** — directed-edge graph of data derivation (target nameschematically a DAG; see ADR-0004 when written).
48+
. **Constraints** — cross-dimensional invariant enforcement, including
49+
drift detection between Data + Metadata + active overlays.
50+
. **AccessControl** — policy-based row/column-level access permissions.
51+
. **Temporal** — version history with point-in-time queries and rollback.
52+
. **Simulation** — what-if branching and sandbox query execution.
53+
54+
Modalities (Graph, Vector, Tensor, Semantic, Document, Spatial) are
55+
*Tier 2 overlays* — independent representational projections that a user
56+
can enable per-entity for similarity search, full-text search, geospatial
57+
indexing, etc. They are not "the octad" and not co-equal with the eight
58+
concerns. Provenance and Temporal in the modalities list collapse onto
59+
the same-named concerns.
60+
61+
The eight "cross-modal drift categories" become *symptoms observed by
62+
the Constraints concern* when Data, Metadata, and the active overlays
63+
disagree:
64+
65+
[cols="1,2"]
66+
|===
67+
| Drift category (legacy framing) | Where it lives in the concerns ontology
68+
69+
| Structural | Constraints (Data vs Metadata schema agreement)
70+
| Semantic | Constraints across overlays
71+
| Temporal | Constraints between Temporal versions across overlays
72+
| Statistical | Constraints over Tier 2 vector/tensor overlay drift
73+
| Referential | Constraints between Tier 2 graph overlay and Data
74+
| Provenance | Constraints over Provenance chain integrity
75+
| Spatial | Constraints over Tier 2 spatial overlay
76+
| Embedding | Constraints between Tier 2 vector overlay and source documents
77+
|===
78+
79+
== Consequences
80+
81+
. README and ROADMAP must be rewritten to drop the modalities octad table
82+
and reframe the drift categories under Constraints. Tracked as V-L1-A2.
83+
. The modalities-first refactor (V-L1-A3) is *not* done. Closed as wontfix.
84+
. Tier 2 design (V-L1-F, V-L1-G, V-L1-H) continues to use modality terms
85+
for overlays — they are just no longer presented as "the octad."
86+
. `OctadDimension` enum and `OctadConfig` fields are stable; no source-level
87+
rename triggered by this ADR.
88+
89+
== Alternatives considered
90+
91+
Modalities octad as canonical::
92+
Rejected. Would have required rewriting `abi`, `manifest`, `codegen`, tests,
93+
and example manifests — a multi-week change for pre-alpha framing. The
94+
codebase had already converged on the concerns ontology; the only cost of
95+
keeping it is doc updates.
96+
97+
"Both, with one as primary"::
98+
Considered but rejected. Two ontologies sharing a name is the bug;
99+
ranking them doesn't fix it.
100+
101+
Renaming "octad" to something else (e.g. "octave")::
102+
Out of scope here. The brand survives; the contents are defined.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3+
= ADR-0002: Strip the empty verification/ subtree
4+
:revdate: 2026-05-13
5+
:status: Accepted
6+
7+
== Status
8+
9+
Accepted — 2026-05-13.
10+
11+
Resolves: https://github.com/hyperpolymath/verisimiser/issues/15[V-L3-D1].
12+
13+
== Context
14+
15+
The `verification/` tree contained eight subdirectories
16+
(`benchmarks/`, `coverage/`, `fuzzing/`, `proofs/`, `safety_case/`,
17+
`simulations/`, `tests/`, `traceability/`), each with a ~20-byte
18+
`README.adoc` and an a2ml manifest. Zero proofs, zero benchmarks,
19+
zero fuzzing, zero safety case.
20+
21+
(The actual Idris2 ABI declarations and Zig FFI implementation live in
22+
`src/interface/abi/{Types,Layout,Foreign}.idr` and `src/interface/ffi/`
23+
respectively — those are real Phase 0 stubs and are unaffected by this
24+
ADR. The README's reference to "Idris2 proofs (in `src/interface/abi/`)"
25+
already points at the correct location for the stubs; only the proofs
26+
themselves are still future work.)
27+
28+
A reader following the README's verification/-shaped tree was misled
29+
into thinking benchmarks, fuzzing, safety cases, and traceability
30+
artifacts existed for this product.
31+
32+
== Decision
33+
34+
Strip the empty `verification/` subtree from the repository.
35+
36+
Reintroduce `verification/` only when there is something to put in it.
37+
The first content is expected to be a property-test harness landing
38+
alongside V-L1-C1 (the Tier 1 SQLite piggyback) — at that point a
39+
single `verification/property-tests/` directory will be added with
40+
real content. Don't predeclare the rest of the eight subdirs until
41+
they have artifacts.
42+
43+
== Consequences
44+
45+
. The empty `verification/` subtree is deleted in the same change set
46+
that lands this ADR.
47+
. The README's "Status" / "Architecture" copy that referenced
48+
`verification/` is reworded to point at `src/interface/abi/` only
49+
(where the Idris2 stubs actually live).
50+
. Future verification artifacts (proofs, benchmarks, fuzz targets) are
51+
added directory-by-directory as they appear, not predeclared. The
52+
first such addition is expected alongside V-L1-C1 (Tier 1 SQLite
53+
piggyback) as a property-test harness.
54+
55+
== Alternatives considered
56+
57+
Populate the subtree::
58+
Rejected for now. Writing eight stub READMEs costs effort and doesn't
59+
move the product forward. The contracts the README cited (drift
60+
correctness, chain integrity, version ordering, sidecar isolation)
61+
become provable only once the Tier 1 implementation exists, which is
62+
V-L1-C1.
63+
64+
Leave the subtree, soften the README::
65+
Rejected. Empty scaffolding misleads contributors who follow the tree
66+
looking for examples to extend.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3+
= ADR-0003: Remove aspirational Justfile recipes
4+
:revdate: 2026-05-13
5+
:status: Accepted
6+
7+
== Status
8+
9+
Accepted — 2026-05-13.
10+
11+
Resolves: https://github.com/hyperpolymath/verisimiser/issues/11[V-L3-C2].
12+
Unblocks: https://github.com/hyperpolymath/verisimiser/issues/10[V-L3-C1] (the
13+
mechanical fix to the broken recipe block).
14+
15+
== Context
16+
17+
`Justfile` carried a recipe block whose source contained literal `\n`
18+
characters where newlines were intended. The intent was three recipes
19+
(`augment`, `check-octad`, `migrate`) calling clap subcommands of the
20+
same names. The clap CLI in `src/main.rs` exposes
21+
`init / generate / start / drift / provenance / history / status / octad`
22+
— there are no `augment`, `check-octad`, or `migrate` subcommands.
23+
24+
So the Justfile advertised commands that don't exist, and did so in a
25+
syntactically broken way that made the breakage invisible to `just --list`.
26+
27+
== Decision
28+
29+
Delete the three aspirational recipes from `Justfile`.
30+
31+
The Justfile should only reference subcommands that exist. When new
32+
subcommands are added (per their own design issues), recipe wrappers
33+
can be added at the same time.
34+
35+
== Consequences
36+
37+
. The broken `\n`-collapsed block is removed cleanly (V-L3-C1).
38+
. `just --list` no longer shows phantom recipes.
39+
. Future "convenience wrapper" recipes must be added in the same change
40+
set as the underlying subcommand.
41+
42+
== Alternatives considered
43+
44+
Add the missing subcommands::
45+
Out of scope for V-L3-C2/C1, which are ground-clearing issues. The
46+
semantics of `augment` / `check-octad` / `migrate` aren't pinned down —
47+
e.g. `augment DB_URL` overlaps with `generate` (overlay DDL) plus `start`
48+
(daemon). Designing them is a separate issue, not a one-line fix.
49+
50+
Keep the recipes pointing at not-yet-implemented subcommands::
51+
Rejected. The recipes would still fail with "Unknown subcommand"; the
52+
broken UX would just be in a different place.

examples/SafeDOMExample.res

Lines changed: 0 additions & 109 deletions
This file was deleted.

0 commit comments

Comments
 (0)