bridge-learn — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bridge-learn (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
/bridge-learn is the Layer-3 edge of the Bridge Learning-Loop architecture (see work/_learning/README.md). It consumes proposals written by task-close-postmortem (Phase 1) or /bridge-audit recurring findings (Phase 3) and walks the user through accept/reject decisions.
Never auto-apply. Every accepted proposal is materialized through a git commit on user/<name>, audit-trail.md records it, git revert is always the rollback path.
| Trigger | Mode |
|---|---|
User says /bridge-learn / "review proposals" / "learn review" | Interactive — full walk-through |
| /briefing skill invokes (Fridays, when pending ≥ threshold) | Summary — count + 1-line list, no walk |
User says /bridge-learn list | List-only — no actions, just an overview |
User says /bridge-learn trends | Trends — recurring + sleeping skills, no proposals |
User says /bridge-learn <proposal-id> | Single — go directly to that proposal |
work/_learning/proposals/*.md — all pending proposalswork/_learning/audit-trail.md — lifecycle log (for statistics)work/_learning/audit-history/ — Phase 3, for trends sectionbridge-config.yaml.learning — thresholds (auto_surface_threshold etc.)work/_learning/skill-usage.jsonl — Phase 4, for "sleeping skills"═══ Bridge Learning Review — 2026-05-13 ═══
📋 Pending Proposals (N)
P0 <id-1> (<source-type>)
P1 <id-2> (<source-type>)
P2 <id-3> (<source-type>)
...
📈 Trends (last 30d) [if audit-history populated]
Audit findings: P0=0 P1=12→8 P2=23→27 P3=5
Skills inactive: <N> of <total> [if skill-usage populated]
Task estimate-vs-actual: median 1.4x (vs 1.2x last month)
🔁 Recurring patterns (≥3 occurrences)
- <pattern-1> [→ proposal/audit-recurring exists]
- <pattern-2> [new — consider Standing-Order]
→ Review proposals one by one? [y/N]
→ Or: trends / list / quitSort proposals by:
created first╭─ Proposal: <id> ──────────────────────────────────────╮
│ │
│ Severity: <P0-P3> Status: pending Scope: <scope> │
│ Source: <type> (<task-slug or audit-ref>) │
│ Created: <YYYY-MM-DD> │
│ │
│ Evidence: │
│ <list of source.evidence pointers> │
│ │
│ Target: <type>/<action> — <path> │
│ │
│ Body (excerpt or full if <50 lines): │
│ <markdown body of proposal> │
│ │
│ Proposed diff (if diff_preview set): │
│ <diff_preview block> │
│ │
╰───────────────────────────────────────────────────────╯
[a]ccept [r]eject [e]dit [d]efer [s]kip [q]uitdiff_preview is set AND is a literal diff/patch:target.path against repo rootaction: create: write file from diff bodyaction: edit: apply diffaction: delete: remove fileaction: rename: parse new path from body, git mvdiff_preview is descriptive prose (not literal diff):git mv work/_learning/proposals/<id>.md work/_learning/proposals/accepted/<id>.mdwork/_learning/audit-trail.md: | 2026-05-13 14:30 | <id> | pending → accepted | <user-supplied note or ""> | <commit-hash-or-staged> | Suggested commit: <type>(<scope>): <one-line summary from proposal>
<2-3 line body>
Commit now? [y/n/edit]git commit -m ... on the staged changesPLUS the moved proposal file. Capture commit hash, update audit-trail.md row to point at the real hash.
accepted in proposal's frontmatter (Edit tool).If commit succeeded: transition to implemented and update frontmatter again.
scope: core, the improvement is by definition generic — offer it to the community:
💡 This improvement is scope:core — consider contributing it upstream
via /bridge-promote → contribute (fork-based PR to the OSS upstream,
content-safety gate runs first). Run now? [y/N]If yes: hand off to skills/bridge-contribute/references/workflow.md with the just-created commit as the candidate. Never auto-submit — the contribute flow has its own gates (leak scan + DCO + user confirm).
git mv work/_learning/proposals/<id>.md work/_learning/proposals/rejected/<id>.mdstatus: rejected + append reject_reason: fieldaudit-trail.md: | <ts> | <id> | pending → rejected | <reason> | — |status: deferred + defer_until: <user-input>work/_learning/proposals/ (don't move — defer means "still pending later")audit-trail.md: | <ts> | <id> | pending → deferred (<defer_until>) | <reason or ""> | — |$EDITOR work/_learning/proposals/<id>.md)_schema.proposal.yamlNo state change. Move to next proposal.
Save progress (which proposals were touched), exit cleanly. Print summary:
✅ Reviewed N proposals: <a> accepted, <r> rejected, <d> deferred, <s> skipped.
<X> commits staged (run /commit or git commit to push).
<Y> still pending — run /bridge-learn anytime.When invoked by /briefing or /bridge-learn summary:
🧠 Learning Loop — Pending Review (<N>)
P0: <count> P1: <count> P2: <count> P3: <count>
Oldest pending: <YYYY-MM-DD> (<id>)
→ /bridge-learn to reviewNo interactive walk. Just numbers + pointer.
/bridge-learn list — one line per proposal, no walk:
📋 Pending Proposals (<N>)
P1 2026-05-08 <id> skill customer-a-coordinator triggers too broad
P2 2026-05-13 <id> standing-order research-claim-verification (NEW)
P3 2026-05-10 <id> memory: tahoe sleep behavior
...Useful when user just wants to scan, not act.
/bridge-learn trends — focuses on Layer-2 aggregated signal:
Audit history (Phase 3):
Skill usage (Phase 4, opt-in):
Task estimate-vs-actual:
work/done/YYYY-MM/*/STATUS.md: parse estimate_vs_actual fieldTrigger corrections (Phase 4):
In /briefing, after Stream B (board) but before Stream D:
threshold = config.learning.proposals.auto_surface_threshold # default 5
trigger_day = config.learning.proposals.auto_surface_in_briefing # default "friday"
if today == trigger_day and pending_count >= threshold:
invoke bridge-learn in summary modeThe summary lands as a /briefing block. User can drill in with /bridge-learn.
Before any action, validate the proposal file:
status is one of the enum valuestarget.path is a non-empty stringtarget.action: edit or delete: target file must existtarget.action: create: target file must NOT existIf validation fails: show clear error + offer to repair via edit action.
The skill suggests commit messages following repo convention:
| Target type | Commit prefix |
|---|---|
| skill | skill(<skill-name>): |
| standing_order | standing-order(<name>): |
| rule | rule(<name>): |
| doc | docs(<area>): |
| protocol | protocol(<name>): |
| memory | memory: (or skip commit — memory edits go via auto-memory) |
| schema | schema(<name>): |
| config | config(<scope>): |
Use imperative present tense ("add", "tighten", "remove") — never "added" or "adding".
git push separately if desired)actual memory write goes through the auto-memory system — target.type: memory proposals produce a suggested entry text + path, user copy-pastes)
/briefing is the surface)/bridge-audit (Phase 3) to generate signal."[e]dit action; do not act on broken file.superseded).[q]uit saves progress. Resume any time.skills/task-close-postmortem/SKILL.md — Layer 1 source of proposalsskills/bridge-audit/ — Phase 3 source of recurring-finding proposalswork/_learning/README.md — aggregation layer documentationwork/_learning/_schema.proposal.yaml — proposal frontmatter schemaprotocols/standing-orders/task-sync.md — close-out flow that feeds proposalsbridge-config.yaml.learning.proposals — thresholds + Friday-surface configskills/briefing/ — invokes bridge-learn in summary mode on Fridays~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.