feat(parking): add parking-lot skill for capturing and promoting captain ideas#381
Open
sandersjdd3 wants to merge 13 commits into
Open
feat(parking): add parking-lot skill for capturing and promoting captain ideas#381sandersjdd3 wants to merge 13 commits into
sandersjdd3 wants to merge 13 commits into
Conversation
5 tasks
f1046fc to
c5af27a
Compare
…close double-fire window
Make firstmate intake / data/backlog.md the default promote target and describe an external tracker (Jira via jira-connect, or equivalent) as an optional path only when a tracker skill is available. Drop jira-connect from the SKILL.md description frontmatter. Soften the 3:30pm cron time to a neutral mid-afternoon default. Replace domain-specific worked examples with neutral ones and drop the hard-coded PR URL from the sample ref.
…lete-then-create rule
c5af27a to
e1bd8a9
Compare
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Intent
The developer was contributing firstmate's parking-lot feature upstream to the shared template repo kunchenguid/firstmate via a fork-and-PR workflow, executing a plan a prior scout had produced. They wanted a branch cut from current upstream main (not the stale local default) holding a verified 8-commit cherry-pick set, with one expected AGENTS.md conflict resolved by keeping upstream's captain.md/learnings.md wording and inserting only the new parking.md layout line. They required generalization edits so the change would fit a shared template: making local firstmate intake / data/backlog.md the default promotion target with an external tracker like Jira/jira-connect only an optional path (and dropping jira-connect from the SKILL.md description frontmatter), softening the 3:30pm cron wording to a neutral default while keeping the anti-pileup off-:00/:30 times, and replacing Hudl-flavored examples (Redshift, hard-coded PR URL, example ids) with domain-neutral equivalents. They imposed style constraints: one sentence per line, plain dashes instead of em dashes, and no agent co-author on commits. Phase two was to validate through the fork's no-mistakes gate, opening a PR from sandersjdd3/firstmate to kunchenguid/firstmate and reporting when CI was green.
What Changed
parkingskill (SKILL.md+README.md) with a capture contract,data/parking.mdstore schema, daily/weekly resurfacing rituals, idea decay, clustering, and cron scheduling that self-re-arms via unconditional delete-then-create (sinceCronListexposes no age/expiry timestamp), plus promotion into tracked work defaulting to local firstmate intake /data/backlog.mdwith an external tracker like Jira as an optional path.data/parking.mdlayout line intoAGENTS.md,README.md, anddocs/architecture.md, and generalize examples to domain-neutral equivalents.bin/backends/herdr.shandbin/backends/cmux.shcomposer-state handling so bare prompt glyphs and ghost placeholders read as empty under a C locale (multibyte-glyph regex), withdocs/configuration.mdupdated to match.Risk Assessment
✅ Low: Docs-only addition of a parking-lot skill and AGENTS.md pointers with no executable code; prior review findings on self-re-arm wording are resolved and README/SKILL are now consistent.
Testing
Baseline test suite ran green. I ran the backend composer-state and ghost tests directly (all pass), then demonstrated the target commit's real fix end-to-end: under a C/byte locale (
LC_ALL=C) the pre-fix backend scripts misclassify the multibyte ❯ prompt and fail with "got 'pending'" for empty/ghost composers (exit 1 for both herdr and cmux), while the fixed scripts correctly report empty/pending and pass (exit 0) — captured as before/after evidence. The parking-lot feature is documentation and a skill with no runtime code path, so I verified its intent statically: jira-connect removed from the SKILL frontmatter and demoted to an optional promote path, local firstmate intake set as the default promote target, zero em-dashes in the new files, and no agent co-author on any of the 12 commits. Worktree left clean; no failures.Evidence: C-locale composer-state fix: BEFORE (base fails, exit 1) vs AFTER (target passes, exit 0)
BASE herdr=1, TARGET herdr=0; BASE cmux=1, TARGET cmux=0. Base failures under LC_ALL=C: 'not ok - a bare prompt glyph should read as empty, got pending' and 'not ok - ghost placeholder Type a message... got pending'. Target: bare ❯, ghost placeholder, and real-text assertions all ok for both herdr and cmux.Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
🔧 **Review** - 1 issue found → auto-fixed (2) ✅
.agents/skills/parking/SKILL.md:103- Self-re-arm logic branches on whether a matching cron is 'within the 7-day expiry window' vs 'outside', but CronList returns no creation time, age, or expiry timestamp, so an agent cannot reliably distinguish a near-expiry cron from a fresh one. The safe fallback (always delete-then-create) is still idempotent, but the written 'do nothing if outside window' branch is not actionable from CronList alone. Consider stating the fallback explicitly or dropping the window distinction.🔧 Fix: simplify parking self-re-arm to unconditional delete-then-create
1 warning still open:
.agents/skills/parking/README.md:28- README still describes the removed self-re-arm logic: 're-creates any parking cron that is missing or within the expiry window'. Commit 3a5ed1e simplified SKILL.md to unconditional delete-then-create precisely because CronList exposes no creation time/age/expiry timestamp to detect a 'within expiry window' cron. README now contradicts the authoritative SKILL.md (lines 100-106). Update README to describe the delete-then-create-or-create rule with the no-timestamp rationale.🔧 Fix: align parking README self-re-arm wording with delete-then-create rule
✅ Re-checked - no issues remain.
🔧 **Test** - 1 issue found → auto-fixed ✅
command -v tmux >/dev/null || { echo "tmux is required for e2e tests" >&2; exit 1; }; tmux -V; rc=0; for t in tests/*.test.sh; do echo "== $t =="; bash "$t" || rc=1; done; exit "$rc"🔧 Fix: fix composer-state multibyte glyph handling in C locale
✅ Re-checked - no issues remain.
command -v tmux >/dev/null || { echo "tmux is required for e2e tests" >&2; exit 1; }; tmux -V; rc=0; for t in tests/*.test.sh; do echo "== $t =="; bash "$t" || rc=1; done; exit "$rc"Baseline suite already ran green:for t in tests/*.test.sh; do bash "$t"; donebash tests/fm-composer-ghost.test.shbash tests/fm-backend-cmux.test.shbash tests/fm-backend-herdr.test.sh— all passRan the composer-state tests underLC_ALL=C LANG=Con the TARGET (fixed) backends: herdr and cmux both exit 0 with the bare-❯/ghost/real-text assertions passingBefore/after proof: overlaid BASE (pre-fix)bin/backends/herdr.sh+cmux.shunder current tests withLC_ALL=C— both fail (exit 1) withnot ok - a bare prompt glyph should read as empty, got 'pending'andnot ok - ghost placeholder ... got 'pending'; TARGET fixes both to exit 0Verified generalization intent:jira-connectabsent from SKILL.md frontmatter description, promote default target = firstmate local intake, 0 em-dashes in new parking files, no agent co-author across the 12 commitsConfirmed clean worktree after testing (git status --porcelainempty)✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.