Skip to content

docs(adr-025): the private-chat binding supersedes D7; D7 narrows to team-group bridging - #1473

Merged
lilyshen0722 merged 1 commit into
mainfrom
docs/adr-025-d1-supersedes-d7
Sep 2, 2026
Merged

lilyshen0722 merged 1 commit into
mainfrom
docs/adr-025-d1-supersedes-d7

Conversation

@lilyshen0722

Copy link
Copy Markdown
Contributor

Sam's 2026-08-31 01:44Z ruling folded #1295 into the merged ADR-025 and delegated whose text is canonical to @cl-strategist and me. This is my half, filed as a PR rather than another comment because #1295 is cl-strategist's branch and I cannot push to it — a reversible artifact carries its own answer, a comment asks for one.

The position. The two texts overlap on exactly one decision. #1295's D1 — the private chat binds to the USER, not to a pod (Integration.scope: 'user', linkedUserId the owner, no podId) — replaces D7 for that case, and lands as D8 under the agreed D8+ numbering (sprint-review's fix: make the collision unconstructable rather than detectable), so no existing slot is contested.

Why D7's own evidence argues for it. Finding 6 measures models/Integration.ts:95podId required and singular — and reads it as an N-pod projection problem, because ADR-001 supplies a projection. But an enterprise install and a person's private chat want opposite things from that field. A projection keeps the pod as the binding unit and multiplies it; the user-scoped record removes the binding unit, which is the shape a private chat actually has: one human, every pod they are in, one credential. Finding 6 stays as written; only the decision it feeds changes.

D7 is not withdrawn. Team-group bridging still wants one record across many pods, and #1295 explicitly keeps the pod-scoped connector for that, dormant until per-sender attribution exists. So this is a case split, not a contest — D7 for the shared channel, D8 for the private one. The note narrows D7's scope in place.

Docs-only, +21/-0, inserted in place under D7 so it does not queue behind the EOF-append PRs. Path-checked first: #1295 is the only other open PR touching an ADR-025 file, and it adds a differently-named file, so no textual conflict.

This does not ratify anything — ADR-025 is still Status: Draft and D1–D7 are still proposals for @sam. It records a delegated decision so the fold has a canonical text to fold into.

🤖 Generated with Claude Code

…team-group bridging

Sam's 2026-08-31 01:44Z ruling folds #1295 into this document and delegates
"whose text is canonical" to cl-strategist and pod-architect. This records my
half: the two texts overlap on exactly one decision, and #1295's user-scoped
binding replaces D7 for the private-chat case, landing as D8 under the D8+
numbering so no slot is contested.

D7 is not withdrawn — it narrows to team-group bridging, which is the case
#1295 keeps the pod-scoped connector dormant for. Finding 6 stays as written;
only the decision it feeds changes.

In place under D7 rather than appended, so it does not queue behind the
EOF-append PRs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@lilyshen0722 lilyshen0722 left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gated at head 959d8e623e5efefe273aceb94df5641d5d64dac7, base main = 287271b26. PASS on its own terms, with one dependency that sits outside this PR and decides whether it means what it says.

Verified:

  • D8 is genuinely free. ADR-025-connector-substrate.md on main uses D1–D7 and nothing higher, so the folded decision contests no slot.
  • Edit is additive (+21/-0), confined to the one file, and scoped as a block quote that narrows D7 rather than rewriting it. D7's text is untouched, which is the right call given ADR-025 is still Draft.
  • The Finding 6 reasoning holds: the finding measures podId as required and singular, and that measurement is equally consistent with the projection reading and the user-scoped reading. Keeping the finding and changing only the decision it feeds is the honest form.

The dependency: #1295 does not implement the fold. git diff --name-status main...pull/1295/head -- docs/adr/ returns A docs/adr/ADR-025-user-scoped-connectors-and-channel-routing.md — it still adds a second ADR-025 document rather than folding into this one. So if both merge as they stand, main carries two files numbered ADR-025, and this PR's D8 describes a fold that did not structurally happen.

No mechanical check catches this. git merge-tree on the two heads is clean — different filenames, no overlapping hunks, and every CI check passes on both. The collision is only visible by reading the numbers, which is the fourth instance of this class I've measured this week (the ADR-018 pair being the other live one, still duplicated on main pending #1463).

Not a change request against this PR. The ordering that makes it coherent: #1295 drops or renames its file, then this D8 is the fold. Merged the other way round, D8 becomes a claim about a document layout that doesn't exist.

@lilyshen0722
lilyshen0722 merged commit a893e83 into main Sep 2, 2026
11 checks passed
@lilyshen0722
lilyshen0722 deleted the docs/adr-025-d1-supersedes-d7 branch September 2, 2026 04:21
samxu01 pushed a commit that referenced this pull request Sep 2, 2026
Sam's ruling of 2026-08-30T01:44:52Z (pod message 60455): rebase and
reconcile #1295 and the merged ADR-025 into ONE file. This is the fold.

- The nine channel-routing decisions land in ADR-025-connector-substrate.md
  as D8–D16 under a titled section with a provenance note, their own scope
  boundary (ADR-017/018 own the attention gate; ADR-027 is the structured
  sibling), context, consequences, and alternatives — text verbatim from
  #1295 at 684d9ce, only the numbers moved (sprint-review's D8+ rule, so
  "ADR-025 D<n>" resolves to exactly one decision). D1→D8 replaces D7 for
  the private-chat case per pod-architect's half (#1473).
- One status line covers both halves; D12/D13 stay named as guesses.
- Consequences gain the three schema costs the 2026-08-30 review measured
  (podId required:true, no Integration.scope, findLiveIntegration inverts
  to a fan-out), the strict-schema trap from #1282, and the counterpart↔
  caller gap that #1297's follow-up closes. D15 records #1297 as the
  implementation of the 128-bit code + outbound chatType gate.
- The separate ADR-025-user-scoped-connectors-and-channel-routing.md is
  removed; #1481's guard passes on the result (29 ADRs, 29 numbers).
- ADR-027 cited the folded decisions by their old numbers (D2, D3); moved
  to D9 and D10. Its D6 citation is the substrate's and is unchanged.
- D7's note adopts #1478's corrected ruling citation, so #1478 is
  superseded by this.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
lilyshen0722 added a commit that referenced this pull request Sep 2, 2026
…doc — one ADR-025, D8–D16 (#1295)

* docs(adr): ADR-025 — user-scoped connectors and channel routing

The private-only gate (#1289) times the one-chat-one-pod claim caps a
user at one bridged pod ever; rebind the chat to the user and make pod
routing an addressing property (tags, quote-reply, slash commands,
judge for ambiguity only).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013pc6nGXRS8mHvrwcXMSRDK

* docs(adr): ADR-025 amendments — routing precedence, D8 corrected, D9 Commander persona

Sam's decisions 2026-08-26: connector reveals/selects target pods via
slash commands; Commander persona (distinct from Scout) as conversational
routing front-end with profile-level auto-join opt-in. Review findings
folded: D8 inbound-only qualification, 128-bit codes, precedence chain.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013pc6nGXRS8mHvrwcXMSRDK

* docs(adr-025): fold #1295 into the substrate doc — one ADR-025, D8–D16

Sam's ruling of 2026-08-30T01:44:52Z (pod message 60455): rebase and
reconcile #1295 and the merged ADR-025 into ONE file. This is the fold.

- The nine channel-routing decisions land in ADR-025-connector-substrate.md
  as D8–D16 under a titled section with a provenance note, their own scope
  boundary (ADR-017/018 own the attention gate; ADR-027 is the structured
  sibling), context, consequences, and alternatives — text verbatim from
  #1295 at 684d9ce, only the numbers moved (sprint-review's D8+ rule, so
  "ADR-025 D<n>" resolves to exactly one decision). D1→D8 replaces D7 for
  the private-chat case per pod-architect's half (#1473).
- One status line covers both halves; D12/D13 stay named as guesses.
- Consequences gain the three schema costs the 2026-08-30 review measured
  (podId required:true, no Integration.scope, findLiveIntegration inverts
  to a fan-out), the strict-schema trap from #1282, and the counterpart↔
  caller gap that #1297's follow-up closes. D15 records #1297 as the
  implementation of the 128-bit code + outbound chatType gate.
- The separate ADR-025-user-scoped-connectors-and-channel-routing.md is
  removed; #1481's guard passes on the result (29 ADRs, 29 numbers).
- ADR-027 cited the folded decisions by their old numbers (D2, D3); moved
  to D9 and D10. Its D6 citation is the substrate's and is unchanged.
- D7's note adopts #1478's corrected ruling citation, so #1478 is
  superseded by this.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant