Commit Graph
11 Commits
Author SHA1 Message Date
glm-5.3-flash 4b5009d85a docs(architecture): Phase 1 spec tree — 7 specs, ADRs 001-006, OQ tracker
- overview/hashing/store-api/backends/gc/ops specs + README index,
  all draft status with YAML frontmatter and cross-referenced ADR/OQ
- ADR-001: substrate posture (store layer alkcall-free = family
  conformance, not deviation) + ops placement decided (feature-gated
  module, no consumer-waited deferral)
- ADR-002: canonical git-blob-sha-256 + key encoding — the declared
  wire-format ADR (one-way door)
- ADR-003: backend contract, sqlite/fs/mem tiers, pure-function
  dispatch, no migration, unknown-length buffering semantics pinned
- ADR-004: exactly two production backends; manifest/path-tree layers
  are consumer-side (the corrected two-vs-three-backends framing)
- ADR-005: pooled CAS, three liveness sources, delete windows with
  pin-before-publish + delete-time arbitration (race closed), no
  ambient scheduling
- ADR-006: whole-blob verification; chunk-tree encodings excluded by
  scoping, not deferred on a paused consumer
- open-questions.md: OQ-BL-01..06 resolved with ADR cross-refs; OQ-07
  /08 externally-owned, OQ-09 deferred(scope) with SDD tracker task
- AGENTS.md: status updated to Phase 1, gix-odb path corrected

Verification: cargo test / clippy -D warnings / fmt --check clean
2026-10-01 14:45:32 +00:00
glm-5.3-flash 7d9ac8a6ec docs(research): correct layer vocabulary — alkcall has no transport code
- Verified against alkcall 0.8.1: no networking deps; Connection wraps
  a caller-provided established stream (ADR-012 dial/call decoupling)
- 'transport' was being used loosely for 'wire/ops protocol'; now
  reserved for endpoints/dialing/byte-moving, which is in neither
  crate. Ops/framing/ACL surface = wire/ops protocol (alkcall's layer)
- Vision sentence, scope line, OQ-BL-01 argument, and alkcall
  prior-art entry rewritten with the accurate layering; alkcall entry
  now states the transport-free fact explicitly
- iroh-blobs-eval.md: 'welded to their transport' -> 'welded to their
  protocol stack (endpoints/transport weld on above it)'

Verification: cargo test / clippy -D warnings / fmt --check clean
2026-10-01 13:37:09 +00:00
glm-5.3-flash b0b385d94e docs(research): settle OQ-BL-01 substrate — ops surface rides alkcall, with the argument recorded
- The 'alkcall usage undecided with the first wire consumer' posture
  was an inherited assumption, never a decision; it conflated iroh-
  blobs' actual weld (no Store trait, store inseparable from irpc —
  convention 7's rejection target) with having a protocol substrate
  under the ops layer at all
- Settled: ops surface is alkcall-shaped — validated JSON control ops
  (OperationSpec/JSON Schema, ADR-016 error schemas), binary data
  channels via the channel_open marker (ADR-047; Sub ADR-021 fetch,
  Pub/Sink ADR-046 put), ACL via AccessControl + ownership (ADR-011)
  under the ADR-017 privilege model; an in-band op/auth scheme would
  duplicate reviewed family machinery (convention 6 already mandates
  the seam)
- Store layer stays substrate-agnostic (principle 1 unchanged); alkcall
  enters only at the ops module/sibling boundary
- Remaining Phase 1 ADR scope reduced to placement: feature-gated ops
  module (lean) vs sibling crate
- Synced vision sentence, scope line, alkcall prior-art entry,
  OQ-BL-05 ACL line, recommended approach, decision table

Verification: cargo test / clippy -D warnings / fmt --check clean
2026-10-01 13:36:09 +00:00
glm-5.3-flash 1f905003d0 docs(research): Phase 0 convergence — settle OQs, add decision table + ADR backlog
- phase-0.md: fold chronological accretion into a settled posture;
  status -> converged; OQ-BL-01..06 restated as settled-base +
  named residuals; new Convergence section (recommended approach,
  decision table, Phase 1 ADR backlog); plan section marked complete
- iroh-blobs-eval.md: fix crossover numbers (64-128 -> 128-256 KiB,
  matching POC #3 finding A4) and B-finding -> finding-A4 reference
- poc-largeblob-findings.md: summary-table label fix (B-finding ->
  finding A4); align small-blob multiplier with measured 9-10x

Verification: cargo test / clippy -D warnings / fmt --check clean
2026-10-01 13:01:59 +00:00
glm-5.3-flash 6b278fb490 docs(research): POC #3 passed — large-blob streaming + sqlite-vs-fs benchmark
- POC #3 (register OQ-BL-06) executed and passed: streaming LFSObject-shaped
  put/get at the store layer; fanout seam (serve-while-persisting) validated
  as broadcast above the backends; fs range reads with the verification gap
  documented (preamble makes slice-vs-whole verification impossible —
  chunk-tree encoding sharpened to a transfer-layer conditional)
- sqlite-vs-fs micro-benchmark: first-party anchor for the small-blob
  belief (~9-10x sqlite at 1-16 KiB, crossover ~128-256 KiB, 128 KiB
  default lean); harness re-runnable on real media
- Stage-file hygiene tests caught a real leak (one temp file per failed
  put) — fixed; all failure paths converge on discard
- Pack tension resolved in shape from the gix-odb read: packs as large
  blobs served by range reads; object-level dedup lives in the loose tier
- iroh-blobs-eval.md written against the current checkout (e82cbdc /
  v0.103.0): actor/message-protocol pattern, fs backend layout,
  verification, do-not-inherit + keep lists
- alknet probe re-check demoted to historical cross-check only: alknet's
  code is not a design input (decomposed; substrate is alkcall); its
  small-blob perf claim was asserted-never-measured, superseded by A4
- phase-0 register complete: no open POCs; next step is convergence ->
  Phase 1

Verification: POC crate (standalone /workspace/alkblobs-largeblob-poc)
14 tests pass, clippy -D warnings clean, fmt clean; digests byte-exact
vs the real git hash-object CLI on both streaming put paths
2026-10-01 08:14:51 +00:00
glm-5.3-flash 493516424a docs(research): POC #1 passed — trait contract + digest + dispatch
POC code: /workspace/alkblobs-trait-poc (17 tests passing, clippy -D
warnings + fmt clean; digests validated byte-exact against the real
git hash-object CLI, both object formats)

Findings (poc-trait-dispatch-findings.md, 8):
- lean Backend trait (opaque byte keys, complete list(), put-path
  pinning) is sufficient; Key typed wrapper lives at the boundary
- redb traps: list() key-vs-value destructure (silent until GC
  catches it — malformed list is as deadly as incomplete), virgin-db
  TableDoesNotExist on first read, no in-memory db (temp file used)
- pinning: Pinned RAII guard + refcount map works; batch-scope pins
  and the sweep-vs-put race are named Phase 1 requirements (iroh
  DeleteSet = prior art)
- git-blob preamble abstraction validated; external-git oids address
  pool entries with zero indirection (the OQ-BL-03 resolution,
  implementation-confirmed)
- tagged key format ([algo byte][digest]) makes git-sha256 + git-sha1
  coexist; sort-stable for sweep diffs
- dual dispatch works as simply as hoped; routing deterministic
- namespace tables: protect callback MUST share live state (the
  snapshot-install bug proves the API lesson: register_liveness_source
  shape, not install_into)
- GC semantics verified: exact deletion counts, abort-callback,
  delete-then-recover byte-identical re-put

phase-0.md: POC #1 marked passed, #2 absorbed (validated), #4 covered
in miniature (concurrency half deferred to Phase 1 impl work);
OQ-BL-02 base settled; OQ-BL-03 implementation-validated; OQ-BL-05
mechanism settled with findings folded in; plan updated (POC #3 is
the last open POC)
2026-10-01 06:51:32 +00:00
glm-5.3-flash cde279b76d docs: hash simplification — canonical git-family hash resolves BLAKE3
- OQ-BL-03 RESOLVED: BLAKE3's presence traced to pure iroh-blobs
  inheritance; with that rejected the multi-hash framing dissolves.
  Three tiers: canonical git-blob-sha-256 (git oids + every other
  consumer share one address domain — cross-consumer dedup free),
  tolerated git-blob-sha-1 (protocol necessity, git's hardened-SHA-1
  threat model), conditional BLAKE3 (only if a bao-like chunk-tree
  encoding is ever adopted; confined to that encoding layer)
- Principle 2 rewritten (one canonical hash, git-family derivation);
  alkgit consumer entry updated (the 'hash conflict' was an artifact
  of the BLAKE3 inheritance); p2p section notes strengthened dedup
- OQ-BL-04: verification options no longer BLAKE3-mandatory; chunk-
  tree encoding note — verified wholes register under the canonical
  hash so chunked and whole-file paths dedup together
- POC register: #2 absorbed into #1 (postamble abstraction + SHA-1
  tolerance are #1's trait work); #3 gains the sqlite-vs-fs
  micro-benchmark pull-out
- AGENTS.md convention 5 aligned (canonical git-family derivation)
2026-10-01 06:33:59 +00:00
glm-5.3-flash 55450d6bf0 docs(research): consolidate GC/pooling round into phase-0
- iroh-blobs GC mechanics verified against current checkout:
  mark-and-sweep (named tags + TempTag RAII + ProtectCb with abort),
  format-aware mark traversal, DeleteSet write-safety, no namespaces
  (flat tags) — our namespace concept maps onto their machinery
- rudolfs prior art section: StorageKey(ns, oid) composite key +
  decorator storage stack; THE ANTI-PATTERN inverted (physically
  namespaced storage defeats cross-tenant dedup); list() is
  load-bearing; verify-as-decorator; streaming LFSObject + fanout
- OQ-BL-03: oid<->hash mapping DISSOLVED — git's oid derivation is
  itself a hash algorithm (domain-separated preamble); per-algorithm
  namespaces; mapping only reappears for transfer-vs-storage hashes
- OQ-BL-05 consolidated: physically flat/logically namespaced; tags
  are the root table; references stay above the crate; mark-and-sweep
  with protect-callback lean (a) + TempTag pinning; traversal
  ownership (a/b/c) is the Phase 1 ADR
- POC register updated: #1 adds list() completeness + pinning
  contract, #2 reframed as validating oid-dissolution, #4 as the GC
  worked example; 'what each POC decides' section added
2026-10-01 06:23:32 +00:00
glm-5.3-flash 5e0a594cfd docs(research): fold p2p-git/dedup discussion into phase-0
- Consumers: add agent workspaces (third consumer); add the p2p shape
  section (contract/gossip/replicator sketch) and pin what it implies
  here: pooled CAS per node, repos/workspaces as hash-reference sets
- Principles: add 6 (pooling is the point) and 7 (whole-file CAS
  default; CDC scoped to large-binary edits; fixed-size trees not
  inherited)
- OQ-BL-01: ops surface upgraded from speculative to likely (have/need
  + verified fetch), crate-boundary question remains
- OQ-BL-04: chunking scoped; new sub-question — chunking in store
  encoding vs manifest layer
- New OQ-BL-05: pooling/GC — namespace shape, lifetime strategies,
  the pack tension (constrains store surface)
- POC register: add #4 (pooled CAS + GC); note pack tension rides #3
- gix-odb: note alternates/object-pools as cross-repo dedup prior art
2026-10-01 04:30:54 +00:00
glm-5.3-flash 7f7f70b220 feat: initial repo setup (Phase 0 scaffolding)
- AGENTS.md: repo conventions adapted from alkcall/alksocks (store
  posture, multi-hash requirement, no-iroh-wire rule; no fuzz gate yet)
- Cargo.toml + src/lib.rs: bare lean lib skeleton (tokio async, thiserror)
- docs/research/phase-0.md: Phase 0 draft — vision, prior art (iroh-blobs
  store, gix-odb, alknet appfile probe, alkcall), OQ register, POC plan
- .gitignore, LICENSE-APACHE/MIT
- Re-pointed stale alknet/alkcall references in .opencode/agents/ and
  docs/sdd_process.md

Verification: cargo build/test, cargo clippy --all-targets -- -D
warnings, cargo fmt --check, cargo doc --no-deps — all pass
2026-09-30 07:45:40 +00:00
glm-5.3-flash 357311d27b init 2026-09-30 06:53:09 +00:00