Skip to content

Remediation status

Tracks the root-cause remediation program. A finding is verified only when its regression tests passed in public CI (and, for storage, keys, events, transactions, TTL and Raft, the crash/restart harness).

Phases

PhaseTitleStatusFindings verified
0Honesty and trackinggate_passed6/6
1Harness and baselinenot_started0/2
2Format v2 and single-node root fixesnot_started0/15
3Semanticsnot_started0/9
4Raftnot_started0/13
5Documentation and releasenot_started0/9

Findings

IDSeverityPhaseStatusTitle
EVT-01critical2openstatic OUTBOX_SEQ resets on restart; persisted consumer offsets skip new events
RFT-01critical4opencurrent_term/voted_for start at 0/None and are never persisted; double vote produces two leaders
RFT-02critical4openRaft log never reloaded; entries stored under a random UUID without index/term
RFT-03critical4openCommit index computed by ascending sort()/indices[len/2]; wrong majority on even node counts
RFT-04critical4openlog_start_index ignored after compaction/snapshot install; apply loop advances last_applied over gaps
STO-01critical2openCheckpoint recovery drops pre-checkpoint keys
STO-02critical2openWrites acked before fsync; SyncMode::Durable never honored
DOC-02high5openRust client samples use PrkDbClient::new without credentials; Python client has no credential parameter
DOC-03high5openTransactions, TTL, secondary-index, custom-adapter, and ORM doc samples do not compile
EVT-02high2openDefault WAL adapter keeps outbox in memory only; partitioned adapter discards outbox writes and returns Ok
EVT-03high3openMixed-partition batch routes all events to the first item's partition
EVT-04high3openSled "atomic" outbox methods apply two independent tree batches
EVT-05high3openput_with_outbox errors fall back to a non-atomic path, hiding real errors
EVT-06high3openAuto-commit commits inside poll() before processing; no generation fencing; unassigned consumer falls back to partition 0
KEY-01high2openPrimary keys not namespaced by collection; different types can overwrite each other
KEY-02high2openupsert removes the new record's index entries instead of the old; unique index unenforced
KEY-03high2openAHasher::default() is randomly seeded per process; a key's partition changes after restart
REL-01high5openprkdb-client path dep has no version; dry-run failures suppressed; validate_all.sh reports success on failure
RFT-05high4openCommit waiters keyed by index only; not failed on step-down, so a deposed leader's client can see another leader's entry
RFT-06high4openReadIndex heartbeat sends prev_log_index:0 with leader_commit; no no-op on election lets a linearizable read miss an acked write
RFT-07high4openFailed InstallSnapshot counts toward commit; restore never clears old keys; stale snapshots accepted
RFT-10high4openCLUSTER_NODES rejects hostnames; 3-node compose cluster cannot start
SCH-02high2openSchema reload accepts missing descriptors; non-atomic writes; concurrent registrations can reuse a version
STO-06high2openFour WAL implementations in use; all data writes hash to one shard so fixes do not propagate
STO-07high2openBatchAccumulator::flush() sleeps and returns Ok while dropping executor errors
TST-01high4openChaos monkey tolerates 20% of acknowledged writes missing
TXN-01high3openCommit writes puts then deletes in separate append_batch calls; crash between leaves a torn commit
TXN-02high3openIndexed "atomic" transaction loops over independent puts
TXN-03high3openSerializable read set keeps only the last read hash; ReadCommitted writers bypass the barrier, losing updates
DOC-04medium5openGlobal --credential flag ignored by schema/codegen subcommands
DOC-05medium5openREADME CLI commands and binary name do not exist; referenced examples missing
DOC-07medium5openprkdb_writer_healthy alert only exported by prkdb-cli serve; /metrics needs Admin; capability split undocumented
DOC-08medium5openMissing pages: consumer groups, Docker, CLI reference, Raft ops, troubleshooting, Python client, upgrade
DOC-12medium5openNothing in CI runs the documented deploy recipes (docker compose up, 3-node setup)
RFT-08medium4openRPC client never sends x-prkdb-cluster-secret; mTLS mode configures no server TLS, so cluster cannot elect
RFT-09medium4opena_committed_write_replicates_to_every_node failed the unmutated baseline in CI run 34021601202
STO-03medium2openWAL append outside publish_barrier can leave the live index pointing at a stale offset
STO-04medium2openscan_mmap skips CRC on open; torn records become invisible; directories never fsynced
STO-05medium2openWAL routing uses unstable DefaultHasher; replay ordered by segment id, not global order
TST-02medium4openLinearizability workloads use 1 writer, 1 reader, ~25 ops; failed reads dropped
TST-03medium1openNo restart/crash testing against a reference model
TST-05medium2openNo power-loss (unsynced-data) testing; needs the WAL routed through Vfs
TST-06medium4openNo deterministic simulation of the cluster
TTL-01medium3openExpiry deletes without re-checking the version; value and TTL metadata written non-atomically
TXN-04medium3openDefault isolation is ReadCommitted; D5 makes Serializable the default
DOC-10low5openignoreDeadLinks: true hides orphaned methodology/status pages
TST-04low1opene2e_throughput_bench not declared harness = false; Criterion main likely never runs
TST-07low2openNo fuzzing of WAL record, segment, snapshot, and proto decoding
DOC-01high0verifiedCluster docs and compose files misdescribe multi-node setup (env vars, peer auth, metrics auth)
SCH-01high0verifiedSchema collection name joined into a path allows writes outside the registry dir
DOC-11medium0verifiedTransactions page claims Serializable is the default; code defaults to ReadCommitted
TST-08medium0verifiedreplication_tests binds fixed port 13197 and fails under parallel nextest runs
DOC-06low0verifiedRust version stated as 1.75+/1.95+ while the actual toolchain is 1.98
DOC-09low0verifiedUnsourced performance claims (10x less resources, ~10 MB binary, <1s startup, 99.4% write success)