decision-journal
Contract for the project decision journal (tradeoffs and lessons-learned logs). Use when recording a decision, tradeoff, or lesson, or building a consumer hook.
What this skill does
# Decision Journal Contract
## When To Use
- A workflow has just made a decision and needs to record the tradeoff:
what was chosen, what was rejected, what was sacrificed.
- A workflow has hit a failed approach, rework, or blocker and needs to
record the lesson.
- Building or validating a consumer hook that writes to the journal.
## When NOT To Use
- Scaffolding the files at project init (that is `attune:project-init`).
- Recording a full architecture decision that warrants a numbered ADR in
`docs/adr/`; reference its number from a journal entry instead of
duplicating it.
This is a convention and a helper rather than a hard runtime
dependency. Consumers degrade gracefully when leyline is absent
(see Fallback).
## What This Captures, And Why
AI-assisted work tends to narrate tool output ("the agent built X") and lose
the human reasoning: the decision, the road not taken, and the honest rework
nobody mentions. Two append-only logs, co-located with the code, fix that:
- `docs/tradeoffs.md` records decisions **and the alternatives sacrificed**.
- `docs/lessons-learned.md` records insights, failed approaches, and rework,
framed blamelessly.
## Files And Discipline
Both files live in `docs/` (co-location is the strongest anti-staleness
lever). Each is a single append-only running log with a scannable
`## Active index` at the top and an `## Archive` section at the bottom.
1. Append-only. An accepted entry is never edited or deleted; only its
`Status` changes.
2. Supersede, do not overwrite. A reversal adds a new entry, flips the old
entry's status to `superseded-by: <new-id>`, and links both ways.
3. Stable IDs (`TR-001`, `LL-001`) so links from PRs, commits, and code
never break.
4. Every entry links back to its PR, commit, or issue.
Status vocabularies:
- Tradeoffs: `proposed -> accepted -> (superseded-by: TR-NNN | deprecated)`
- Lessons: `open -> actioned -> closed`
## Capture UX: Draft And Confirm
When a workflow reaches a decision or lesson point:
1. Draft the entry from the live context of the phase (the options weighed,
what was given up, the failure and its root cause).
2. Show the draft to the human and let them confirm or edit.
3. Append it. Tradeoffs start `proposed`; lessons start `open`.
Do not auto-write without the confirm step. The point is to capture the
human reasoning, not to generate noise.
## CLI Interface
Run the helper from leyline:
python3 ${LEYLINE}/scripts/journal_append.py <tradeoffs|lessons> \
--project-root <repo-root> \
--title "<short title>" \
[--phase <phase>] [--status <status>] \
[--field key=value ...] \
[--json '<full field object>'] \
[--supersedes TR-NNN] \
[--dry-run]
The helper assigns the next ID, renders the template, inserts the entry above
the `## Archive` marker, updates the active index, and (with `--supersedes`)
flips the prior entry's status and adds backlinks. It is idempotent: appending
an entry whose substantive fields already appear is a no-op.
### Tradeoff fields
`title` (required), `context`, `drivers` (list), `options` (list of
`{name, pros, cons, chosen}`), `decision`, `ystatement`,
`consequences_positive`, `consequences_negative`, `phase`, `deciders`,
`links`. Prefer `--json` for the list-valued fields. `status` and `date`
are auto-set (`proposed` / today) but can be overridden.
### Lesson fields
`title` (required), `what_happened`, `what_went_well`, `what_didnt_work`,
`root_cause`, `action`, `category`, `owner`, `phase`, `links`. `status`
and `date` are auto-set (`open` / today) but can be overridden.
## Fallback (leyline Absent)
The entry template ships inside each scaffolded file as an HTML-comment footer
(`<!-- ENTRY TEMPLATE ... -->`). When the helper is unavailable, a consumer (or
a human) copies that block into the section above `## Archive`, assigns the
next sequential ID, fills it in, and adds an index row by hand. The fallback
template covers the same core sections as the canonical one so entries stay
consistent across the two paths.
## Consumer Hook Shape
Each workflow adds one block at its natural endpoint:
Record to the decision journal (draft + confirm):
- If leyline is installed: run journal_append.py for a {tradeoff|lesson},
drafting fields from this phase's context; show the draft; append on
confirm.
- Fallback (leyline absent): append to docs/{tradeoffs|lessons-learned}.md
using the footer ENTRY TEMPLATE; assign the next sequential ID.
## Compliance Test
python3 ${LEYLINE}/scripts/journal_append.py tradeoffs \
--title "Compliance check" --field context="verify" --dry-run
Must print a rendered entry containing `## TR-001:` and write nothing.
## Exit Criteria
- [ ] `docs/tradeoffs.md` and `docs/lessons-learned.md` exist with a
`## Active index` and an `## Archive` section.
- [ ] A new entry has a unique `TR-NNN`/`LL-NNN` id and an index row.
- [ ] Superseding an entry flips the old status to `superseded-by: <id>` and
adds bidirectional links; the old entry is not deleted.
- [ ] Re-running the same append is a no-op (idempotency holds).
- [ ] A consumer with leyline absent still produces a correctly shaped entry
from the in-file ENTRY TEMPLATE.
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.