Adds the alk-family "no em dashes in prose" convention (as AGENTS.md convention 10, mirroring alktty/alktunnels/alksocks) and rewrites the existing prose to comply: markdown docs under docs/ (ADRs, spec docs, OQs, sdd_process), README.md, CHANGELOG.md, Rust doc and inline comments under src/, AGENTS.md, and the agent prompts under .opencode/agents/. Punctuation substitutes are varied (colons, parentheses, commas, semicolons, sentence splits); wire data, JSON examples, and code identifiers are untouched. Prose-only change; no code, API, or wire-format changes. Also: - ADR-021: add a historical note that the embedded code snippets predate review 001 (decrypt now returns Zeroizing<String>); the snippets are intentionally preserved as the decision record - protocol.md: align the DerivedKey deserialization error snippet with the current error string in src/protocol.rs - docs/reviews/ is exempt per convention 10 (archived review records) Verification: - grep for em/en clause dashes over docs/, src/, tests/, README.md, CHANGELOG.md, AGENTS.md, .opencode/agents/: clean (docs/reviews/ exempt) - cargo test --all-features: 108 passed, 0 failed - cargo test: 101 passed, 0 failed - cargo clippy --all-features --all-targets: clean - cargo doc --no-deps --all-features: clean
3.6 KiB
status, last_updated
| status | last_updated |
|---|---|
| draft | 2026-08-02 |
Open Questions
Each open question lives in its own file under questions/,
named NNN-slug.md (mirroring the ADR convention). This file is the index:
theme-grouped tables for scannability, plus a cross-theme
Deferred / Blocked section that surfaces the
safe-exit deferrals with their blocking conditions inline, so "what's
currently parked and why" is answerable at a glance.
Status values:
open: Needs to be resolved now. Has a clear path to resolution.resolved: Decided. The resolution is stated cleanly, without caveats about how it could be changed later.deferred(scope): Cannot be resolved yet. The information is genuinely missing: a crate spec, POC result, or use case that doesn't exist yet. Has a concrete blocking condition. Not a failure, but scope management.deferred(unclear): Cannot be resolved yet. The pieces exist (decided in other ADRs, existing types, existing patterns) but the composition (how they fit together) isn't clear yet. Resolution requires investigation (work through examples, maybe POC), not waiting. Has a concrete investigation target and an impacts field. Not a failure, just honest uncertainty in a poorly-defined problem space.partially resolved: Some aspects decided, others deferred or open.dissolved: The question was reframed out of existence (e.g., superseded by an ADR that retires the premise). Kept for reference.
Impacts field: Every unresolved OQ (open, deferred(scope),
deferred(unclear), partially resolved) should have an Impacts
field stating what it blocks downstream. Be specific: "blocks the first
hub deployment because the hub dials workers" not "blocks the hub
crate." This is the triage signal that makes the deferral's urgency
visible.
Door type classifications describe reversal cost (how expensive it is to undo), not urgency:
- One-way door: Reversal requires rewriting significant code or permanently closes a capability. Getting it wrong is expensive, so it requires an ADR before implementation.
- Two-way door: Reversal is cheap or additive. Getting it wrong is recoverable: decide, implement, revert if needed.
Door type is separate from whether a decision is made. A two-way door is a decision you make now and can revert later, not a decision to defer.
Note on numbering: ADR and OQ numbers are preserved from the originating
alknetrepo. A subsequent pass will renumber them to a per-project sequence (001, 002, …) and update cross-references in the spec docs. Until then, the numbers reflect their alknet origin.
By Theme
alkvault
All vault open questions are resolved: the vault is a stable crate with implementation complete and verified.
| OQ | Title | Status | Door | Pri |
|---|---|---|---|---|
| OQ-20 | Salt/KDF and Encryption Key Derivation Method | resolved | one/two | high |
| OQ-21 | Remote Vault Administration | resolved | one | med |
| OQ-22 | Key Rotation Mechanism | resolved | one/two | med |
Deferred / Blocked
The safe-exit visibility surface. These questions are parked because the information needed to resolve them does not exist yet; each has a concrete blocking condition. They are not failures; they are scope management. This section exists so "what's currently blocking the architect" is answerable at a glance, not by filtering the tables above.
None: all vault open questions are resolved.