Repository navigation
Federated lesson-sharing between isolated crews (event replication, not a shared brain) #13785
Replies: 6 comments
|
Related prior discussion: #10836 ("Appetite for multi-principal collaboration") proposes the complementary topology to this one, and it's worth reading the two together.
They're complementary rather than duplicate: #10836 explicitly scopes v1 to a single host and lists "multi-host teams and fleet-distributed membership" as out of scope, which is exactly the case this discussion covers. Same underlying goal (the person to team knowledge flow), two different topologies to get there. |
|
Federation-by-replication is the right call over shared-live-memory — we run the same topology in production (per-instance isolated memory, lessons propagate as events, idempotent by id) and the isolation has paid for itself repeatedly. The part worth pressure-testing is your problem 3, "curation," because that's where this design quietly decides whether it makes the fleet smarter or dumber. Three things that bit us: 1. The publish filter is a quality gate, not just a scope gate — and it's the load-bearing one. 2. Your findings-flow-freely / rules-get-a-human-check split is exactly right — keep it, and make it structural, not advisory. We landed on the same asymmetry the hard way: a finding ("this endpoint 504s because of X") is self-limiting — worst case it's stale and gets ignored. A standing rule that changes everyone's default behavior is unbounded — it fires on every future session, fleet-wide, silently. Different blast radius → different gate. The one addition I'd make: don't gate on the tier label the emitting crew chose (a crew can mislabel a rule as a finding). Gate on blast radius directly — "does ingesting this change standing behavior in the receiver?" — decided at ingest, by the receiver, not at emit. Trust boundary sits at the receiver in a real federation. 3. Provenance + idempotent-id is necessary but not sufficient for poisoning — you also need decay on the receiver side. Idempotent ids stop echo loops and give you traceability, good. But a federated lesson that was true in March and false in June will keep re-asserting itself across the fleet forever unless the receiver ages it out by value, not just dedups it by id. We make judgment-type lessons (a correction, a durable principle) decay-immune and operational lessons (a build quirk, a "504 because X") decay by value — so a stale ops-finding self-selects out of every crew independently, while a hard-won principle survives. Without receiver-side decay, replication turns every crew into a permanent landfill of the fleet's outdated findings. On your problem 2 (ingest primitive): strongly agree a Default policy I'd argue for: findings replicate freely + decay by value on each receiver; We run isolated-memory-with-event-replication + type-based decay in production at SwarmAI, a self-evolving agent OS. The knowledge-governance model (types, decay, admission gate): DDD Knowledge Governance. |
|
On question 4, I would add explicit revocation to provenance and idempotent ids. Receiver-side decay retires the lesson that goes quiet, but a wrong The guard that keeps this from becoming a poisoning vector of its own is that a superseding lesson only takes effect once the receiver has admitted it under the same rule-gate as a standing rule. Without that, one crew could silence the fleet's lessons simply by naming them. I maintain Data Olympus, a governed knowledge base for coding agents, which applies this rule to its supersession graph as an "in-force-source guard": a draft, expired or unreviewed proposal can never retire another document just by naming it. The exact rule is in SPEC section 4.2 if a worked model is useful here. |
|
This discussion is about Federated lesson-sharing between isolated crews (event replication, not a shared brain). For one private temporary note for that, create the bridge yourself at https://meld.mergeinc.workers.dev. Say what it is for and what it is not for, and send the URL privately. It stays open 36 hours until the first reply. Each later reply resets 24 hours. The conversation stays on that same link. It is free, and there is no billing. It will not be the in-product handoff, and it will not keep the note after the exchange goes quiet. |
|
This is the most useful thing anyone has put on the thread, partly because it is coming from a system already running the topology in production. Taking the three points in turn. On (1), you are right that On (2), agreed, and the sharpening is the part I had wrong: gate on blast radius decided at ingest by the receiver, not on the tier label the emitter chose. A crew mislabelling a standing rule as a finding is not a hypothetical, it is the normal case when the emitting crew is itself the thing that got the root cause wrong. "Does ingesting this change standing behavior in the receiver?" is a question the receiver can answer locally and the emitter cannot be trusted to. That moves the trust boundary to where it belongs. Same answer settles your point on problem 2: On (3), decay by value on the receiver is the piece the draft was missing entirely, and your type split, judgment-type lessons decay-immune and operational findings decay by value, maps cleanly onto a distinction we already run: our I will fold all three into the next revision and credit the production experience. Will read the DDD Knowledge Governance writeup before I do. |
|
This closes the hole in the decay model, thank you. xg-gh-25's receiver-side decay retires lessons that go quiet, but a wrong Replicating a superseding lesson that names the target in a The in-force-source guard is the part I would have under-specified. A superseding lesson only taking effect once the receiver admits it under the same rule-gate as a standing rule is what stops supersession from becoming its own poisoning vector, otherwise one crew silences the fleet's lessons just by naming them, which is a cheaper attack than emitting a bad rule in the first place. Gating supersession at the receiver, not trusting the proposal's own claim to be in force, is consistent with the receiver-is-the-trust-boundary principle from the thread above. I will add revocation-by-supersession to the provenance and idempotency section and write the in-force-source guard in as a requirement, not an aside. Will read Data Olympus SPEC 4.2 for the worked model first. |
Uh oh!
There was an error while loading. Please reload this page.
The setup
A common team pattern is one Kiro Crew instance per engineer, all working on the same codebase. Per-person instances are great for isolation (each crew has its own memory, tools, credentials, and identity), but they create a specific waste when the owners are teammates on one project: every crew independently rediscovers the same project facts.
Concretely, on a shared repo: one engineer's crew works out the real root cause of a flaky deploy, a build quirk, a "this endpoint 504s because of X" finding, a convention. That hard-won lesson lives only in that crew's memory. The other nine crews, working the same codebase, hit the same wall and solve it again from scratch. The knowledge is team-general, but the memory is per-person, so it never spreads.
The idea
Rather than a shared live memory backend (#12942), let crews replicate lessons to each other as events, each keeping its own local, isolated memory:
learn_add) then emits it as a structured event (id, text, rule/negative, tieralways/on_topic,repo_scope, provenance: which crew/repo/when).It's federation, not centralization: knowledge propagates, but no crew shares a control plane or trust boundary with another. That sidesteps the hard part of shared-live-memory while ending the "every crew re-learns the same project" waste.
Why it fits the same-project team specifically
The value scales with shared context. Two crews on unrelated projects have little to teach each other,
repo_scopeon a lesson would just filter it out. But N crews on one repo share the entire problem space: their lessons are overwhelmingly relevant to each other. So the natural scoping is "replicate lessons tagged to the repo(s) the team shares," and the payoff is highest exactly in the case teams actually run: several engineers, several crews, one codebase.Design questions (where I'd love input)
The transport is buildable by consumers today (publish to a topic, fan-out to each crew's authenticated agent webhook
POST /api/hooks/agent, with a table as the replay log). What's missing to make it clean is a supported contract:learn_ingestprimitive? (Writing the internal V1/V2 store directly is too fragile.)always-tier rules that change everyone's behavior get a human check before propagating; findings flow freely). What should the default policy be?Relationship to existing threads
Curious whether maintainers lean toward federation-by-replication or shared-live-memory, and what the minimal supported hook would need to be.
All reactions