Mise à jour d'index des exécutions

VérifiéSûr

Met à jour déterministiquement index.json avec statut, dernier flux et timestamp. Réservé aux agents de nettoyage et préparation pour opérations stables et contrôlées.

Spar Skills Guide Bot
DeveloppementIntermédiaire
3002/06/2026
Claude Code
#index#run-status#deterministic#stable-diffs#demoswarm

Recommandé pour

Notre avis

Met à jour de manière déterministe les champs status, last_flow et updated_at dans le fichier .runs/index.json.

Points forts

  • Écritures déterministes avec diffs stables
  • Idempotent : plusieurs exécutions produisent le même résultat
  • Surface minimale : se limite à trois champs
  • Intégré via un shim pour éviter les appels directs

Limites

  • Ne peut pas créer le fichier index.json (doit déjà exister)
  • Ne met à jour que les champs status, last_flow et updated_at
  • Réservé à certains agents uniquement
Quand l'utiliser

Utilisez cette compétence pour mettre à jour l'état d'une exécution dans l'index après une étape de nettoyage ou de signal.

Quand l'éviter

Évitez de l'utiliser pour créer l'index ou modifier d'autres champs comme canonical_key ou issue_number.

Analyse de sécurité

Sûr
Score qualité92/100

The skill only uses Bash, Read, and Write to invoke a controlled shim script that updates a specific index file with prescribed fields. No destructive, exfiltrating, or obfuscated actions are instructed. The risk surface is minimal and fully contained within the repository.

Aucun point d'attention détecté

Exemples

Update run status after signal cleanup
Update the index.json to set status VERIFIED for run feat-auth after signal cleanup.

name: runs-index description: "Update index.json status. Use for: upsert index.json, update status/last_flow/updated_at. Deterministic writes - stable diffs, no creation. Use only in run-prep and *-cleanup agents. Invoke via bash .claude/scripts/demoswarm.sh index upsert-status." allowed-tools: Bash, Read, Write

Runs Index Skill

Deterministic updates to .runs/index.json. Write-bearing but with minimal surface.

Invocation

Always invoke via the shim:

bash .claude/scripts/demoswarm.sh index upsert-status [options]

Do not set PATH or call helpers directly. The shim handles resolution.


Operating Invariants

Repo root only

  • Assume working directory is repo root.
  • All paths are repo-root-relative.

Minimal ownership

This skill only updates:

  • status
  • last_flow
  • updated_at

Other fields (canonical_key, issue_number, pr_number, etc.) are owned by run-prep, signal-run-prep, and gh-issue-manager.

Stable diffs

  • Upsert by run_id (update in place, not append)
  • Preserve existing ordering
  • Output is sorted for stable git diffs

Allowed Users

Only these agents may use this skill:

  • run-prep
  • signal-run-prep
  • signal-cleanup
  • plan-cleanup
  • build-cleanup
  • gate-cleanup
  • deploy-cleanup
  • wisdom-cleanup

Command Reference

| Command | Purpose | | --------------------- | ------------------------------- | | index upsert-status | Update run status in index.json |


Quick Example

# Update index after signal cleanup
bash .claude/scripts/demoswarm.sh index upsert-status \
  --index ".runs/index.json" \
  --run-id "feat-auth" \
  --status "VERIFIED" \
  --last-flow "signal" \
  --updated-at "$(bash .claude/scripts/demoswarm.sh time now)"
# stdout: ok

Contract Rules

  1. stdout: ok on success, error message on failure
  2. exit code: 0 on success, non-zero on failure
  3. Idempotent: Running twice with same args produces same result
  4. No creation: If .runs/index.json doesn't exist, fail (run-prep owns creation)

Index Schema Reference

{
  "version": 1,
  "runs": [
    {
      "run_id": "feat-auth",
      "canonical_key": "gh-456",
      "task_key": "feat-auth",
      "task_title": "Add OAuth2 login",
      "issue_number": 456,
      "pr_number": null,
      "updated_at": "2025-12-11T22:15:00Z",
      "status": "VERIFIED",
      "last_flow": "signal"
    }
  ]
}

This skill only updates: status, last_flow, updated_at.


For Agent Authors

In cleanup agents:

  1. Use runs-index for index updates (no inline jq)
  2. Handle missing index — if .runs/index.json is missing, add a blocker and do not create it
  3. Use runs-derive for reading — this skill is write-only

Example pattern in cleanup agent:

# Get current timestamp
TIMESTAMP=$(bash .claude/scripts/demoswarm.sh time now)

# Update index
bash .claude/scripts/demoswarm.sh index upsert-status \
  --index ".runs/index.json" \
  --run-id "$RUN_ID" \
  --status "$STATUS" \
  --last-flow "signal" \
  --updated-at "$TIMESTAMP"

Installation

The Rust implementation is preferred. Install to repo-local directory:

cargo install --path tools/demoswarm-runs-tools --root .demoswarm

The shim will automatically resolve in order:

  1. .demoswarm/bin/demoswarm (repo-local install, preferred)
  2. demoswarm on PATH (global install)
  3. cargo run fallback (dev environments)
  4. Python fallback (legacy)
Skills similaires