Repository navigation
Conversation
The store-free `next` (read::next_active) now ranks a plugin with `related` / `count` / `sum` keys from a RankingGraph on ActiveBoard, by the same evaluation the store path runs. Owner decision 2026-10-11: a key reads every LIVE neighbour (closed and archived count, deleted do not) on both paths. - facade: ActiveBoard::ranking, RankingReads, RankingGraph, Neighbour, next_ranking_reads, with_ranking (the parity oracle); derived.rs split into plan / context fill (store or graph) / finish. A [ranking.next] order reading the rank of a type only [ranking.list] orders is refused on the store-free path until xkr7. - fold-ddb: .adj# entries copy from_id/to_id/kind/lamport/site and a removed flag, kept on edge removes; INDEX_REVISION 2 -> 3 (old streams NotCurrent until refolded); records::with_ranking reads the graph. Table contract unchanged (no new GSI, no new key attribute). - core: EdgeKind and graph::Edge derive Ord. - tests: derived_differential (SQL = Board = fold-ddb on generated boards, determinism, request-count guard, revision-2 refold), facade seam tests for live neighbours and the list-rank refusal. - spec §6/§10.5/§11/§12 amended. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016q5uMUkZJQW4fckJoA3FME
This was referenced Oct 11, 2026
cabcookie
added a commit
that referenced
this pull request
Oct 11, 2026
…SI and a ranked hosted list (nxf 6j6v.1c5s, xkr7) (#56) Folds #54 (1c5s) and #55 (xkr7) plus the mitigation of their combined independent review. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016q5uMUkZJQW4fckJoA3FME
Member
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The hosted server now ranks
nextby derived ranking keys (related/count/sum), using the same evaluation as the local SQL path. This implements specdocs/specs/derived-ranking-keys.md§6. Owner decision 2026-10-11 (§10.5): a key reads every LIVE neighbour on both paths. Deleted neighbours are gone; closed and archived ones still count. This replaces the first wording of §6 ("a counterpart that is not active counts as absent"), which is now the rule of the lanes only.facade (
nexus-flow-facade), additiveActiveBoard::ranking: Option<RankingGraph>(the struct is#[non_exhaustive]).RankingReads{ kinds, labels, custom } andnext_ranking_reads(cfg), which says what the graph must hold for a plugin.RankingGraph{ reads, edges, neighbours }.edgesholds every present edge of the kinds read that has an active end and two live ends.parentedges are thepresent_parentprojection.neighboursholds the live items that are not active, with their row (includingbelongs_to), labels and custom values.Neighbour.read::with_ranking(store, board, reads): the parity oracle for the server read.next_activeranks from the graph. It refuses withvalidationwhen the graph is missing or was read for less than the keys need.[ranking.next]order that reads the rank of a type only[ranking.list]orders, directly or down the chain. The refusal is narrow: every other derivednextkey works hosted.derived.rsis split into plan, context fill (from a store or from a graph) and finish. Both paths evaluate keys through the sameContext.fold-ddb (
nxs-fold-ddb).adj#<item>#<tag>entries are now self-describing. They copyfrom_id,to_id,kind,lamportandsiteand carry aremovedflag, which is rewritten when the remove is folded.INDEX_REVISIONgoes from 2 to 3.records::with_ranking(table, board, reads)costs:core
EdgeKindandgraph::EdgederiveOrd.graph::Boardis otherwise unchanged. It holds no rows, and the lanes read no non-active neighbour, so the rows and edges the keys need live on the facade'sActiveBoard. The spec text is amended to say so.Deployment facts (for app-foundations)
.adj#rows, which are on no index.records::active_boardanswersRecordsError::NotCurrent { found: Some(2) }until the fold run has cleared and refolded the stream (the existingFolder::is_currentrule; no new step).facade: changed, additive).Tests
crates/fold-ddb/tests/derived_differential.rs(new):waitinglabels and the goals'ordercustom field. Each is folded in shuffled order with duplicate ops.RankingGraphare equal; the same graph comes back from a second fold in a different order (determinism); coverage counters (closed and archived neighbours, inbound contributes_to, mentions from inactive items, inactive children, dropped deleted ends, children parented twice, projects ordered against their priority).crates/facade/tests/derived_ranking.rs:readtests,cargo xtask docs check,cargo xtask changelog check origin/main,cargo fmt --all. Clippy was not run locally (CI).Left for xkr7
typedGSI: the table-contract change, stack first, then the read.of = "rank"(derived::reads_for_next/list_scope_refusal).listread..adj#entries exist and describe themselves for EVERY edge between ANY items, so a list-ranked item reads its edges with one Query on its own prefix.records::with_rankingshows how:present_edges,current_parent, then neighbour rows, labels and custom values.Refs nxf 6j6v.1c5s; spec 6j6v.e354.
🤖 Generated with Claude Code
https://claude.ai/code/session_016q5uMUkZJQW4fckJoA3FME