Skip to content

session-review: add collaboration lens for cross-project user-preference signal#56

Merged
SnowboardTechie merged 6 commits into
mainfrom
issue-13-session-review-collab-lens
May 1, 2026
Merged

session-review: add collaboration lens for cross-project user-preference signal#56
SnowboardTechie merged 6 commits into
mainfrom
issue-13-session-review-collab-lens

Conversation

@SnowboardTechie
Copy link
Copy Markdown
Owner

Summary

Adds a collaboration lens to session-review so the skill can catch cross-project user-collaboration signal (how the user thinks, what they anchor on) — not just technical artifacts. Routes those findings to the harness memory system instead of vault notes; the plugin owns the router, not the destination.

  • Step 1 scans with two lenses (technical + collaboration).
  • Signal Test Q2 softened — durability/scope check now allows either project-specific (vault) or cross-project user-preference (memory).
  • Categorization Criteria split into vault-routes (existing) and memory-routes (new: user-collaboration preference / project motivation / external-system pointer).
  • Step 5 explicitly requires human approval — a hub agent invoking session-review autonomously must surface the gate, not self-approve, since the collaboration lens is fed by session content.
  • New Step 9 hands approved memory recommendations off to the user (or a hub agent with memory access). The skill never writes to memory itself.
  • Hub Capture Triggers in AGENTS.md carry an explicit scope note: the table covers vault-note capture; cross-project preferences route to harness memory per session-review's lens.

Closes #13.

Self-review findings

Three-lens self-review surfaced 1 Major + 5 Minor + 3 Nit findings. 7 accepted and fixed in the second commit (809bd42); 2 pushed back with rationale (Q1/Q3 inline justification stays — helps an LLM interpreter judge edge cases; Step 9 dir-level path stays — different scope from the template's file-level destination hint).

The Major was a real routing bug introduced in the first commit: memory-routes table had project motivation and external-system pointer rows that the lens-keyed routing in Step 1.5 never reached, since those can surface from the technical lens (e.g., discovering an auth migration is compliance-driven). Fixed by routing-by-destination-row, not by lens, and rephrasing Q2 as a vault-vs-memory sub-list (which collaterally addresses the simplicity Q2-density nit). Full triage in ~/.claude/issue-work/SnowboardTechie-athena-notes-13/summary.md.

Test plan

  • python3 scripts/lint-frontmatter.py plugins/athena-notes/skills/session-review/SKILL.md plugins/athena-notes/AGENTS.md — passes (14 agents, 18 skills validated).
  • End-to-end readback of the edited SKILL.md — Step 1 → 1.5 → 1.6 → 2 → 3 → 4 → 5 → 6/7/8/9 hangs together; vault path and memory path are both internally consistent; routing-by-destination wording is unambiguous.
  • AGENTS.md scope note read in context — fits existing tone, no new section, doesn't duplicate Capture Triggers row content.
  • CI on push: frontmatter-lint, docs-lint, version-check (CHANGELOG.md is in the diff alongside the versionable paths so version-check is satisfied; non-release PR — no plugin.json bump).

Functional verification of the new collaboration-lens flow happens the next time /session-review runs against a session with collab signal — markdown skill bodies don't have unit tests in this repo.

Changelog

  • Non-release PR — added a bullet under ## [Unreleased] in CHANGELOG.md.
  • Release PR (vX.Y.Z) — N/A
  • Exempt — N/A (touched a versionable path: plugins/athena-notes/skills/session-review/SKILL.md)

…nce signal

Step 1 now scans with two lenses (technical + collaboration). Signal Test Q2
softened to allow cross-project user-collaboration preferences alongside
project-specific findings. Categorization Criteria split into vault-routes
(AGENTS.md / .notes/ / daily plan) and memory-routes (harness memory for
user-preference / project-motivation / external-system-pointer signal).

Hub Capture Triggers in AGENTS.md now carry an explicit scope note: the
table covers vault-note capture; cross-project user-collaboration preferences
route to the harness memory system. The plugin owns the router, not the
memory destination — Step 9 hands approved memory recommendations off to
the user / hub agent rather than writing them.

Closes #13.
- Memory routing in Step 1.5 was lens-keyed, but project-motivation and
  external-system-pointer rows can surface from technical-lens reads. Route
  by destination row (not lens) and rephrase Q2 as a vault-vs-memory fork.
- Q4 (readable in six months) used Obsidian-only language (wikilinks,
  Saturday); broaden to cover memory records too.
- Step 5 now requires human approval explicitly — a hub agent invoking the
  skill autonomously can't self-approve on the user's behalf, since the
  collaboration lens is fed by session content.
- Define `{slug}` in the Memory recommendation destination hint
  (`~/.claude/projects/` directory, abs path with `/` → `-`).
- Tighten the Memory template approval line; drop the redundant restatement
  of "skill doesn't write to memory" (covered by template preamble + Step 9
  + Guardrails already).
@SnowboardTechie SnowboardTechie added the enhancement New feature or request label Apr 24, 2026
Three-lens review surfaced 3 Major + 4 Minor + 4 Nit findings; all 11
accepted and folded in.

- SKILL.md Step 1.5/Step 3 — reconcile the routing rule. Step 1.5 already
  said "by destination row, not by lens"; Step 3 contradicted it by
  splitting on lens. Routing rule now lives in one authoritative place
  (Step 1.5) and Step 3 references it.
- SKILL.md Step 1.5 — restore Q3 (future-actionable) for memory-route
  candidates. The previous "Q3 is implicit" framing made the filter
  more permissive than advertised.
- SKILL.md memory-routes table — add a scoping note under the
  external-system-pointer row so private internal-infra pointers don't
  leak into cross-project memory readable by every future agent.
- SKILL.md memory-recommendation template — require third-person
  declarative phrasing for the draft paragraph so prompt-injection-shaped
  session content stands out at the approval gate. Add slug-verification
  hint (`ls ~/.claude/projects/`) so a hub agent acting on the destination
  hint doesn't silently write to the wrong path. Drop the "no second gate"
  footer clause that confused more than it clarified.
- SKILL.md Step 5 — reshape new sentence positively (per AGENTS.md
  positive-prompts convention) and trim the misleading "since the
  collaboration lens by design is fed by session content" rationale
  (the rule applies to every route).
- SKILL.md guardrails — replace duplicated both-lenses guard with a
  cross-reference to Edge Cases — No survivors.
- AGENTS.md Capture Triggers Scope paragraph — drop the abstract
  closing sentence; the concrete sentences already say it.
- CHANGELOG.md — trim the 5-clause Unreleased entry to one sentence
  per the changelog convention.
Pass-2 review surfaced 1 Major + 5 Minor + 1 Nit; six accepted, one
acknowledged with no edit (security observational).

- SKILL.md scoping note (external-system-pointer) — trim to one sentence;
  the example list and trailing clause were doing the same work.
- SKILL.md Step 4 — add "Memory recommendation" to the list of templates
  so an agent reading Step 4 in isolation has a cue to use it for
  memory-route survivors.
- SKILL.md memory-recommendation intro — drop the prompt-injection-vector
  mechanism sentence; the gate-visibility sentence carries the rule and
  the word "injection" still cues the careful reader.
- SKILL.md memory-recommendation destination hint — drop the redundant
  /-to-- transformation explanation; the `ls ~/.claude/projects/` verify
  hint covers it.
- SKILL.md Step 3 — drop redundant "always memory-route" example;
  Step 1.5 is the authoritative statement, Step 3 just cross-refers.
- AGENTS.md Scope paragraph — drop "(e.g., Claude Code auto-memory)"
  parenthetical; AGENTS.md framing (line 3) is cross-tool, the SKILL.md
  cross-reference carries the harness-specific detail.

The security observational finding (internal-vs-public infra is an LLM
judgment call) is acknowledged: no structural enforcement is possible
at the markdown-skill layer; the scoping note + approval gate are the
correct mitigation.
Pass-3 review surfaced 1 Minor + 3 Nit; all four accepted.

- SKILL.md memory template — replace hardcoded "Bryan prefers X" with
  "[User] prefers X" per AGENTS.md "never hard-code user-specific values"
  convention. Skill bodies ship to anyone; the example must be generic.
- SKILL.md Step 1.5 — drop the "and a collaboration-lens finding is
  always memory-route" subclaim (implied by "by row, not by lens"; the
  lens definition doesn't allow a vault row to absorb a collab finding
  anyway) and the now-unneeded "See Step 3" pointer (Step 3 already
  cross-references Step 1.5 — one direction is enough).
- SKILL.md Edge Cases / No survivors — clarify the both-vs-three
  oscillation by enumerating the three channels (technical lens,
  collaboration lens, daily-plan scan).
Pass-4 review surfaced 2 Nits; both accepted.

- SKILL.md guardrail "No signal" — change "confirming both lenses ran"
  to "confirming all three channels came up empty" so it matches the
  pass-3 Edge Cases definition (technical lens + collab lens + Step 1.6
  daily-plan scan). Without this, an agent satisfying the literal
  guardrail could skip Step 1.6 and still declare no-signal.
- SKILL.md Step 3 — drop "Routing is by row, not by lens" restatement;
  the rule lives in Step 1.5 and Step 3 already cross-references it.
@SnowboardTechie SnowboardTechie marked this pull request as ready for review April 25, 2026 00:48
@SnowboardTechie SnowboardTechie merged commit 20a942d into main May 1, 2026
3 checks passed
@SnowboardTechie SnowboardTechie deleted the issue-13-session-review-collab-lens branch May 1, 2026 17:08
SnowboardTechie added a commit that referenced this pull request May 6, 2026
…gnal (#80)

## Summary

Adds a third lens to `session-review`'s Step 1 alongside the existing
technical (vault) and collaboration (memory) lenses. The new
**plugin-improvement lens** scans for moments where an Athena Notes
agent or skill misbehaved or has a clear sharp edge worth filing, runs
them through the Signal Test with issue-route tunings, surfaces
survivors as drafts at the Step 5 approval gate, and on approval invokes
`/issue-create` with the draft body as seed text. Two gates total: this
skill's Step 5 catches "is this worth filing?", `/issue-create`'s Stage
3.4 catches "is the post correct?".

Strictly scoped — only `plugins/athena-notes/` agents and skills.
Cross-plugin gripes continue routing through the collaboration lens to
memory; generic engineering tech-debt is `engineering:tech-debt`'s
territory.

Mirrors the structural shape of
[#56](#56) (the
collaboration-lens precedent
[#75](#75) cites):
Step 1 lens addition, Signal Test extension, categorization-table row,
output template, handoff step, edge-case + guardrail updates, plus the
same one-line `AGENTS.md` scope-note extension and `CHANGELOG` bullet.

Closes [#75](#75).

## Test plan

- [x] `python3 scripts/lint-frontmatter.py
plugins/athena-notes/skills/session-review/SKILL.md` passes (skill body
is LLM instructions; no test suite touches `session-review`).
- [x] Readback of the edited Step 1 / Step 1.5 / Categorization Criteria
/ Output Templates / Step 10 / Edge Cases / Guardrails sections to
confirm the three lenses are syntactically parallel.
- [x] Confirmed a session with zero plugin-improvement signal produces
identical output for the existing channels — no Step changed its
behavior conditional on the new lens.
- [x] Verified the GitHub-issue draft template's section headings match
`/issue-create` Stage 1.3's six default-structure headings exactly
(Problem / Motivation, Proposed behavior, Scope (in/out), Implementation
hints, Acceptance criteria, Open questions) so Stage 2.1's "skip if
already answered" fires on each area.
- [x] Self-review: four passes of the `correctness` / `security` /
`simplicity` lenses; 15 findings accepted across passes, 7 push-backs, 3
skips. Audit at
`~/.claude/issue-work/SnowboardTechie-athena-notes-75/summary.md`.

## Changelog

- [x] **Non-release PR** — added a bullet under `## [Unreleased]` in
`CHANGELOG.md`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

session-review: add collaboration lens to catch cross-project user-preference signal

1 participant