task-close-postmortem — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited task-close-postmortem (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.
Captures a short reflection at task close, maps any surfaced gaps to concrete Bridge-File-Improvement-Proposals, and writes both back as structured artifacts.
The skill is always optional and always interruptible — every question is skippable, and skipping all six leaves the task unchanged from today's behavior. Default-on (per bridge-config.yaml.learning.postmortem.enabled) but cost-light: fast-path through all six skips is <20 seconds.
dual_doku self-check passes and before the 3-step move.
"reflect on the piece just finished", "post-mortem this", "what did we learn from X". In manual mode the scope is not bound to a task folder — the skill reflects on the recent activity (last log.md entries, recent commits, recent file edits). No frontmatter writes happen in manual mode; output is only the proposals.
Auto mode:
work/tasks/<slug>/STATUS.md — the task being closedworkflow/contexts/<context>.yaml if STATUS references a contextwork/log.md (last 24h or all entries since task created)Manual mode:
(Full script in references/postmortem-questions.md.)
Surface them one at a time. Accept skip-phrases from bridge-config.yaml.learning.postmortem.skip_phrases — default ["skip", "next", "—", "no", "next", "."]. If cutdown_after_skips (default 3) consecutive skips occur, switch to Cutdown mode for the remaining questions: ask only the single catch-all "anything else worth noting?". Empty answer → done.
| # | Question (EN) | Writes to |
|---|---|---|
| 1 | Time invested? | frontmatter time_invested |
| 2 | Estimate vs actual? | frontmatter estimate_vs_actual |
| 3 | What went well? | body ## Postmortem → "What went well" |
| 4 | What burned time? | body ## Postmortem → "What did not go well" |
| 5 | Did the bridge fail you? | frontmatter bridge_gaps[] + body |
| 6 | Concrete improvement? | proposal file + body |
Use the conversation language from bridge-config.yaml.language.conversation (default en). EN fallback if missing.
Use the Edit tool against work/tasks/<slug>/STATUS.md. All four fields (time_invested, estimate_vs_actual, lessons, bridge_gaps) are optional in the schema (work/templates/_schema.status.yaml) — omit the line entirely when the user skipped that question. Never write empty strings or null.
Q1 → time_invested: — accept any of the schema-allowed forms (~12h, P3D, PT4H, —, unknown). Loose parsing OK; if user types "about 12 hours over 3 days", record as "~12h" and add the prose to body.
Q2 → estimate_vs_actual: — match to nearest enum value: ok / 1.5x / 2x / 3x / >3x / re-scoped / —. If user says "estimate was 4h, so 3x" record "3x" and add the math to body for human readability.
Q3+Q4 → body ## Postmortem subsections. Free-form prose. Bullet each line.
Q5 → bridge_gaps[] array. Each entry is one of: {skill: NAME, why: TEXT} / {standing_order: NAME, why: TEXT} / {rule: NAME, why: TEXT} / {doc: NAME, why: TEXT} / {protocol: NAME, why: TEXT} / {memory: NAME, why: TEXT}. A single user answer can yield multiple bridge_gaps entries.
Q6 → free-text improvement. Add to body "Concrete Bridge improvements proposed" sub-section. Each bullet there will be examined in the proposal-writing phase.
After all six questions are answered (or skipped), scan for proposal-worthy candidates from THREE sources, in order:
doesn't fit cleanly, write a proposal_type: needs-triage proposal.
git log --diff-filter=AM --name-onlyin the relevant repos since task created date. If any file changed in this Bridge repo (skills/, protocols/, rules/, docs/) that wasn't a planned edit, flag as potential trigger-or-routing miss for the postmortem.
For each candidate, write one file to:
work/_learning/proposals/<YYYY-MM-DD>-<task-slug>-<topic-slug>.mdFollowing the schema in references/_schema.proposal.yaml.
Naming rule: <topic-slug> is the gap-id from bridge_gaps[] if structured, or a 3-4-word kebab-case summary if from free-text. Disambiguate collisions with a -2, -3 suffix.
Use the template in references/proposal-writing.md.
Default severity: P2 for postmortem-sourced proposals. P0/P1 only when the gap is in an actively-used path (existing skill, common standing-order) AND the user explicitly described impact.
Default scope: user for postmortem-sourced proposals unless the target is clearly a CORE file (a generic skill, a CORE standing-order, the schema). The /bridge-learn skill (Phase 2) and /bridge-sync handle promotion to your org overlay / open-bridge later — getting the scope right at proposal-write time saves an audit later.
Default status: pending. Never write accepted or implemented from this skill — those are /bridge-learn states.
After all phases complete, return a single block:
✅ Task <slug> postmortem complete.
<X> answers captured (frontmatter + body)
<N> proposals written to work/_learning/proposals/
• <file-1> [<severity>] <one-line summary>
• <file-2> [<severity>] <one-line summary>
→ review per /bridge-learn (Phase 2) — or open the files directly.If all six questions skipped:
✅ Postmortem skipped — STATUS.md unchanged.Hand control back to task-sync.md Phase 3c (3-step move).
gracefully (do not mv files yet).
I'll answer in a moment"): treat as skip; user can backfill manually.
write partial frontmatter, hand control back. User can resume by saying "continue postmortem" / "postmortem continue".
(mkdir -p work/_learning/proposals/).
skip_phrases as above, cutdown_after_skips=3).
Two ways to dry-run without closing a real task:
binding to a STATUS.md, just emits a sample proposal-set.
work/_learning/_test/sample-task/STATUS.md (createon demand) — skill runs against the fixture, writes proposals to work/_learning/_test/proposals/, asserts schema validity.
work/tasks/<slug>/STATUS.md andwork/_learning/proposals/. The 3-step move is done by task-sync.md Phase 3c, not here.
status: pending —accept/reject is the /bridge-learn skill's job.
+ git-stats for the task duration period.
may suggest a memory entry via bridge_gaps[].memory: but the actual write happens later, human-approved.
bridge-config.yaml.learning.postmortem.enabled: false.protocols/standing-orders/task-sync.md § Phase 3b (invokes this skill)work/templates/_schema.status.yaml (schema for the frontmatter fields)work/templates/STATUS.md (template ## Postmortem section)work/_learning/README.md (the aggregation layer this writes into)skills/bridge-learn/SKILL.md (Phase 2 — reviews proposals)bridge-config.yaml.learning.postmortem (config block)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.