Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Expand Down
56 changes: 1 addition & 55 deletions skills/dev-backlog/scripts/status.sh
Original file line number Diff line number Diff line change
@@ -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]

Expand Down Expand Up @@ -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
18 changes: 0 additions & 18 deletions tests/smoke/smoke-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
# ============================================================
Expand Down
Loading