workflow-maintenance-log
Maintain per-workflow developer logs in Obsidian when working on Galaxy workflows. Use whenever creating, version-bumping, fixing, or updating an IWC/Galaxy `.ga` workflow or its `-tests.yml`. Logs detailed changes, test YAML edits, and `planemo` invocation history so the correct planemo command (full `planemo test` vs fast `workflow_test_on_invocation`) is obvious without guessing. Triggers on any session that edits `.ga`, edits `-tests.yml`, runs `planemo test`/`planemo workflow_test_on_invocation`, or prepares an IWC PR.
What this skill does
# Galaxy Workflow Maintenance Log
This skill prescribes a single, consistent record-keeping practice for Galaxy workflow maintenance across all projects: one Obsidian note per (workflow, version-bump) pair, with a fixed 3-section structure.
## Why this skill exists
Without a persistent record, sessions default to `planemo test` (a full ~10–30 minute Galaxy re-run) when `planemo workflow_test_on_invocation <id>` (seconds) would do — because nothing in the working directory tells the assistant whether a recent *successful* invocation exists or whether the test YAML has been edited since that invocation. This skill creates that record.
It also makes input/output coherence checks, test-data Zenodo swaps, and re-uploads from Galaxy auditable across sessions.
## When to use this skill
Triggered any time the current session involves:
- Creating a new Galaxy workflow `.ga` for IWC submission
- Bumping the `release` version of an existing workflow
- Editing the workflow `.ga` (parameter labels, tool versions, conditional logic, new tools, etc.)
- Editing the workflow's `-tests.yml` (assertions, new test cases, Zenodo URL swaps)
- Re-uploading the workflow from a Galaxy server (because re-uploads silently drop fields like `release`)
- Running `planemo workflow_lint`, `planemo test`, or `planemo workflow_test_on_invocation`
- Preparing an IWC PR / running `/prepare-for-iwc`
If the session touches any of the above, the log note must exist and be current before the session ends.
## Where the log lives
```
$OBSIDIAN_VAULT/Work/Workflow maintenance/[Workflow Name] - [old version] to [new version].md
```
- Use the `$OBSIDIAN_VAULT` env var to resolve the vault root.
- Create the `Work/Workflow maintenance/` folder on first use.
- `[Workflow Name]` matches the `.ga` filename (e.g. `Precuration-Jbrowse-tracks-alignments`).
- `[old version]` is the previous `release` value, or `new` for a brand-new workflow.
- `[new version]` is the target `release` value for this maintenance cycle.
Examples:
- `Precuration-Jbrowse-tracks-alignments - new to 0.1.md` (first release)
- `hi-c-contact-map-for-assembly-manual-curation - 2.4 to 2.5.md` (version bump)
- `Scaffolding-HiC-VGP8 - 1.3 to 1.4.md`
One note per version transition. When you bump again later, create a new note (`2.5 to 2.6.md`); don't overwrite.
## Fixed 3-section structure
Every note follows this exact layout (use the template below). Section order matters: developers consult section 3 first to decide which planemo command to run, but the test-run rows only make sense in light of sections 1 and 2.
### 1. Detailed Changes
Developer-oriented (NOT user-facing CHANGELOG-style). Each bullet describes one concrete change. Cover anything that affects how downstream consumers wire into the workflow:
- Input/output **label** changes (the exact old → new string)
- Input/output **format constraints** (added `fasta.gz`, dropped `tabular`, etc.)
- Input/output **optionality** changes
- Workflow **tags** added or removed
- New / removed tool steps, with their purpose
- Conditional wiring changes (`when:` clauses, new branches)
- Post-job action changes (renames, tag actions, hide/show)
- Tool version bumps (with old → new versions)
- Annotation/description changes
- Anything else a downstream workflow consumer might trip on
### 2. Test File Changes
Every edit to `-tests.yml` since the start of this version cycle gets one row in a table:
| Date+time | Change |
|---|---|
| 2026-05-07 14:35 | Added Test 2 (dual hap with gene annotation) |
| 2026-05-07 14:52 | Switched assertions from `element_tests` keyed by Haplotype_* to keyed by Related_species_* |
| 2026-05-11 09:10 | Migrated 4 large files to Zenodo record 20074725 with SHA-1 hashes |
Use local date+time at the moment of the edit. Don't backfill from git; describe the *intent* of the edit, not just the diff.
### 3. Test Runs and Results
Every `planemo` test invocation gets one row. This is the table that decides the next planemo command:
| Date+time | Command | Invocation ID | Result | Notes |
|---|---|---|---|---|
| 2026-05-07 14:10 | `planemo test` | `0e629c369241ee34` | ✅ Test 1 passed | First green run; Test 2 not yet written |
| 2026-05-07 14:50 | `planemo workflow_test_on_invocation` against `0e629c369241ee34` | (same) | ❌ Failed: collection element ids wrong | Iterated test YAML |
| 2026-05-07 14:55 | `planemo workflow_test_on_invocation` against `0e629c369241ee34` | (same) | ✅ Pass after switching to Related_species_* | |
| 2026-05-11 09:25 | `planemo test` | `<new id>` | ✅ Both tests pass | Live Zenodo URLs |
Important columns:
- **Invocation ID** — extract from `Invocation <ID>` in planemo's top-level progress panel.
- **Result** — ✅ pass, ❌ fail, or ⚠️ partial. Include the short failure reason on fail.
- **Notes** — anything you'd want to remember about why this run happened.
After every workflow `.ga` edit, mark all prior invocations as **stale** for `workflow_test_on_invocation` use (add `(stale)` next to the ID in the Notes column of subsequent rows). Test YAML edits do NOT make an invocation stale — they're exactly what `workflow_test_on_invocation` is for.
## Decision rule (the whole point)
Before running any planemo command, consult section 3:
- Most recent **green** run is on the **current** `.ga` → use `planemo workflow_test_on_invocation <that_id>` (fast)
- No green run on current `.ga`, OR `.ga` has changed since the last green run → use full `planemo test` (slow)
Always update sections 2 and 3 immediately after the corresponding action; don't batch.
## Template
When creating a new note, use this scaffold (fill in the four `[...]` slots):
```markdown
---
workflow: [Workflow Name]
old_version: [old]
new_version: [new]
ga_path: [absolute or repo-relative path to the .ga file]
created: [YYYY-MM-DD]
---
# [Workflow Name] — [old] to [new]
## 1. Detailed Changes
-
## 2. Test File Changes
| Date+time | Change |
|---|---|
| | |
## 3. Test Runs and Results
| Date+time | Command | Invocation ID | Result | Notes |
|---|---|---|---|---|
| | | | | |
```
## After re-uploading from Galaxy
When you export a workflow from Galaxy and overwrite the local `.ga`, expect these to be silently undone:
- `release` field reverts to `null` — planemo lint will then error: `The workflow ... has no release`
- Manually-corrected typos in parameter labels revert to what Galaxy stored
- Step annotations and labels are mostly preserved but worth diffing
**Always**: after a re-upload, run `/prepare-for-iwc` (or manually re-set `release` + re-apply local label fixes), then verify input/output coherence against this log's section 1 before continuing. Record the re-upload as a row in section 2 ("Test File Changes") if it caused test edits, or add a quick note in section 1.
## Interaction with other skills
- **`workflow-development`** — that skill defines the planemo command reference and `prepare-for-iwc` flow. This skill is the *log* that informs those decisions.
- **`obsidian`** — that skill normally requires asking the user where to save notes. For this skill, the location is fixed (`Work/Workflow maintenance/`), so don't re-ask each time.
## Don'ts
- Don't substitute the project's `CHANGELOG.md` for this note — CHANGELOG is user-facing, this log is developer-facing. They serve different audiences.
- Don't create one note per session — create one per (workflow, version transition). Multiple sessions append to the same note.
- Don't omit a row in section 3 for a "trivial" planemo run. Even failed setup runs belong there; they often explain why an invocation is or isn't reusable.
- Don't backfill timestamps from git — record the wall-clock time when the edit/run happens.
Related in Code Review
gstack
IncludedFast headless browser for QA testing and site dogfooding. Navigate pages, interact with elements, verify state, diff before/after, take annotated screenshots, test responsive layouts, forms, uploads, dialogs, and capture bug evidence. Use when asked to open or test a site, verify a deployment, dogfood a user flow, or file a bug with screenshots. (gstack)
startup-due-diligence
IncludedLegal due diligence review for seed-stage and Series A startups (US, Delaware C-Corp focus). Supports both investor and founder perspectives. Capabilities include: (1) Interactive document review and issue spotting; (2) Document request list generation; (3) Cap table and SAFE/convertible note analysis; (4) Red flag identification with severity ratings; (5) Diligence report generation. TRIGGERS: due diligence, DD, startup investment, cap table review, Series A, seed round, investor diligence, legal review startup, SAFE analysis, convertible note, 409A, founder vesting.
interview-master
IncludedThis skill should be used when the user asks to "generate interview questions", "prepare for interview", "optimize resume", "conduct mock interview", "analyze git commits for resume", "generate resume from code", "review my resume", or mentions interview preparation, career assistance, or extracting project experience from git history. Provides comprehensive interview and career development guidance for both job seekers and interviewers.
fix-issue
IncludedFixes GitHub issues using parallel analysis agents for root cause investigation, code exploration, and regression detection. Reads issue context from gh CLI, searches codebase and memory for related patterns, generates a fix with tests, and links the resolution back to the issue via PR. Includes prevention analysis to avoid recurrence. Use when debugging errors, resolving regressions, fixing bugs, or triaging issues.
sf-apex
IncludedGenerates and reviews Salesforce Apex code with 150-point scoring. TRIGGER when: user writes, reviews, or fixes Apex classes, triggers, test classes, batch/queueable/schedulable jobs, or touches .cls/.trigger files. DO NOT TRIGGER when: LWC JavaScript (use sf-lwc), Flow XML (use sf-flow), SOQL-only queries (use sf-soql), or non-Salesforce code.
swift-development
IncludedComprehensive Swift development for building, testing, and deploying iOS/macOS applications. Use when Claude needs to: (1) Build Swift packages or Xcode projects from command line, (2) Run tests with XCTest or Swift Testing framework, (3) Manage iOS simulators with simctl, (4) Handle code signing, provisioning profiles, and app distribution, (5) Format or lint Swift code with SwiftFormat/SwiftLint, (6) Work with Swift Package Manager (SPM), (7) Implement Swift 6 concurrency patterns (async/await, actors, Sendable), (8) Create SwiftUI views with MVVM architecture, (9) Set up Core Data or SwiftData persistence, or any other Swift/iOS/macOS development tasks.