* feat(loops): regeluppdat + docs-freshness scans (#1417) Two new local loops per .claude/loops.md conventions: - loop-regeluppdat (monthly): sweeps official Swedish sources (Skatteverket, BFN, Bolagsverket, regeringen/riksdagen, BAS, DIGG/ViDA) for regulatory changes, verifies each against the codebase anchors, and files deduped tickets for gaps. Tickets only, never code: regulatory changes touch money math and compliance surfaces. - loop-docs-freshness (weekly): runs scripts/check-docs-freshness.mts, which builds every docs page from source and diffs it against the live .md mirrors on docs.accounted.se; files one deduped drift issue and proposes the re-export PR in the gnubok-website repo. Both self-gate on run markers so any invocation is idempotent; loop-ignite now runs them when due (session crons cannot express weekly/monthly). Labels loop:docs and loop:regeluppdat created on the repo. Closes #1417 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(loops): explicit types for closure-captured docs-content imports next build's type check rejects the bare let-in-try pattern when the variables are read inside a nested function (implicit any). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
3.0 KiB
name, description
| name | description |
|---|---|
| loop-ignite | Verify the agentic loops are actually running and ignite any that are not. Use at the start of any session, or whenever the user manually asks to "check the pr comments" / check logs / triage issues, which signals a loop is not firing. The loops are LOCAL-only since 2026-07-20 (cloud routines retired); the historical failure mode is that nobody initiates them. |
loop-ignite
Goal: the user never has to type "check the pr comments" again. That prompt was typed 323 times between 2026-04 and 2026-07; the loops that replace it were built 2026-07-01. This skill closes the initiation gap.
Cloud routines are RETIRED (founder decision 2026-07-20). The three claude.ai triggers (trig_01J2nG7eB9gsdAb9YSGBVwa8, trig_014CmE3gTJ7ErnvL2trPYymu, trig_017hB94ieGVwreJqHpGRDVoM) fired daily for 19 days as silent no-ops (no GH_TOKEN in the cloud env, issue #993) and were deliberately disabled instead of provisioned. Do NOT re-enable or re-create them; ignore them in audits. All loops run locally now.
When invoked
- Audit what is live.
- Local schedule:
CronListfor session-local jobs invoking/loop-*skills. - Evidence of firing: recent
loop/*branches, PR comments by the loop,loop:needs-humanlabels (gh pr list,gh issue list --label loop:needs-human). - Slow loops: last
<!-- loop-docs-freshness-run: ... -->marker onloop:docsissues (due weekly) and last<!-- loop-regeluppdat-run: YYYY-MM -->marker on theRegeluppdat scan logissue (due monthly).
- Local schedule:
- Report a one-screen status table: loop, expected cadence, last observed run, verdict (LIVE / DEAD / NEVER RAN / NOT DUE).
- Ignite what is dead. For each non-live loop:
- Run the loop skill once NOW (
/loop-pr-ci-triage,/loop-issue-triage,/loop-vercel-errors) so the backlog is cleared this session. - Then schedule a session-local cadence (
CronCreateinvoking the matching/loop-*skill) and say clearly that it only runs while this session is alive (7-day auto-expiry). - Slow loops run when due, not on a cron: session crons cannot outlive 7 days, so weekly and
monthly cadences cannot be scheduled directly. If the docs-freshness marker is older than 6
days (or absent), run
/loop-docs-freshnessonce now; if the regeluppdat marker is not from the current calendar month, run/loop-regeluppdatonce now. Both self-gate, so running them again is a cheap no-op. - If a loop cannot run at all, file the blocker as a GitHub issue so the gap is visible instead of silent.
- Run the loop skill once NOW (
- Switch-on check (mandatory): after igniting, verify via
CronListthat the jobs exist. End with either "ALL LOOPS LIVE (session-local)" or "NOT SWITCHED ON YET: - <what remains, who flips it>".
If the user manually types a loop-shaped request
("check the pr comments", "check the vercel/supabase logs for errors", "triage the issues") Do the requested work, then ALSO run the audit above and tell the user which loop should have made the request unnecessary, and whether it is now live.