diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a7bf49..440b557 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ Each entry links the GitHub issue (the canonical spec) and the merge PR (the shi ## [Unreleased] +### Changed + +- **status.sh trailing sections deleted** — the Local Files block (counted `tasks/*.md` mirrors by a Backlog.md `status:` field, a format parked at `v0.11.0`), the Relay Runs block (re-derived another tool's run-directory slug and grepped its manifests), and the Past sprints line are gone (54 lines with their smoke fixture); each was one command away and nothing consumed them. Output now ends after the Active Sprint block; `--json` and `--track` are unchanged. Closes [#459](https://github.com/sungjunlee/dev-backlog/issues/459). + ## [0.12.0] — 2026-09-17 Headline: **the core-competence release.** Epic #440 returns the skill to GitHub-only (charter rev 19): the `files` adapter, tracker ports, `.tracker` selection, and the diagnostic export are parked at tag `v0.11.0`. Scripts shrank to the four surfaces that beat `gh` plus file reads — the sprint-file contract, fail-loud shared-state guards (track overlap, unmoored `[~]`, `status: completed`), the `sprint-state` JSON dev-relay consumes, and the `triage-apply` human gate — measured as dev-backlog scripts 8,234 → 2,807 lines, backlog-triage scripts 3,359 → 945, tests 9,738 → 4,623, with SKILL.md at 157 lines / never-only-must 5, backlog-triage SKILL.md 116 → 44, and references 4 → 3. The Work rail is a `gh issue view` read; the backlog-triage report is written by the session (deletion decided by a fixture-backed real A/B). Conformance is `docs/conformance/2026-09-17-core-competence.md` (every batch before/after on Claude Fable 5.1 and GPT-6 Astra, no new PARTIAL/FAIL). BREAKING: `.tracker=files` repos must stay on v0.11.0; `effective-task-spec.js`, `sync-pull.js`, milestone seeding in `sprint-init.js`, the Tracker Tasks listing in `status.sh`, the doctor's `reassess_signal`, `setup-dev-backlog.js --project-name`/`--dry-run`/GitHub probe, and the leftover task-file archive step in `sprint-close.sh` are gone. Rollback point: tag `v0.11.0`. diff --git a/skills/dev-backlog/scripts/status.sh b/skills/dev-backlog/scripts/status.sh index e25334a..3394dab 100755 --- a/skills/dev-backlog/scripts/status.sh +++ b/skills/dev-backlog/scripts/status.sh @@ -1,6 +1,6 @@ #!/bin/bash set -uo pipefail -# Project status from the sprint file(s) plus leftover local files. +# Project status from the active sprint file(s). # Open Issues are a `gh issue list` the session runs itself. # Usage: bash scripts/status.sh [--json] [backlog-dir] @@ -107,57 +107,3 @@ if [ -d "$SPRINTS_DIR" ]; then else echo "(no $BACKLOG_DIR/sprints/ directory)" fi - -# --- Local Files --- -echo "" -echo "=== Local Files ===" -if [ -d "$BACKLOG_DIR/tasks" ]; then - total=$(find "$BACKLOG_DIR/tasks" -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ') - todo=$(find "$BACKLOG_DIR/tasks" -maxdepth 1 -name "*.md" -exec grep -l "^status: .*To Do" {} \; 2>/dev/null | wc -l | tr -d ' ') - inprog=$(find "$BACKLOG_DIR/tasks" -maxdepth 1 -name "*.md" -exec grep -l "^status: .*In Progress" {} \; 2>/dev/null | wc -l | tr -d ' ') - echo "Tasks: $total total, $todo To Do, $inprog In Progress" -else - echo "No $BACKLOG_DIR/tasks/ directory" -fi - -# --- Relay Runs (optional — only when dev-relay is installed) --- -RELAY_HOME="${RELAY_HOME:-$HOME/.relay}" -REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) -if [ -n "$REPO_ROOT" ] && [ -d "$RELAY_HOME/runs" ]; then - RESOLVED=$(cd "$REPO_ROOT" && pwd -P) - SLUG_BASE=$(basename "$RESOLVED" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g; s/^-\|-$//g') - # Portable sha256: prefer sha256sum (Linux), fall back to shasum (macOS) - if command -v sha256sum >/dev/null 2>&1; then - SLUG_HASH=$(printf '%s' "$RESOLVED" | sha256sum | cut -c1-8) - elif command -v shasum >/dev/null 2>&1; then - SLUG_HASH=$(printf '%s' "$RESOLVED" | shasum -a 256 | cut -c1-8) - else - SLUG_HASH="" - fi - if [ -n "$SLUG_HASH" ]; then - RELAY_RUNS_DIR="$RELAY_HOME/runs/${SLUG_BASE}-${SLUG_HASH}" - if [ -d "$RELAY_RUNS_DIR" ]; then - ACTIVE_MANIFESTS=$(find "$RELAY_RUNS_DIR" -maxdepth 1 -name "*.md" \ - -exec grep -lE "^state: *(dispatched|review_pending|changes_requested|ready_to_merge)" {} + 2>/dev/null) - ACTIVE_RUNS=$(echo "$ACTIVE_MANIFESTS" | grep -c '.' 2>/dev/null) || ACTIVE_RUNS=0 - if [ "$ACTIVE_RUNS" -gt 0 ]; then - echo "" - echo "=== Relay Runs ===" - echo "$ACTIVE_MANIFESTS" | while IFS= read -r mf; do - [ -z "$mf" ] && continue - RUN_ID=$(basename "$mf" .md) - STATE=$(awk -F': *' '/^state:/{gsub(/['"'"'"]/,"",$2); print $2; exit}' "$mf") - echo " $RUN_ID ($STATE)" - done - fi - fi - fi -fi - -# --- Past Sprints --- -if [ -d "$SPRINTS_DIR" ]; then - PAST=$(find "$SPRINTS_DIR" -maxdepth 1 -name "*.md" ! -name "_context.md" -exec grep -l "^status: completed" {} \; 2>/dev/null | wc -l | tr -d ' ') - if [ "$PAST" -gt 0 ]; then - echo "Past sprints: $PAST" - fi -fi diff --git a/tests/smoke/smoke-test.sh b/tests/smoke/smoke-test.sh index a1b4255..cd395e8 100644 --- a/tests/smoke/smoke-test.sh +++ b/tests/smoke/smoke-test.sh @@ -676,24 +676,6 @@ assert_equals "next json overlap: fail-loud exit code" "$STATUS" "1" assert_contains "next json overlap: message" "$OUT" "Active tracks overlap on scope" rm "$TEST_DIR/.dev-backlog/sprints/2026-03-ov-a.md" "$TEST_DIR/.dev-backlog/sprints/2026-03-ov-b.md" -# --- status.sh: local files section --- -mkdir -p "$TEST_DIR/.dev-backlog/tasks" -cat >"$TEST_DIR/.dev-backlog/tasks/BACK-1.md" <<'EOF' ---- -status: To Do ---- -EOF -cat >"$TEST_DIR/.dev-backlog/tasks/BACK-2.md" <<'EOF' ---- -status: In Progress ---- -EOF - -OUT=$(bash "$SCRIPT_DIR/status.sh" "$TEST_DIR/.dev-backlog") -assert_contains "status: task count" "$OUT" "Tasks: 2 total" -assert_contains "status: todo count" "$OUT" "1 To Do" -assert_contains "status: inprog count" "$OUT" "1 In Progress" - # ============================================================ # integration contract pattern tests # ============================================================