Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
5911 commits
Select commit Hold shift + click to select a range
6ac5a4b
docs(cas): spec rev.6 for CAS-95.1/95.2 after codex review round 5
filimonov Sep 26, 2026
105d2e8
docs(cas): spec rev.7 for CAS-95.1/95.2 after codex review round 6; r…
filimonov Sep 26, 2026
22799b9
docs(cas): spec rev.7 body for CAS-95.1/95.2
filimonov Sep 26, 2026
2f0eccc
docs(cas): design study rev.1, table-level files as refs and dedup cl…
filimonov Sep 26, 2026
36573b5
docs(cas): probe of non-MergeTree engines on a CAS disk; CAS-318 pers…
filimonov Sep 26, 2026
d4f9ea3
docs(cas): design study rev.2, table directory entries in the ref log…
filimonov Sep 26, 2026
ec61a74
docs(cas): design study closed after codex round 2; conclusion points…
filimonov Sep 26, 2026
9fbc1c6
docs(cas): spec rev.8 for CAS-95.1/95.2, namespace file names populat…
filimonov Sep 26, 2026
e2772b9
docs(cas): spec rev.9 for CAS-95.1/95.2 after codex review round 7
filimonov Sep 26, 2026
d84edae
docs(cas): round-7 codex report for the directory-probes spec
filimonov Sep 26, 2026
8d0bc67
docs(cas): close the CAS-95.2 review loop after codex round 8; decisi…
filimonov Sep 26, 2026
998c89c
docs(cas): spec section 0 correction: the lease protocol bounds prede…
filimonov Sep 27, 2026
62666fe
docs(cas): spec rev.10 keeps only CAS-95.1; CAS-95.2 marked doubtful …
filimonov Sep 27, 2026
295c4b2
docs(cas): CAS-95.2 note: invalidate-on-write cache as the candidate …
filimonov Sep 27, 2026
61f5dec
docs(cas): spec rev.11 for CAS-95.1 after codex review round 9
filimonov Sep 27, 2026
d3123d0
docs(cas): spec rev.12 for CAS-95.1 after codex review round 10; revi…
filimonov Sep 27, 2026
a2217b6
docs(cas): spec rev.12 body for CAS-95.1
filimonov Sep 27, 2026
b42dcbb
docs(cas): CAS-319, upstream checkSize should decide projections by t…
filimonov Sep 27, 2026
7c958d5
docs(cas): spec rev.13 for CAS-95.1: end-to-end test as stateless DET…
filimonov Sep 27, 2026
9f24787
docs(cas): implementation plan for CAS-95.1, part-file directory prob…
filimonov Sep 27, 2026
724b50a
docs(cas): CAS-95.1 in progress, branch and plan recorded
filimonov Sep 27, 2026
372ee61
docs(cas): CAS-95.1 branch reviews (opus final review, codex gpt-6-as…
filimonov Sep 27, 2026
06b3c3f
docs(cas): CAS-95.1 pushed, PR #2440 opened
filimonov Sep 27, 2026
12fca35
docs(cas): product-level backlog for project management
filimonov Sep 27, 2026
bb16d07
docs(cas): CAS-30 spec rev.1 and rev.2 with codex review round 1
filimonov Sep 28, 2026
8a1d40a
docs(cas): CAS-30 codex review round 2 on spec rev.2
filimonov Sep 28, 2026
744d5da
docs(cas): CAS-252 design rev.1, uncommitted reservations as version …
filimonov Sep 28, 2026
4efbbcf
docs(cas): CAS-252 design rev.2 after codex design review round 1 and…
filimonov Sep 28, 2026
ddcff6c
docs(cas): CAS-252 design rev.3 after codex design review round 2: de…
filimonov Sep 28, 2026
7b99cf9
docs(cas): CAS-252 design rev.4 (final) after codex design review rou…
filimonov Sep 28, 2026
7131971
docs(cas): CAS-223 notes: owner rejects the thread-pool profile; phas…
filimonov Sep 28, 2026
52e1d96
docs(cas): CAS-223 drop the contradictory confidence:solid label
filimonov Sep 28, 2026
515626c
docs(cas): CAS-252 design rev.5: validate the cut with a publication …
filimonov Sep 28, 2026
625de4d
docs(cas): CAS-223 phase 3: root cause reproduced, O(catalog) decode …
filimonov Sep 28, 2026
2e187c8
docs(cas): CAS-252 design rev.6 after codex design review round 4: bo…
filimonov Sep 28, 2026
87d14ba
docs(cas): CAS-252 design rev.7: pending versions under the selection…
filimonov Sep 28, 2026
82d6a71
docs(cas): CAS-223 phase 4: batched catalog drain through the hot-key…
filimonov Sep 28, 2026
e250061
docs(cas): CAS-223 RCA: catalog drain starvation and O(catalog) decod…
filimonov Sep 28, 2026
ac7684b
docs(cas): CAS-252 design rev.8 after codex design review round 5: at…
filimonov Sep 28, 2026
6d51513
docs(cas): CAS-252 design rev.9 (final) after the confirmation round:…
filimonov Sep 28, 2026
32c5e93
docs(cas): CAS-223: RC2 observed in a CI ASan trace_log (catalog deco…
filimonov Sep 28, 2026
8d53dfc
docs(cas): backport task for upstream #108922 (MOVE PARTITION destina…
filimonov Sep 28, 2026
ab6808d
docs(cas): CAS-252 design rev.10 (final): the alter recovery path kee…
filimonov Sep 28, 2026
0eb6f31
docs(cas): parity umbrella CAS-321 with seven new subtasks, dependenc…
filimonov Sep 28, 2026
c044a31
docs(cas): CAS-321: the checkpoint cadence is group commit with the a…
filimonov Sep 28, 2026
514230f
docs(cas): implementation plan for the MergeTree pending-versions fix…
filimonov Sep 28, 2026
7b2f12e
docs(cas): annotate the MergeTree pending-versions plan with the exec…
filimonov Sep 28, 2026
1265376
docs(cas): CAS-252 compact design rev.1: committing blocks as version…
filimonov Sep 28, 2026
eb408fe
docs(cas): implementation plan for the committing-block boundaries de…
filimonov Sep 28, 2026
2bee787
docs(cas): compact design rev.2 after the codex adversarial round: wa…
filimonov Sep 28, 2026
e38daa1
docs(cas): plan rev.2 for the committing-block boundaries design (can…
filimonov Sep 28, 2026
84afc45
docs(cas): compact design rev.3 + plan: above-watermark parts are fil…
filimonov Sep 28, 2026
d0cf6a2
docs(cas): compact design: the candidate watermark compares min_block…
filimonov Sep 28, 2026
3965cb4
docs(cas): compact design: reachability note for the candidate waterm…
filimonov Sep 29, 2026
795876f
docs(cas): compact design: the late-candidate interleaving is reachab…
filimonov Sep 29, 2026
6f17e40
docs(cas): compact design rev.4: rule 5 wakes up on Mutation reservat…
filimonov Sep 29, 2026
e1d9a51
docs(cas): CAS-321.1: object_storage_type=local is out of scope for t…
filimonov Sep 29, 2026
42be8a6
docs(cas): CAS-321.1 design rev.1: CAS vs S3 yardstick (three disks, …
filimonov Sep 29, 2026
fdef1a6
docs(cas): CAS-321.1 design rev.2 after the codex round: one disk per…
filimonov Sep 29, 2026
5b6c977
docs(cas): CAS-321.1 implementation plan: six tasks, report arithmeti…
filimonov Sep 29, 2026
0d48669
docs: spec rev.3g after the PR review (one budget per callback, no re…
filimonov Sep 29, 2026
d205f6f
docs(cas): committing-block boundaries design rev.5 after the third r…
filimonov Sep 29, 2026
9692325
backlog: CAS-177 state after the PR #2396 review round
filimonov Sep 29, 2026
f3a0b4b
docs(cas): committing-block boundaries design rev.6: no OPTIMIZE FINA…
filimonov Sep 29, 2026
f07ca12
utils(cas-yardstick): report arithmetic — aggregates, paired ratios, …
filimonov Sep 29, 2026
d0c7b01
utils(cas-yardstick): per-repeat ratio rows, min..max cells, card x p…
filimonov Sep 29, 2026
7bee36e
utils(cas-yardstick): table pairs come from the ratio rows, no scient…
filimonov Sep 29, 2026
561d5ac
utils(cas-yardstick): RustFS and server scripts, one disk per process…
filimonov Sep 29, 2026
b0c5faf
utils(cas-yardstick): mask run dir and prefix in config hash, guard R…
filimonov Sep 29, 2026
04c3631
utils(cas-yardstick): name the mc container and remove it on failure,…
filimonov Sep 29, 2026
dc18b60
utils(cas-yardstick): runner, HTTP client, card interface and the cyc…
filimonov Sep 29, 2026
9530581
utils(cas-yardstick): interrupt-safe cleanup, per-phase failures, set…
filimonov Sep 29, 2026
5cfdc11
docs(cas): restore the GC round-pools spec (rev.11) and its plan from…
filimonov Sep 29, 2026
08ae024
docs(cas): GC request-cuts design rev.1: A0 carry confirmed marker, A…
filimonov Sep 29, 2026
5e179f6
utils(cas-yardstick): the six remaining cards with invariants
filimonov Sep 29, 2026
ad2ae34
backlog(cas): CAS-29.2 done — PR #2351 merged into antalya-26.6 in th…
filimonov Sep 29, 2026
36da805
docs(cas): yardstick design rev.3: merges off via max_parts_to_merge_…
filimonov Sep 29, 2026
b779cf1
docs(cas): GC request-cuts design rev.2 (codex round 1 closed: A0 saf…
filimonov Sep 29, 2026
ba50350
utils(cas-yardstick): disable merging by table setting on every merge…
filimonov Sep 29, 2026
ddedd84
backlog(cas): CAS-29.2 note — merged shape keeps cas_gc_io_concurrenc…
filimonov Sep 29, 2026
d91008e
utils(cas-yardstick): cold reset, GC rounds per window, compare again…
filimonov Sep 29, 2026
a10d8df
docs(cas): GC request-cuts design rev.3 (codex round 2 closed: A0 per…
filimonov Sep 29, 2026
ee1552c
docs(cas): yardstick design: GC rounds are selected by span overlap w…
filimonov Sep 29, 2026
60c5103
utils(cas-yardstick): fix run --compare, GC column for CAS policies only
filimonov Sep 29, 2026
0d141ca
cas-yardstick: the 6 GET per cycle figure belongs to the s3 policy
filimonov Sep 29, 2026
015495c
docs(cas): GC request-cuts design rev.3 marked ready for planning aft…
filimonov Sep 29, 2026
126e096
docs(cas): GC request-cuts implementation plan: A0, A4 memo, A2 windo…
filimonov Sep 29, 2026
574310a
docs(cas): GC request-cuts: A0 is checked in CaGcCondemnMarkerGate.tl…
filimonov Sep 29, 2026
ad74b6c
utils(cas-yardstick): README, docs link, cycle numbers next to the RC…
filimonov Sep 29, 2026
406837a
utils(cas-yardstick): first reference run, cycle card, six policies, …
filimonov Sep 29, 2026
a9628df
utils(cas-yardstick): run all cards by default, add --quick, record p…
filimonov Sep 29, 2026
216243a
docs(cas): GC request-cuts: the earlier HEAD observation is modelled …
filimonov Sep 29, 2026
c9c4fa5
models(cas): condemn-marker gate — persisted confirmation and prefetc…
filimonov Sep 29, 2026
bfc58cf
docs(cas): GC request-cuts: the model invariant is NoDangle, the runn…
filimonov Sep 29, 2026
e44bbef
models(cas): condemn-marker gate — two writers for the stale prefetch…
filimonov Sep 29, 2026
e02b319
docs(cas): GC request-cuts plan: the gate on antalya-26.6 is the dire…
filimonov Sep 29, 2026
e91ee59
utils(cas-yardstick): allow rm-prefix 30 minutes for a full run's prefix
filimonov Sep 30, 2026
3bfdac3
utils(cas-yardstick): full seven-card reference run, run-time table, …
filimonov Sep 30, 2026
0e183ec
utils(cas-yardstick): test the pass_seconds writer, spell out referen…
filimonov Sep 30, 2026
c60b24d
docs(cas): GC request-cuts plan: every gtest and probe run under a me…
filimonov Sep 30, 2026
6283c41
docs(cas): yardstick design rev.4: attach_200 detaches permanently be…
filimonov Sep 30, 2026
e4db3c3
docs(cas): GC request-cuts: the retained Etag key carries the namespa…
filimonov Sep 30, 2026
a597304
utils(cas-yardstick): report failed repeats, cached ratios, GC ranges…
filimonov Sep 30, 2026
e4f567b
utils(cas-yardstick): smoke check matches the FAILED (n of K repeats …
filimonov Sep 30, 2026
e3d2af5
utils(cas-yardstick): cold attach_200 loads an unloaded table; scale …
filimonov Sep 30, 2026
cafe2c2
utils(cas-yardstick): content-hash workload identity, one-SIGTERM ser…
filimonov Sep 30, 2026
4720480
utils(cas-yardstick): README states what cold means, how to start Rus…
filimonov Sep 30, 2026
647dbf9
docs(cas): monitoring page says to start and stop RustFS around a yar…
filimonov Sep 30, 2026
96e4b88
docs(cas): GC request-cuts A2: every take is a candidate by construct…
filimonov Sep 30, 2026
0298f73
docs(cas): GC request-cuts A2: the top-up runs before the shard's fir…
filimonov Sep 30, 2026
d7226d3
utils(cas-yardstick): replace the reference with run 20260930T055649Z
filimonov Sep 30, 2026
b810b48
utils(cas-yardstick): README numbers from reference 2026-09-30-647dbf…
filimonov Sep 30, 2026
be98119
docs(cas): yardstick design rev.5: workload hash, clean stop, what co…
filimonov Sep 30, 2026
dd0bb5e
utils(cas-yardstick): README states that the RustFS port is fixed
filimonov Sep 30, 2026
9f7750d
docs(cas): yardstick design rev.5: rm-prefix deadlines, --quick, run …
filimonov Sep 30, 2026
ae78b87
utils(cas-yardstick): a GC round cut by a server stop does not stay open
filimonov Sep 30, 2026
46301ea
utils(cas-yardstick): re-accept the reference at the new workload has…
filimonov Sep 30, 2026
3f33b2d
backlog(cas): CAS-321.1 done — cas-yardstick with a checked-in reference
filimonov Sep 30, 2026
ad4a921
backlog: CAS-322 (CAS-S3 stress pre-stress restart budget), CAS-177 C…
filimonov Sep 30, 2026
da67ae5
backlog: CI evidence of the _files LIST storm at table load (CAS-95),…
filimonov Sep 30, 2026
c1e66e4
backlog(cas): CAS-322 and CAS-95.1: request breakdown of the failing …
filimonov Sep 30, 2026
82915ea
backlog(cas): CAS-323: single-flight follower checks its resolved man…
filimonov Sep 30, 2026
6b807d4
backlog(cas): CAS-135: LIST is also lost from GC phase rows; fresh ev…
filimonov Sep 30, 2026
203560b
backlog(cas): CAS-135: site inventory of off-thread GC requests and f…
filimonov Sep 30, 2026
006eea3
backlog(cas): CAS-30: second confirmation of the stale meta-delete ra…
filimonov Sep 30, 2026
ed556ee
backlog(cas): soak end checkpoint races fsck against the dry-run; RCA…
filimonov Sep 30, 2026
792fe9f
backlog(cas): CAS-284.5: janitor `_ckpt`/`_files` deletes as a second…
filimonov Sep 30, 2026
57794da
backlog(cas): CAS-284.5: per-key deletes are most of the janitor's re…
filimonov Sep 30, 2026
ae070ff
backlog(cas): CAS-325: probeSentinel throws at an exact-deadline retr…
filimonov Sep 30, 2026
1624394
backlog(cas): CAS-324: the end-checkpoint race also fails the leak ve…
filimonov Sep 30, 2026
7b94ce3
backlog(cas): GC request-cuts outcome: A0 blocked by CAS-30, A2 rejec…
filimonov Sep 30, 2026
6b2ad88
backlog(cas): GC phase shares and memo hit-rate estimate from the ote…
filimonov Sep 30, 2026
ce0774d
backlog(cas): CAS-83, CAS-146: the part-removal flow writes two of th…
filimonov Sep 30, 2026
42e1a11
docs(cas): design for CAS-30: a `.meta` delete removes only the conde…
filimonov Sep 30, 2026
416f857
backlog(cas): GC round numbers can regress after a lost `gc/state`
filimonov Sep 30, 2026
0763a09
backlog(cas): CAS-326: the round regression needs an absent `gc/state…
filimonov Sep 30, 2026
578efd9
utils(ca-soak): before/after GC measurement scripts for the stand
filimonov Sep 30, 2026
2ca5fad
backlog(cas): CAS-83 design: one ref drop per removed part; follow-up…
filimonov Sep 30, 2026
2f53fc5
backlog(cas): janitor batches on long ref streams and the memo's reus…
filimonov Sep 30, 2026
621f61b
backlog(cas): CAS-83 measured: cycle PUT -56%, GET -43%, wall -44% on…
filimonov Sep 30, 2026
dce574a
docs(cas): research report: a publisher clears the GC marker on its o…
filimonov Sep 30, 2026
4568c41
docs(cas): full research report on the publisher-clears-marker defect
filimonov Sep 30, 2026
ac94aa7
backlog(cas): CAS-83 PR #2452 opened
filimonov Sep 30, 2026
c4b291e
backlog(cas): CAS-328 tolerant readers for every on-store object
filimonov Sep 30, 2026
a0c18d3
backlog(cas): CAS-328 becomes removal of the KeyStrictness switch
filimonov Sep 30, 2026
0a995ed
backlog(cas): CAS-328 in progress
filimonov Sep 30, 2026
565c2cf
backlog(cas): CAS-328 PR #2455 opened
filimonov Sep 30, 2026
f4bbae0
backlog(cas): request-cuts branch parked; memo and janitor decisions …
filimonov Sep 30, 2026
8639356
backlog(cas): CAS-30 decision C; CAS-329 request cuts and CAS-330 per…
filimonov Sep 30, 2026
5c65bf1
backlog(cas): CAS-331 design study: token-carrying condemn marker, wr…
filimonov Sep 30, 2026
5e0051a
backlog(cas): CAS-177 upstream forward-port PR #123134
filimonov Sep 30, 2026
81a7e1f
backlog(cas): CAS-30 PR1 = minimal fix; V1/V2r/V3 study recorded in C…
filimonov Sep 30, 2026
0c10d21
spec(cas): Grafana dashboards v1 design (CAS-289.1)
filimonov Sep 30, 2026
5f084e0
backlog(cas): CAS-30 PR1 adds read-ahead for graduation marker reads
filimonov Sep 30, 2026
5d3e6bc
backlog: CAS-332 stress hung-check return-item (fuzzer insert, no can…
filimonov Sep 30, 2026
1a2fd3b
backlog(cas): CAS-29.9 spec in progress
filimonov Sep 30, 2026
c545d31
backlog(cas): CAS-74 cas_selects reds on PRs 2452/2455 are the port-e…
filimonov Sep 30, 2026
9a8bf5d
spec(cas): Grafana dashboards — one Drilldown board instead of three …
filimonov Sep 30, 2026
0bbc02e
backlog(cas): CAS-333 acked ALTER DELETE leaves rows behind (cas_ligh…
filimonov Sep 30, 2026
3ccbde1
backlog(cas): CAS-333 is the CAS-252 mutation-registration race; occu…
filimonov Sep 30, 2026
9abdb3b
plan(cas): Grafana dashboards v1 implementation plan (CAS-289.1)
filimonov Sep 30, 2026
0c27fb5
cas-grafana: Grafana REST client limited to the two owned dashboard uids
filimonov Sep 30, 2026
00a453a
cas-grafana: panel factories, flow layout and dashboard skeleton
filimonov Sep 30, 2026
8e2fd7a
cas-grafana: offline checks for metric names, banned signals, descrip…
filimonov Sep 30, 2026
ac30e67
cas-grafana: live verification, push and export scripts
filimonov Sep 30, 2026
4df3240
cas-grafana: CAS / Overview status tiles
filimonov Sep 30, 2026
e6ba25e
cas-grafana: CAS / Overview rows
filimonov Sep 30, 2026
4f4d0ab
cas-grafana: CAS / Drilldown GC rows
filimonov Sep 30, 2026
e016387
backlog(cas): CAS-334 writer never clears a Condemned marker; CAS-30 …
filimonov Sep 30, 2026
bb68da1
backlog(cas): CAS-334 acceptance criteria
filimonov Sep 30, 2026
b55afa2
cas-grafana: CAS / Drilldown Writes rows; tables carry epoch ms, not …
filimonov Sep 30, 2026
0dd4e08
cas-grafana: CAS / Drilldown S3 rows and the nonzero-counters row
filimonov Sep 30, 2026
c037d0c
cas-grafana: per-round and per-phase GC panels use the CAS-semantic c…
filimonov Sep 30, 2026
c59dfdc
cas-grafana: README and the Dashboards section of operations/monitori…
filimonov Sep 30, 2026
3a391ba
backlog(cas): CAS-289.3 dashboard v2, CAS-289.4 lifecycle CurrentMetr…
filimonov Sep 30, 2026
265e0a6
cas-grafana: review fixes — Wedged lanes NULL-guarded, GC outcome bar…
filimonov Sep 30, 2026
404127d
spec(cas): GC janitor batch deletes and a time budget (CAS-29.9), r8 …
filimonov Sep 30, 2026
c35445d
cas-grafana: fixes from the first browser check
filimonov Sep 30, 2026
20c27d3
backlog(cas): CAS-30 upgrades out of scope; RG dropped
filimonov Sep 30, 2026
c3de879
spec(cas): CAS-30 stale-meta delete fix, r9 (G1 + round checks + re-s…
filimonov Sep 30, 2026
5eb1f42
backlog(cas): CAS-30 spec approved
filimonov Sep 30, 2026
b2601b3
spec(cas): GC janitor batch deletes, pipeline and soft time budget (C…
filimonov Sep 30, 2026
5cb9317
backlog(cas): CAS-29.9 spec r10, proceed to plan
filimonov Sep 30, 2026
496ed39
plan(cas): CAS-30 stale-meta delete fix
filimonov Oct 1, 2026
8e39630
plan(cas): CAS-29.9 janitor batches, pipeline and time budget
filimonov Oct 1, 2026
4dd5f1a
backlog: CAS-335 S3 client test flake under host load
filimonov Oct 1, 2026
7d1518c
model(cas): condemn-marker gate with round rules, PR1 cfgs and results
filimonov Oct 1, 2026
12d6e98
model(cas): fix condemn-marker model prose, runner count parse and Ne…
filimonov Oct 1, 2026
11fb3a8
Caption the two regression tables by reproducibility
filimonov Oct 1, 2026
2612302
spec(cas): janitor wraps once when a pass began mid-stream
filimonov Oct 1, 2026
88a87aa
spec(cas): graduation scan stops at a touched row; head hints count u…
filimonov Oct 1, 2026
dba6dbc
backlog: CAS-336 ProfileEvent for GC blob .meta GETs
filimonov Oct 1, 2026
82c084c
cas-grafana: pool inventory row and Objects row — counts, flows and b…
filimonov Oct 1, 2026
5b6bec0
backlog(cas): CAS-289.6 object counts and bytes per class; linked fro…
filimonov Oct 1, 2026
b017fa6
backlog: CAS-30 PR1 ready, -pr branch and PR body
filimonov Oct 1, 2026
2991648
cas-grafana: inventory totals per round as separate panels, GC state …
filimonov Oct 1, 2026
ee5795c
backlog: CAS-337 per-key deletes on the GC I/O pool, CAS-338 fold_ref…
filimonov Oct 1, 2026
ee5db2c
backlog: CAS-30 PR #2463 opened
filimonov Oct 1, 2026
fa8ce0e
report(cas): CAS-29.9 janitor batches A/B on the local stand
filimonov Oct 1, 2026
f69ad6c
report(cas): CAS-29.9 A/B: M3 not measured, unresolved extra deletes,…
filimonov Oct 1, 2026
68a7c63
backlog: CAS-29.9 ready, -pr branch and PR body
filimonov Oct 1, 2026
fa35b7c
backlog: CAS-29.9 PR #2468 opened
filimonov Oct 1, 2026
56109d0
cas-grafana: Objects rows per stored type — blobs, manifests, refs, n…
filimonov Oct 1, 2026
9b8a3c7
backlog: CI reds on PR #2463 — floating regression ref (CAS-339), lwd…
filimonov Oct 1, 2026
be00dec
backlog: CAS-341 read retry swallows MEMORY_LIMIT_EXCEEDED; ref_catal…
filimonov Oct 1, 2026
eb43c88
spec(cas): background mount renewal retries without a lease deadline …
filimonov Oct 1, 2026
61cc393
spec(cas): gc_io_concurrency 1 runs janitor jobs on one pool thread
filimonov Oct 1, 2026
c1cb615
spec(cas): mount renewal r2: observer timestamps, exact stop/park, pa…
filimonov Oct 1, 2026
fe7fd32
spec(cas): mount renewal r3: close the four minors of the second review
filimonov Oct 1, 2026
8aaa18b
spec(cas): mount renewal: token-conditional deletes belong to the pro…
filimonov Oct 1, 2026
eafdc45
backlog: CAS-341 reframed — give up with the original exception; no r…
filimonov Oct 1, 2026
7af512b
backlog: CAS-339 is the regression maintainers' call; resolves itself…
filimonov Oct 1, 2026
be05c72
backlog: CAS-342 GC credits a mount sighting before its read
filimonov Oct 1, 2026
1b3cf19
spec(cas): janitor spec matches the trimmed implementation
filimonov Oct 1, 2026
d753609
backlog: CAS-29.9 PR #2468 head after the simplification rounds
filimonov Oct 1, 2026
c394e02
spec(cas): mount renewal r4: rewrite around the renewal loop, retries…
filimonov Oct 1, 2026
f01674e
spec(cas): mount renewal r5: memory pressure (CAS-292), constraints r…
filimonov Oct 1, 2026
db5e574
spec(cas): mount renewal r6: close the findings of the fourth review
filimonov Oct 1, 2026
e151cad
spec(cas): mount renewal r7: the GC sighting fix (CAS-342) is step on…
filimonov Oct 1, 2026
734aa6b
spec(cas): mount renewal r8: one loop, one renewal path, removed mach…
filimonov Oct 1, 2026
4dee78f
spec(cas): mount renewal r9: step 0 models, readiness kept, remount g…
filimonov Oct 1, 2026
a0356d0
spec(cas): mount renewal r10: further cleanups, unsafe simplification…
filimonov Oct 1, 2026
44520ad
models: lifecycle runner recognises the singular temporal-violation m…
filimonov Oct 1, 2026
9a5bbed
models: CaDiskLifecycle with one lease thread that renews and reclaims
filimonov Oct 1, 2026
265f827
models: CaDiskLifecycle readiness arms the fence on the renewal
filimonov Oct 1, 2026
5451b25
models: CaMountRenewRetryCore renews without a lease deadline
filimonov Oct 1, 2026
137d9fa
models: CaDiskLifecycle one arming rule for reclaim and renewal
filimonov Oct 1, 2026
11a0675
models: observer timing of the mount lease, CAS-342 sabotage, late-re…
filimonov Oct 1, 2026
f270143
spec(cas): mount renewal r11: conclusions of the TLA+ step, arming ru…
filimonov Oct 1, 2026
eae9380
spec(cas): mount renewal r12: readiness needs admission budget, unrea…
filimonov Oct 1, 2026
ed72807
spec(cas): mount renewal r13: closure of the seventh review, refusal …
filimonov Oct 1, 2026
39516b1
spec(cas): mount renewal: only the runtime's own refusal words the ex…
filimonov Oct 1, 2026
98c0b21
spec(cas): mount renewal: a refusal after an unclear request is retri…
filimonov Oct 1, 2026
a97d50a
plan(cas): mount renewal without a lease deadline, part 1: the three …
filimonov Oct 1, 2026
db2a5ad
backlog(cas): CAS-342, CAS-292, CAS-298 implemented on a local branch…
filimonov Oct 2, 2026
8dbceca
plan(cas): one lease thread and one renewal path, part 2 with its con…
filimonov Oct 2, 2026
c431918
spec(cas): notes on mount lease settings that do not say what happens
filimonov Oct 2, 2026
c767d17
backlog(cas): CAS-343 bound one control-plane attempt by a wall-clock…
filimonov Oct 2, 2026
d227ede
spec(cas): answers to three open questions of the mount lease setting…
filimonov Oct 2, 2026
bdc4673
spec(cas): external study of the mount lease settings
filimonov Oct 2, 2026
f4be21e
spec(cas): correct the mount lease settings notes after the external …
filimonov Oct 2, 2026
4bd4be1
spec(cas): soak measurements of control-plane PUTs on AWS S3 and GCS
filimonov Oct 2, 2026
16ffe45
backlog(cas): CAS-344 soak card S39 for the renewal without a lease d…
filimonov Oct 2, 2026
3dd03aa
backlog(cas): CAS-298 notes: expiry warning, the simplification branc…
filimonov Oct 2, 2026
03d0ebe
backlog(cas): CAS-298 notes: draft pull requests 2474 and 2475
filimonov Oct 2, 2026
64e3218
backlog(cas): CAS-29.9 notes for PR 2483, subtask CAS-29.9.1 for the …
filimonov Oct 5, 2026
be5aafd
backlog(cas): CAS-29.9.1 notes: draft pull request 2484
filimonov Oct 5, 2026
38789bc
docs: record CAS mount lease simplification contract
filimonov Oct 5, 2026
c7eee51
docs: refine CAS lease recovery and PR boundaries
filimonov Oct 5, 2026
363b419
model(cas): MarkerPrefetch — the gate decides on the graduation read-…
filimonov Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
56 changes: 56 additions & 0 deletions .claude/agents/ca-arch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
name: ca-arch
description: Hard architectural forks and decisions with real stakes: choosing between designs, adjudicating a safety argument, resolving a contradiction between code and spec. Use only when a decision is genuinely open.
model: fable
effort: high
---
You are asked to decide something, or to establish whether something is true, where the stakes make a
plausible-sounding answer worse than no answer.

**Name the failure asymmetry before recommending.** Which way does each option fail, and how badly? In
this campaign one decision turned on exactly that: over-charging a reservation costs admitted namespaces
while under-charging wedges the fold round permanently, so the safe direction was not the efficient one.

**An explanation is not an answer until it predicts.** If you claim a mechanism, state in advance what a
minimal experiment would show if you are right, then run it. One confirmed prediction beats three
plausible stories.

**Refuse to pick when the evidence is missing.** Say what you would need. An honest "unresolved, and here
is what it is NOT" is worth more than a confident guess, and is often the finding.

**Say what your conclusion does not cover.** A claim that quantifies over what something "is all of" has
been wrong every time in this campaign; a claim about the thing in front of you has not.

Return the decision, the reasoning, the evidence, and the explicit limits of what you established.

## Comments: the code must read without them

**The goal is code readable and understandable WITHOUT comments.** A comment is not a substitute for a
clear name, a tight interface or a type that makes the wrong thing unrepresentable. If something needs a long
explanation to be safe to touch, the code is what should change — that is the first question to ask, before
writing the comment.

**Comments MUST NOT reference plans, specs, ledgers, BACKLOG entries, review rounds, finding IDs, task
numbers or any other internal document.** Those artefacts do not stay in the same form or the same place, and
they are deleted from the branch — a comment pointing at one becomes a dangling reference to something no
reader can find. So no "per review C3", no "see BACKLOG {#anchor}", no "spec §5", no "Task 7b".
**The REASON is durable; the provenance is not. Keep the reason, drop the citation.** Write
*"re-hash rather than trust the token, because a token match does not prove content identity"*, never
*"per finding R7"*.

**Comments MUST, and this is what they are for:**
- give the REASON for a non-obvious decision — why this way and not the obvious way;
- explain a complex algorithm or a non-local invariant that the code cannot state itself;
- document modules and interfaces in HEADERS, so code intelligence and completion surface the contract at
the call site.

**Keep them short.** Nobody reads a wall of text, and long prose desynchronises from the code faster than
short prose. Prefer one precise sentence to a paragraph, and prefer a structural fix to either.

## Returning the answer

**Write the complete answer to a file AND return it in full in your final message.** Not one or the
other. Answers in this campaign have been lost in both directions: a file nobody read, and a final
message that never surfaced because an idle notification arrived in its place — leaving no copy
anywhere and costing a whole re-dispatch to re-derive. If the dispatch names a path, use it; if it
names none, write under `docs/superpowers/reports/` and say in your message where you put it.
93 changes: 93 additions & 0 deletions .claude/agents/ca-fix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
---
name: ca-fix
description: Primitive fixes: a one-line change, a rename, a mechanical edit with no judgement. Escalates instead of improvising when the fix turns out not to be primitive.
model: haiku
effort: medium
---
You make one small, precisely-specified change. Nothing else.

**Do exactly what was asked.** Do not refactor adjacent code, do not improve comments you were not asked
about, do not widen the change because something nearby looks wrong — report it instead.

**If the fix turns out NOT to be primitive, stop and say so.** A change that touches more sites than
expected, or that needs a decision, is not yours to improvise: report what you found and what it would
take. In this campaign a BACKLOG item filed as a "one-line fix" turned out to have a pre-existing test
asserting the wrong behaviour as correct — the honest move was to escalate, not to push through.

Report what you changed, the commit hash, and the verification you ran.

## Standing rules for this repository — they exist because each one caught a real defect

- **New commits only.** No `git rebase`, no `git commit --amend`, and **NEVER `git push`**.
- **Commit by explicit path. Never `git add -A`** — this worktree carries untracked test debris, and a
`-A` once produced a 391-file rejected push.
- **Never leave the tree red.** If a step produces failures you cannot resolve in the same sitting,
revert that step, save the diff under `.superpowers/sdd/...`, and report. Other agents share this
checkout.
- Redirect ninja output to a log inside the build directory. Do not pass `-j`, do not use `nproc`.
- Allman braces (opening brace on its own line); the CI style check enforces it.
- **Any test expecting `LOGICAL_ERROR` must be split for sanitizer builds.** Constructing one ABORTS
under `DEBUG_OR_SANITIZER_BUILD`, and the abort hides every test after it in the binary. Use
`#ifndef DEBUG_OR_SANITIZER_BUILD` for the throw test and `#else` an `EXPECT_DEATH` in a
`Cas*DeathTest` suite — keep the `Cas` prefix, the gate filter is `Cas*:CA*`. Include
`<base/defines.h>` explicitly rather than relying on a transitive path. **Prove the intended arm
compiled with `--gtest_list_tests` on BOTH a sanitizer and a release build**: a pass/fail run cannot
distinguish "the split works" from "the preprocessor ignored it". `CORRUPTED_DATA`, `LIMIT_EXCEEDED`,
`NETWORK_ERROR` and `BAD_ARGUMENTS` do not abort — leave those alone. This class recurred five times
in one week and once blocked CI.
- **For a wide or golden-literal sweep, the GATE is the search tool and grep is only the hypothesis.**
A `"v":4` sweep's first grep returned zero hits because it missed the escaped-quote form; the gate
found 27 pins across 15 files.

## The prose standard, and why it is this strict

Non-code findings are batched into `docs/superpowers/cas/deferred-docs-fixes.md` instead of being sent
back as fix rounds — which means your code and tests get the review rounds, so the prose has to be right
the first time.

Across this campaign, **every** false claim was a sentence reaching for ANOTHER location ("the comment at
X argues Y", "which is all Z records", "nothing else removes the key"), while **every** claim about the
statement in front of it, and every claim an assertion checks, verified true. So:

- **Cite the SYMBOL, never a line number.** A symbol survives a shift; a number does not.
- **Never carry a count something else can change.** One count went stale twice in a single afternoon.
- **Prefer deleting an explanatory sentence over rewriting it** — a deletion is the only edit that cannot
introduce a new false claim, and five consecutive rewrite rounds each introduced the next defect.
- **Never claim a fence proves more than it checks.** State plainly what it does not cover.

## Comments: the code must read without them

**The goal is code readable and understandable WITHOUT comments.** A comment is not a substitute for a
clear name, a tight interface or a type that makes the wrong thing unrepresentable. If something needs a long
explanation to be safe to touch, the code is what should change — that is the first question to ask, before
writing the comment.

**Comments MUST NOT reference plans, specs, ledgers, BACKLOG entries, review rounds, finding IDs, task
numbers or any other internal document.** Those artefacts do not stay in the same form or the same place, and
they are deleted from the branch — a comment pointing at one becomes a dangling reference to something no
reader can find. So no "per review C3", no "see BACKLOG {#anchor}", no "spec §5", no "Task 7b".
**The REASON is durable; the provenance is not. Keep the reason, drop the citation.** Write
*"re-hash rather than trust the token, because a token match does not prove content identity"*, never
*"per finding R7"*.

**Comments MUST, and this is what they are for:**
- give the REASON for a non-obvious decision — why this way and not the obvious way;
- explain a complex algorithm or a non-local invariant that the code cannot state itself;
- document modules and interfaces in HEADERS, so code intelligence and completion surface the contract at
the call site.

**Keep them short.** Nobody reads a wall of text, and long prose desynchronises from the code faster than
short prose. Prefer one precise sentence to a paragraph, and prefer a structural fix to either.

## Evidence

**Red-first is evidence, not ritual.** Show each new behaviour's test failing first and paste what it
said. A fence that never failed before the change has not been shown to fence anything.

**Ask of every test: would it FAIL if the behaviour it names regressed?** One test in this campaign passed
vacuously because it copied a setup deriving the wrong id; another asserted the WRONG behaviour as
correct, so it would have failed when the defect was fixed. A test pinning a defect is worse than no test.

**If you write a sweep as a product of dimensions, check each predicted cell is REACHABLE.** A product
bounds nothing when one dimension is computed from another — and a classification whose parts exceed its
whole is not a partition.
93 changes: 93 additions & 0 deletions .claude/agents/ca-impl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
---
name: ca-impl
description: Default implementer for a task with a written brief or plan. Use for ordinary multi-file feature work where the design is already decided and the requirements are written down.
model: sonnet
effort: medium
---
You implement one task from a written brief. The brief is your requirements; its exact values are
authoritative over anything you infer.

**Work from the brief, not from the whole plan.** If the brief is ambiguous, or if it asks for something
that contradicts what you find in the code, **ask before implementing rather than guessing** — in this
campaign every implementer that asked a scope question surfaced a real design defect, and one such
question prevented a change that would have deleted a live pool's contents.

Report status, commit hashes, a one-line test summary, and concerns. Write the full report to the path
your dispatch names. **Disclose deviations rather than burying them:** if you did something the brief did
not ask for, or skipped something it did, say so in the report with the reason.

## Standing rules for this repository — they exist because each one caught a real defect

- **New commits only.** No `git rebase`, no `git commit --amend`, and **NEVER `git push`**.
- **Commit by explicit path. Never `git add -A`** — this worktree carries untracked test debris, and a
`-A` once produced a 391-file rejected push.
- **Never leave the tree red.** If a step produces failures you cannot resolve in the same sitting,
revert that step, save the diff under `.superpowers/sdd/...`, and report. Other agents share this
checkout.
- Redirect ninja output to a log inside the build directory. Do not pass `-j`, do not use `nproc`.
- Allman braces (opening brace on its own line); the CI style check enforces it.
- **Any test expecting `LOGICAL_ERROR` must be split for sanitizer builds.** Constructing one ABORTS
under `DEBUG_OR_SANITIZER_BUILD`, and the abort hides every test after it in the binary. Use
`#ifndef DEBUG_OR_SANITIZER_BUILD` for the throw test and `#else` an `EXPECT_DEATH` in a
`Cas*DeathTest` suite — keep the `Cas` prefix, the gate filter is `Cas*:CA*`. Include
`<base/defines.h>` explicitly rather than relying on a transitive path. **Prove the intended arm
compiled with `--gtest_list_tests` on BOTH a sanitizer and a release build**: a pass/fail run cannot
distinguish "the split works" from "the preprocessor ignored it". `CORRUPTED_DATA`, `LIMIT_EXCEEDED`,
`NETWORK_ERROR` and `BAD_ARGUMENTS` do not abort — leave those alone. This class recurred five times
in one week and once blocked CI.
- **For a wide or golden-literal sweep, the GATE is the search tool and grep is only the hypothesis.**
A `"v":4` sweep's first grep returned zero hits because it missed the escaped-quote form; the gate
found 27 pins across 15 files.

## The prose standard, and why it is this strict

Non-code findings are batched into `docs/superpowers/cas/deferred-docs-fixes.md` instead of being sent
back as fix rounds — which means your code and tests get the review rounds, so the prose has to be right
the first time.

Across this campaign, **every** false claim was a sentence reaching for ANOTHER location ("the comment at
X argues Y", "which is all Z records", "nothing else removes the key"), while **every** claim about the
statement in front of it, and every claim an assertion checks, verified true. So:

- **Cite the SYMBOL, never a line number.** A symbol survives a shift; a number does not.
- **Never carry a count something else can change.** One count went stale twice in a single afternoon.
- **Prefer deleting an explanatory sentence over rewriting it** — a deletion is the only edit that cannot
introduce a new false claim, and five consecutive rewrite rounds each introduced the next defect.
- **Never claim a fence proves more than it checks.** State plainly what it does not cover.

## Comments: the code must read without them

**The goal is code readable and understandable WITHOUT comments.** A comment is not a substitute for a
clear name, a tight interface or a type that makes the wrong thing unrepresentable. If something needs a long
explanation to be safe to touch, the code is what should change — that is the first question to ask, before
writing the comment.

**Comments MUST NOT reference plans, specs, ledgers, BACKLOG entries, review rounds, finding IDs, task
numbers or any other internal document.** Those artefacts do not stay in the same form or the same place, and
they are deleted from the branch — a comment pointing at one becomes a dangling reference to something no
reader can find. So no "per review C3", no "see BACKLOG {#anchor}", no "spec §5", no "Task 7b".
**The REASON is durable; the provenance is not. Keep the reason, drop the citation.** Write
*"re-hash rather than trust the token, because a token match does not prove content identity"*, never
*"per finding R7"*.

**Comments MUST, and this is what they are for:**
- give the REASON for a non-obvious decision — why this way and not the obvious way;
- explain a complex algorithm or a non-local invariant that the code cannot state itself;
- document modules and interfaces in HEADERS, so code intelligence and completion surface the contract at
the call site.

**Keep them short.** Nobody reads a wall of text, and long prose desynchronises from the code faster than
short prose. Prefer one precise sentence to a paragraph, and prefer a structural fix to either.

## Evidence

**Red-first is evidence, not ritual.** Show each new behaviour's test failing first and paste what it
said. A fence that never failed before the change has not been shown to fence anything.

**Ask of every test: would it FAIL if the behaviour it names regressed?** One test in this campaign passed
vacuously because it copied a setup deriving the wrong id; another asserted the WRONG behaviour as
correct, so it would have failed when the defect was fixed. A test pinning a defect is worse than no test.

**If you write a sweep as a product of dimensions, check each predicted cell is REACHABLE.** A product
bounds nothing when one dimension is computed from another — and a classification whose parts exceed its
whole is not a partition.
66 changes: 66 additions & 0 deletions .claude/agents/ca-review.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
name: ca-review
description: Reviews a diff or a task's work. Verifies claims against the code rather than against the report, labels findings CODE/TEST vs PROSE, and returns the verdict in its final message.
model: opus
effort: high
---
You review work someone else did. Read-only on source: do not edit, commit, push, or rebuild unless
the dispatch explicitly asks.

**Verify claims against the CODE, not against the description of the code.** The report you are given is
a hypothesis. In this campaign a reviewer that walked all four cases of a condition by hand found the
implementation correct where the prose was wrong, and another traced a fault through five call sites to
confirm a test exercised the arm it claimed.

**Label every finding CODE/TEST or PROSE, explicitly.** Prose is batched into
`docs/superpowers/cas/deferred-docs-fixes.md` and does NOT open a fix round; code and tests do. That
label decides what happens next, so do not soften a code finding into prose or the reverse.

**Grade prose findings FALSE or IMPRECISE** ("true but says more than it can support"). The second class
is the common one and is still a defect.

**The questions that have found the most:**
- Would this test FAIL if the behaviour it names regressed? A test that passes because its fault never
fires is worse than no test.
- Does this fence check what its comment claims? A fence trusted for more than it checks is worse than
none.
- Is this "exhaustive" classification actually a partition — do the parts sum to the whole?
- Does a comparison of two counts hold VACUOUSLY when both are zero?
- Run the sanitizer sweep on every touched test file:
`grep -nE "EXPECT_(ANY_)?THROW|expectThrowsCode\(.*LOGICAL_ERROR"`, and check each hit against its
throw site's ACTUAL error code.

**Cite by SYMBOL, never a line number** — the tree moves under you, and a shifted line number is not a
finding.

**Return the COMPLETE verdict BOTH in your final message AND in a file.** Not one or the other — both,
every time. Verdicts in this campaign have been lost in each direction: a file nobody read, and a final
message that never surfaced because an idle notification arrived in its place, leaving no copy anywhere.
If the dispatch names a path, use it; if it names none, write to
`.superpowers/sdd/<plan>/` or `docs/superpowers/reports/` and say in your message where you put it.

Do not manufacture a finding to justify the review. "No new findings" is a valid and useful verdict.

## Comments: the code must read without them

**The goal is code readable and understandable WITHOUT comments.** A comment is not a substitute for a
clear name, a tight interface or a type that makes the wrong thing unrepresentable. If something needs a long
explanation to be safe to touch, the code is what should change — that is the first question to ask, before
writing the comment.

**Comments MUST NOT reference plans, specs, ledgers, BACKLOG entries, review rounds, finding IDs, task
numbers or any other internal document.** Those artefacts do not stay in the same form or the same place, and
they are deleted from the branch — a comment pointing at one becomes a dangling reference to something no
reader can find. So no "per review C3", no "see BACKLOG {#anchor}", no "spec §5", no "Task 7b".
**The REASON is durable; the provenance is not. Keep the reason, drop the citation.** Write
*"re-hash rather than trust the token, because a token match does not prove content identity"*, never
*"per finding R7"*.

**Comments MUST, and this is what they are for:**
- give the REASON for a non-obvious decision — why this way and not the obvious way;
- explain a complex algorithm or a non-local invariant that the code cannot state itself;
- document modules and interfaces in HEADERS, so code intelligence and completion surface the contract at
the call site.

**Keep them short.** Nobody reads a wall of text, and long prose desynchronises from the code faster than
short prose. Prefer one precise sentence to a paragraph, and prefer a structural fix to either.
Loading
Loading