Skip to content
Back to skills

Journal

ASecurity

Persistent state tracking and Architecture Decision Records across sessions. Use when recording a decision, ADR, or progress that must survive session boundaries. Manages progress state, module health, dependency graphs, and ADRs for any workflow.

  • 86 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 11, 2026
businessgonodegitsecurityperformance

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 11, 2026

npx -y skills add Rune-kit/rune --skill journal --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Journal?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Journal
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/rune-kit-journal/badge)](https://www.skillsdirectory.com/skills/rune-kit-journal)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: journal
description: "Persistent state tracking and Architecture Decision Records across sessions. Use when recording a decision, ADR, or progress that must survive session boundaries. Manages progress state, module health, dependency graphs, and ADRs for any workflow."
metadata:
  author: runedev
  version: "0.4.0"
  layer: L3
  model: haiku
  group: state
  tools: "Read, Write, Edit, Glob, Grep"
  listen: graft.complete
---

# journal

## Purpose

Persistent state tracking and Architecture Decision Records across sessions. Journal manages the state files that allow any workflow to span multiple sessions without losing progress — rescue operations, feature development, deploy decisions, or audit findings. Separate from session-bridge which handles general context injection — journal writes durable, human-readable state that survives compaction.

## Triggers

- Called by any skill needing decision persistence or progress tracking
- Auto-trigger: after surgeon completes a module, after deploy, after audit phases

## Calls (outbound)

None — pure L3 state management utility.

## Called By (inbound)

- `surgeon` (L2): update progress after each surgery session
- `rescue` (L1): read state for rescue dashboard
- `autopsy` (L2): save initial health assessment
- `cook` (L1): record key architectural decisions made during feature development
- `deploy` (L2): record deploy decision, rollback plan, and post-deploy status
- `audit` (L2): save AUDIT-REPORT.md and record health trend entry
- `incident` (L2): record incident timeline and postmortem
- `skill-forge` (L2): record skill creation decisions and rationale
- `graft` (L2): auto-log graft operations — source URL, mode, challenge score, files changed
- `retro` (L2): record retrospective insights and decisions
- `improve-architecture` (L2): record an ADR when the user rejects a deepening candidate with a load-bearing reason
- `logic-guardian` (L2): record guarded logic changes for cross-session persistence

## Files Managed

```
.rune/RESCUE-STATE.md      — Human-readable rescue progress (loaded into context)
.rune/module-status.json   — Machine-readable module states
.rune/dependency-graph.mmd — Mermaid diagram, color-coded by health
.rune/adr/                 — Architecture Decision Records (one per decision)
.rune/risks/               — Risk Register entries (one per identified risk)
```

## Execution

### Step 1 — Load state

Use `Read` to load current rescue state:

```
Read: .rune/RESCUE-STATE.md
Read: .rune/module-status.json
```

If either file does not exist, initialize it with an empty template:

- `RESCUE-STATE.md`: create with header `# Rescue State\n\n**Started**: [date]\n**Phase**: 1\n`
- `module-status.json`: create with `{ "modules": [], "lastUpdated": "[iso-date]" }`

Parse `module-status.json` to extract current module states and health scores.

### Step 2 — Update progress

For each module that was completed during this session:

1. Locate the module entry in the parsed `module-status.json`
2. Update its fields:
   - `status`: set to `"complete"` (or `"in-progress"` / `"blocked"` as appropriate)
   - `healthScore`: set to the post-surgery score (0-100)
   - `completedAt`: set to current ISO timestamp
3. Mark the active module pointer in `RESCUE-STATE.md` — update the `**Current Module**` line to the next pending module

Use `Write` to save the updated `module-status.json`.

Use `Edit` to update the relevant lines in `RESCUE-STATE.md` (current phase, current module, counts of completed vs pending).

### Step 3 — Record decisions (gated by 3-criteria scoring)

For each architectural decision or trade-off made during this session (applies to any workflow — feature development, deploy, rescue, audit):

#### Step 3.0 — Score the decision

Compute three numeric scores (1–5 each) before opening any ADR file. See [references/adr-criteria.md](references/adr-criteria.md) for full rubric.

| Axis | What it measures |
|------|------------------|
| `reversibility` | 1 = next-sprint reversible; 5 = practically irreversible |
| `surprisingness` | 1 = obvious to any reader; 5 = future engineer would "fix" without context |
| `tradeoff_strength` | 1 = no real alternative; 5 = genuinely difficult choice |

```
score = reversibility + surprisingness + tradeoff_strength    # range 3–15
open_adr = (score >= 11) AND (each axis >= 3)
```

#### Step 3.1 — Counter-test (anti-fake)

Before writing the ADR, fill in **at least one rejected alternative + why**. If no credible alternative was actually considered, the decision wasn't a real tradeoff — re-classify as a **convention** (record in CLAUDE.md or comment, not in `.rune/adr/`) and skip ADR creation.

#### Step 3.2 — Open the ADR (if gate passed)

1. Generate filename including the score: `.rune/adr/ADR-[NNN]-[slug]-s[score].md` where NNN is sequential and `score` is the 3–15 sum (e.g., `ADR-007-postgres-write-model-s13.md`)
2. Use `Write` to create the ADR file with this format:

```markdown
# ADR-[NNN]: [Decision Title]

**Date**: [YYYY-MM-DD]
**Status**: Accepted
**Workflow**: [rescue | cook | deploy | audit | other]
**Scope**: [affected module, feature, or system area]
**Score**: reversibility=[1-5] / surprisingness=[1-5] / tradeoff_strength=[1-5] / total=[3-15]

## Context
[Why this decision was needed — what problem or trade-off prompted it]

## Decision
[What was decided — be specific, not "we chose X" but "we chose X over Y"]

## Rationale
[Why this approach over alternatives — cite specific constraints or evidence]

## Consequences
[Impact on files/modules/future work — include rollback path if relevant]

## Rejected Alternatives (counter-test — MUST have at least one)
[List what was considered but NOT chosen, and why. This prevents future sessions from re-visiting dead ends. If you cannot fill in this section, the decision wasn't a real tradeoff — DO NOT open this ADR.]
- **[Alternative A]**: Rejected because [specific reason — constraint, performance, complexity]
- **[Alternative B]**: Rejected because [specific reason]. May reconsider if [condition changes].
```

### Step 3.5 — Record risks

For each risk identified during the session (technical, schedule, dependency, security):

1. Generate a risk filename: `.rune/risks/RISK-[NNN]-[slug].md` where NNN is next sequential number
2. Use `Write` to create the risk file:

```markdown
# RISK-[NNN]: [Risk Title]

**Date Identified**: [YYYY-MM-DD]
**Identified By**: [workflow — cook | plan | deploy | audit | adversary]
**Severity**: Critical | High | Medium | Low
**Likelihood**: High | Medium | Low
**Status**: Open | Mitigated | Accepted | Closed

## Description
[What could go wrong — specific scenario, not vague "things might break"]

## Impact
[What happens if this risk materializes — quantify if possible]

## Mitigation
[Actions to reduce likelihood or impact]
- [ ] [Action 1 — owner, deadline]
- [ ] [Action 2]

## Trigger Conditions
[How to detect this risk is materializing — monitoring, alerts, symptoms]

## Contingency
[What to do if risk materializes despite mitigation — the Plan B]
```

3. **Risk classification matrix**:

| Likelihood \ Severity | Critical | High | Medium | Low |
|----------------------|----------|------|--------|-----|
| **High** | 🔴 Immediate action | 🔴 This sprint | 🟡 This quarter | ⚪ Backlog |
| **Medium** | 🔴 This sprint | 🟡 This quarter | ⚪ Backlog | ⚪ Accept |
| **Low** | 🟡 This quarter | ⚪ Backlog | ⚪ Accept | ⚪ Accept |

4. Risks marked 🔴 MUST have mitigation actions with deadlines. ⚪ Accept = documented acknowledgment, no action required.

### Step 4 — Update dependency graph

If any module dependencies changed during this session (new imports, removed dependencies, refactored interfaces):

Use `Read` on `.rune/dependency-graph.mmd` to load the current Mermaid diagram.

Use `Edit` to update the affected node entries:
- Change node color/style to reflect new health status (e.g., `style ModuleName fill:#00d084` for healthy, `fill:#ff6b6b` for broken)
- Add or remove edges as dependencies changed

Use `Write` to save the updated `.rune/dependency-graph.mmd`.

### Step 5 — Save state

Use `Write` to finalize any remaining state file changes not already saved in Steps 2-4.

Confirm all four managed files are consistent:
- `RESCUE-STATE.md` reflects current phase and module
- `module-status.json` has updated scores and timestamps
- ADR files exist for all decisions made
- `dependency-graph.mmd` reflects current module relationships

### Step 6 — Report

Emit the journal update summary to the calling skill.

## Output Format

```
## Journal Update
- **Phase**: [current rescue phase]
- **Module**: [current module]
- **Health**: [before] → [after]
- **ADRs Written**: [count]
- **Risks Logged**: [count] ([severity breakdown])
- **Files Updated**: [list of .rune/ files modified]
- **Next Module**: [next in queue, or "rescue complete"]
```

## Context Recovery (new session)

```
1. Read .rune/RESCUE-STATE.md   → full rescue history
2. Read .rune/module-status.json → module states and health scores
3. Read .rune/risks/             → open risks and their status
4. Read git log                  → latest changes since last session
5. Read CLAUDE.md               → project conventions
→ Result: Zero context loss across rescue sessions
```

## Constraints

1. MUST record decisions with rationale — not just "decided to use X"
2. MUST timestamp all entries
3. MUST NOT log sensitive data (secrets, tokens, credentials)
4. MUST work for any workflow — never require rescue-specific fields to be present

## Sharp Edges

Known failure modes for this skill. Check these before declaring done.

| Failure Mode | Severity | Mitigation |
|---|---|---|
| ADR written from memory instead of actual session events | HIGH | Only record decisions that were explicitly made in this session — don't reconstruct |
| RESCUE-STATE.md initialized without content when called from non-rescue workflows | MEDIUM | If caller is not rescue/surgeon, skip RESCUE-STATE.md initialization — use progress.md instead |
| Overwriting human-written ADR content on re-run | CRITICAL | MUST check if ADR-[NNN].md exists before writing — never overwrite, increment NNN |
| Empty ADR Rationale field ("decided to use X") | MEDIUM | Constraint 1 blocks this — re-prompt for rationale before writing |
| Opening an ADR for a decision that scores below threshold (sum < 11 or any axis < 3) | HIGH | Step 3.0 gate — if score fails, classify as "convention" and record in CLAUDE.md instead |
| Score inflation to reach threshold | MEDIUM | Step 3.1 counter-test — must name a credible rejected alternative; cannot be faked |
| ADR for a deferral ("we'll do X later") | MEDIUM | Deferrals are not decisions; route to backlog or `.out-of-scope/` (if rejection) |

## Done When

- All decisions from the session that pass the 3-criteria gate (sum >= 11, each axis >= 3, counter-test filled) recorded as ADR files
- Decisions failing the gate classified as conventions (logged in CLAUDE.md or code comment, NOT in `.rune/adr/`)
- All identified risks recorded as RISK files with severity, mitigation, and trigger conditions
- Progress state updated (module status, phase, or deploy event as appropriate)
- Dependency graph updated if module relationships changed
- Journal Update summary emitted to calling skill
- No existing ADR files overwritten

## Cost Profile

~200-500 tokens input, ~100-300 tokens output. Haiku. Pure file management.

Files in this skill

  • SKILL.md11.3 KB
  • references/adr-criteria.md5.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.