You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Coordination Project 3 stays small and cheap to read, which is a user requirement (2026-10-31):
Hard limit. The board and its related skills and readers are limited to 500 items.
Done retention. When Done exceeds 200 items, every older Done item beyond the newest 200 is archived. Archive, don't delete.
Request budget. Readers, observers and skills spend fewer GraphQL and gh requests.
Done when
Policy. The 500-item limit and the 200-Done retention rule are stated in the canonical work-board and check-board guidance, as pointers rather than copies.
Archiver. A guarded archiver exists and has been used for real:
It ranks Done by close time, newest first.
It archives only beyond the newest 200.
It reads before it writes, writes once, then reads back, and never resends after an uncertain send.
It is safe with the V2 enrollment manifest: archived enrolled rows are handled explicitly, never as a silent refusal or a missing row.
Readers.
The engine reader cap is raised to 500, released in the next coherent patch.
Board readers stop paging archived items.
The request cost before and after is measured.
Over the limit. A board above 500 items is refused or flagged deterministically, not paged without bound.
Blocked on
Nothing. Don't archive anything while the cohort-90 enrollment batches (#4941) are applying.
Filed by Root/fdev from the user's request, 2026-10-31. Refs #5097.
#5119 owner progress, 2026-10-31. Nothing has been archived and no board field was written.
Q1: does the items connection return archived items?
GraphQL items.ProjectV2.items(archivedStates = [NOT_ARCHIVED], query = "") excludes archived items by default. On P3 the live counts are 222 not archived and 0 archived. Readers that page items therefore never page archived cards: the engine readMemberships and migration-prepare reads, board-drift-fetch, board-currency-fetch, and board_snap.
Server-side filter. The query: filter works: status:Done returns 107, and -status:Done returns 115.
REST. The archived default of /orgs/FS-GG/projectsV2/3/items is Unknown: q=is:archived returned all 222. I will probe it at the first real archive.
Q2: what happens to an enrolled row whose card is archived?
Before this series, the result was silently inconsistent. The row read normally through projectItems, but it was missing from memberships, and nothing cross-checked the two. PR 3 makes it explicit (details below). No manifest retirement step is needed.
Q3: what does a full board read cost? (measured live, 222 items)
Reader
Before
After (series)
Engine readMemberships / migration items
5 requests, 5 points (first:50)
3 / 3 at first:100 (not yet changed)
board-drift-fetch, hourly
156 gh calls (151 REST comment reads)
26 (21 comment reads), PR 4
board-currency-fetch
5 GraphQL requests, 5 points
3 requests, 6 points, PR 4
board-v2 inspect, 207 rows
0.114.0: stopped at the 500-send ceiling after 2,502 reads, 0/207 Current
routine/5119-archived-enrolled (pushed, not opened yet): an explicit archived membership and discrepancy, a membership cross-check gap for any other disagreement, a writer 409, and the board_v2_native_results.py validator.
routine/5119-observer-reads (pushed, not opened yet): drift comment reads skip quiet cards; currency reads pages of 100.
routine/5119-done-retention (pushed, not opened yet): replaces the Project 1 sweeper with the Project 3 Done-retention archiver, plus its selftest and the record of why the old one was retired. The workflow is counts-only and dry-run. Live dry run: 107 Done, nothing to archive.
routine/5119-policy-pointers (pushed, not opened yet): pointers in work-board and check-board, with the skill manifests regenerated.
First real archiver run. It waits for three things: the end of the cohort-90 apply, an installed 0.114.1 reader, and Root's go. Done is 107 today, so no archive is due.
The live evidence is now one retained run, kept privately by the owner: 120.1 s, 87 GraphQL points, 19 REST, 205/207 Current, no membership or population gap, 0 mutations.
Release note for whoever prepares 0.114.1 (Root): the rebind must warn do not roll back below 0.114.1 once more than 250 rows are enrolled, because 0.114.0 readers refuse more than 250 rows.
#5119 release-note handoff for whoever prepares the coherent 0.114.1 release (Root). This adds to issuecomment-6547585872.
No rollback below 0.114.1 above 250 rows. Once more than 250 rows are enrolled, do not roll back below 0.114.1: 0.114.0 readers refuse more than 250 rows.
Root accepts the whole #5119 Outcome on 2026-11-05 after reconciling every original assertion, including the later user-approved retention supersession. This is explicit Outcome acceptance, not closure from child statuses.
Policy: protected main 8465501f has matching canonical work-board/check-board pointers: maximum500 items; at200 or more ACTIVE Done, keep newest50 under the later approved policy, finite450 archive cap. The original keep200 wording remains historical and is superseded by the accepted First real Done-retention archive run with --execute (when Done exceeds 200) #5170 policy.
Fresh readback independently rehashed all83 reader files plus5 config/source files, joined the accepted receipt and current224 binding, and confirmed the daily04:43UTC Persistent timer is active. The first natural old-tuple evidence remains distinct from the later accepted224-input manual no-op. No new natural successor-tuple invocation or global owner-pipeline adoption is claimed. All original failures, mixed-history limits and superseded policy text remain preserved.
The scoped independent verdicts and Root acceptance are recorded in the linked source/rollout evidence. No remaining #5119 assertion was identified; standing maintenance #5097 stays separate. Closing this Outcome as COMPLETED.
Activity
EHotwagner commentedon Oct 31, 2026
#5119 owner progress, 2026-10-31. Nothing has been archived and no board field was written.
Q1: does the
itemsconnection return archived items?items.ProjectV2.items(archivedStates = [NOT_ARCHIVED], query = "")excludes archived items by default. On P3 the live counts are 222 not archived and 0 archived. Readers that pageitemstherefore never page archived cards: the enginereadMembershipsand migration-prepare reads,board-drift-fetch,board-currency-fetch, andboard_snap.query:filter works:status:Donereturns 107, and-status:Donereturns 115.Issue.projectItems(includeArchived = true)includes archived cards by default, so the engine's per-issue membership and planning reads do see them. The board gate in routine-delivery: pre-enforce controls for the board gate (Refs #5094) #5115 opts out withincludeArchived:false./orgs/FS-GG/projectsV2/3/itemsis Unknown:q=is:archivedreturned all 222. I will probe it at the first real archive.Q2: what happens to an enrolled row whose card is archived?
Before this series, the result was silently inconsistent. The row read normally through
projectItems, but it was missing frommemberships, and nothing cross-checked the two. PR 3 makes it explicit (details below). No manifest retirement step is needed.Q3: what does a full board read cost? (measured live, 222 items)
readMemberships/ migration itemsboard-drift-fetch, hourlyboard-currency-fetchboard-v2 inspect, 207 rowsSeries (each PR is
Refs #5119, one concern each; at most 2 open at a time)routine/5119-archived-enrolled(pushed, not opened yet): an explicit archived membership and discrepancy, a membership cross-check gap for any other disagreement, a writer 409, and theboard_v2_native_results.pyvalidator.routine/5119-observer-reads(pushed, not opened yet): drift comment reads skip quiet cards; currency reads pages of 100.routine/5119-done-retention(pushed, not opened yet): replaces the Project 1 sweeper with the Project 3 Done-retention archiver, plus its selftest and the record of why the old one was retired. The workflow is counts-only and dry-run. Live dry run: 107 Done, nothing to archive.routine/5119-policy-pointers(pushed, not opened yet): pointers in work-board and check-board, with the skill manifests regenerated.Held
TMPDIR.projectItemsreads in the v1 engine (Board.fs,Done.fs) are not yet changed to handleisArchivedexplicitly.EHotwagner commentedon Oct 31, 2026
#5119 owner update, 2026-10-31 ~18:45Z.
5b33d5fc, then retargeted tomain:1f3f1cd2. Its range-diff against5b33d5fcis=(identical patch).f6e0a364is the new head. It scopes the ceiling and deadline to inspect measurements, fixes the 203/204 mismatch, and corrects the per-row claim (also corrected in the merged coord: 500-row programme cap and a scaled refresh request ceiling (Refs #5119) #5122 body).board-v2 refreshis unbatched at about 6 sends per row and stops after about 80 rows inside the inspect-derived budget. The preferred fix is to batch it in this series.routine/5119-done-retention) and PR 6 (routine/5119-policy-pointers); cli-join engine tests share the production board-v2 migration/observation lock path #5126; the v1Board.fs/Done.fsisArchivedhandling; the first real archiver run.EHotwagner commentedon Oct 31, 2026
#5119 release-note handoff for whoever prepares the coherent 0.114.1 release (Root). This adds to issuecomment-6547585872.
archivedmembership key (coord: explicit archived enrolled cards and a membership cross-check in inspect (Refs #5119) #5132), and an olderscripts/board_v2_native_results.pyrefuses every 0.114.1 inspection withunsupported-result-shape. That includes inspections with no archived card, because the key is always present. 0.114.1 CLI-update qualification must therefore run a validator that includes coord: explicit archived enrolled cards and a membership cross-check in inspect (Refs #5119) #5132, meaningmainat or after its merge, not an older checkout.Archived. From coord: explicit archived enrolled cards and a membership cross-check in inspect (Refs #5119) #5132, an archived enrolled row has healthArchived, neverVerified. It does not count inverified, and action selection treats it as needs-decision.EHotwagner commentedon Nov 1, 2026
Root/fdev, 2026-11-01:
coord-board-archive.ymlwas stilldisabled_manuallyfrom the old sweeper, so no daily dry run had happened since board: replace the Project 1 sweeper with the Project 3 Done-retention archiver (Refs #5119) #5143. It is nowactive.EHotwagner commentedon Nov 5, 2026
Root accepts the whole #5119 Outcome on 2026-11-05 after reconciling every original assertion, including the later user-approved retention supersession. This is explicit Outcome acceptance, not closure from child statuses.
8465501fhas matching canonical work-board/check-board pointers: maximum500 items; at200 or more ACTIVE Done, keep newest50 under the later approved policy, finite450 archive cap. The original keep200 wording remains historical and is superseded by the accepted First real Done-retention archive run with --execute (when Done exceeds 200) #5170 policy.d3fbac76), coord: cut inspection reads per row and scale the deadline (Refs #5119, Refs #5121) #5127 (12eb2f17), observers: skip comment reads for quiet cards; pin the currency board read to the 500-item limit (Refs #5119) #5130 (a373ccb8) and coord: explicit archived enrolled cards and a membership cross-check in inspect (Refs #5119) #5132 (7c635351) deliver the cap, bounded reads, observer savings and explicit archived enrollment handling. The released/physically qualified0.116 reader retains500-row deterministic refusal. Current qualified inspection of224 enrolled identities reconciles383 live/archived identities, including139 archived, without population/membership gaps or mutations; archived cards are excluded from live paging and remain explicit in enrollment reconciliation.Fresh readback independently rehashed all83 reader files plus5 config/source files, joined the accepted receipt and current224 binding, and confirmed the daily04:43UTC Persistent timer is active. The first natural old-tuple evidence remains distinct from the later accepted224-input manual no-op. No new natural successor-tuple invocation or global owner-pipeline adoption is claimed. All original failures, mixed-history limits and superseded policy text remain preserved.
The scoped independent verdicts and Root acceptance are recorded in the linked source/rollout evidence. No remaining #5119 assertion was identified; standing maintenance #5097 stays separate. Closing this Outcome as COMPLETED.