Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
700c360
perf: optimize startup performance with metadata tracking and update …
djm81 Jan 27, 2026
4b167dd
Merge branch 'main' into dev
djm81 Jan 27, 2026
e4782ea
fix: add missing ADO field mappings and assignee display (#145)
djm81 Jan 27, 2026
a2f6ac7
Merge branch 'main' into dev
djm81 Jan 27, 2026
c74a773
fix: mitigate code scanning vulnerabilities (#148)
djm81 Jan 27, 2026
af030dc
fix: detect GitHub remotes using ssh:// and git:// URLs
djm81 Jan 27, 2026
db827a0
chore: bump version to 0.26.9 and update changelog
djm81 Jan 27, 2026
1ade334
Merge branch 'main' into dev
djm81 Jan 27, 2026
5c1cb41
fix: compare GitHub SSH hostnames case-insensitively
djm81 Jan 27, 2026
68cc345
Merge branch 'main' into dev
djm81 Jan 27, 2026
dfeb7ca
Add openspec and workflow commands for transparency
djm81 Jan 27, 2026
9e1f22d
Add specs from openspec
djm81 Jan 27, 2026
115e402
Remove aisp change which wasn't implemented
djm81 Jan 27, 2026
2675361
Fix openspec gitignore pattern
djm81 Jan 27, 2026
573fb7b
Update gitignore
djm81 Jan 27, 2026
907501e
Update contribution standards to use openspec for SDD
djm81 Jan 27, 2026
568000c
Merge branch 'main' into dev
djm81 Jan 27, 2026
fe082f6
Migrate to new opsx openspec commands
djm81 Jan 27, 2026
036afbe
Migrate workflow and openspec config
djm81 Jan 28, 2026
5a1493f
fix: bump version to 0.26.10 for PyPI publish
djm81 Jan 28, 2026
da606a1
Update version and changelog
djm81 Jan 28, 2026
608f317
Add canonical user-friendly workitem url for ado workitems
djm81 Jan 28, 2026
719256c
Update to support OSPX
djm81 Jan 28, 2026
1f94d7c
Merge branch 'main' into dev
djm81 Jan 28, 2026
bbf730a
feat(backlog): implement refine --import-from-tmp and fix type-check …
djm81 Jan 28, 2026
080743a
Merge branch 'main' into dev
djm81 Jan 28, 2026
5ab46a5
Merge branch 'main' into dev
djm81 Jan 28, 2026
1cdfc66
feat: debug logs under ~/.specfact/logs and release 0.26.13 (#159)
djm81 Jan 29, 2026
6bd9d7f
Potential fix for pull request finding 'Empty except'
djm81 Jan 29, 2026
d7d194b
Fix unused variable review
djm81 Jan 29, 2026
39563fc
Fix unused variable review
djm81 Jan 29, 2026
d15485a
Fix type and test errors
djm81 Jan 29, 2026
6c9c9b9
Merge branch 'main' into dev
djm81 Jan 29, 2026
bd9b96a
Finalize change
djm81 Jan 29, 2026
c7e4546
Change for debug logs archived
djm81 Jan 29, 2026
09e8040
Merge branch 'main' into dev
djm81 Jan 29, 2026
642e1a9
fix: improve ADO backlog refine error logging and user-facing error U…
djm81 Jan 29, 2026
64365db
Merge branch 'main' into dev
djm81 Jan 29, 2026
0d0abba
feat: backlog refine --ignore-refined and --id, startup docs (fixes #…
djm81 Jan 30, 2026
aad02cd
Add change proposals for full scrum support
djm81 Jan 30, 2026
a3c3fb4
Merge branch 'main' into dev
djm81 Jan 30, 2026
1f054c5
Add support for systematic, structured issue creation with copilot help
djm81 Jan 30, 2026
899b9c2
feat(backlog): daily standup defaults, iteration/sprint, unassigned i…
djm81 Feb 3, 2026
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
18 changes: 18 additions & 0 deletions .cursorignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Add directories or file patterns to ignore during indexing (e.g. foo/ or *.csv)
node_modules/
.venv/
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
.env.development
.env.test
.env.production
build/
__pycache__/
.ruff_cache/
.pytest_cache/
.semgrep
.coverage_cache/
dist/
3 changes: 3 additions & 0 deletions .github/workflows/pr-orchestrator.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
changes:
name: Detect code changes
Expand Down
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,39 @@ All notable changes to this project will be documented in this file.

---

## [0.26.16] - 2026-02-02

### Added (0.26.16)

- **Daily standup and progress support** (OpenSpec change `daily-standup-progress-support`, fixes [#168](https://github.com/nold-ai/specfact-cli/issues/168))
- **`specfact backlog daily <adapter>`**: Standup view listing my/filtered backlog items with id, title, status, last-updated; optional standup summary lines (yesterday/today/blockers) when present in item body (parsed from `**Yesterday:**`, `**Today:**`, `**Blockers:**`).
- **`--assignee`, `--state`, `--labels`, `--limit`**: Filter items; assignee filter for "my items" standup.
- **`--post` with `--yesterday`, `--today`, `--blockers`**: Post standup comment to the first item's linked issue when the adapter supports comments (GitHub/ADO); adapters that do not support comments report clearly without attempting to post.
- **Adapter capability**: `BacklogAdapter.supports_add_comment()` (default `False`); GitHub and ADO adapters override to return `True` when configured; `add_comment(item, body)` used for posting.
- **Docs**: `docs/guides/agile-scrum-workflows.md` (daily standup bullet), `docs/guides/devops-adapter-integration.md` (standup comments).
- **Daily standup defaults, iteration/sprint, unassigned items view** (OpenSpec change `daily-standup-progress-support`, extends [#168](https://github.com/nold-ai/specfact-cli/issues/168))
- **Default standup scope**: When `--state`/`--limit`/`--assignee` are not passed, defaults apply (state=open, limit=20, optional assignee from config). Configure via `SPECFACT_STANDUP_STATE`, `SPECFACT_STANDUP_LIMIT`, `SPECFACT_STANDUP_ASSIGNEE` or optional `.specfact/standup.yaml`; CLI options override config/env.
- **`--iteration` and `--sprint`**: Filter standup view to current iteration/sprint when adapter supports it (e.g. ADO); pass-through to fetch and filters. Sprint/iteration end date displayed when provided by adapter or config (`standup.sprint_end_date`, `SPECFACT_STANDUP_SPRINT_END`).
- **Unassigned/pending items**: Second table **Pending / open for commitment** with unassigned items (same scope); `--show-unassigned`/`--no-show-unassigned` (default true), `--unassigned-only` to show only unassigned.
- **`--blockers-first`**: Sort so items with non-empty blockers appear first. Optional priority/value column when `show_priority` or `show_value` in standup config and BacklogItem has priority/business_value (value-driven/SAFe).
- **Docs**: `docs/guides/agile-scrum-workflows.md` (daily standup: default scope, iteration/sprint, unassigned, blockers-first, priority, Kanban vs Scrum/SAFe, out-of-scope); `docs/guides/devops-adapter-integration.md` (standup config, iteration/sprint and sprint end date per adapter, blockers-first/priority, sprint goal in board/sprint settings).
- **Interactive step-by-step review and Copilot export** (OpenSpec change `daily-standup-progress-support`, extends [#168](https://github.com/nold-ai/specfact-cli/issues/168))
- **`--interactive`**: Step-by-step review with arrow-key selection (questionary): pick a story to view full detail (refine-like: description, acceptance criteria, standup fields, comments from adapter when available); navigation: Next story, Previous story, Back to list, Exit. Complementary to the backlog; not a replacement.
- **`--copilot-export <path>`**: Write summarized progress per story (same scope as daily) to a Markdown file for Copilot slash-command use during standup; one section per item (ID, title, status, assignees, last updated, progress, blockers, optional value score).
- **`--suggest-next`**: In interactive mode, show suggested next item by value score (business_value / max(1, story_points × priority)) for pending items.
- **Adapter**: Optional `get_comments(item)` on BacklogAdapter (default `[]`); GitHub adapter implements to fetch issue comments for interactive detail view.
- **Docs**: `docs/guides/agile-scrum-workflows.md` (interactive review, Copilot export); `docs/guides/devops-adapter-integration.md` (comment fetch, value score/suggestions).
- **Project backlog context** (OpenSpec change `daily-standup-progress-support`, extends [#168](https://github.com/nold-ai/specfact-cli/issues/168))
- **`.specfact/backlog.yaml`**: Store org/project per adapter (e.g. `github.repo_owner`, `github.repo_name`; `ado.org`, `ado.project`, `ado.team`); no tokens; resolution order: CLI args > env (`SPECFACT_GITHUB_REPO_OWNER`, `SPECFACT_ADO_ORG`, etc.) > file. Used by all backlog commands (daily, refine, sync bridge) so adapter context can be omitted after one-time config.
- **Git remote inference**: When org/repo or org/project are still missing after CLI/env/config, infer from `git remote get-url origin` when run from a clone (GitHub HTTPS/SSH; ADO HTTPS, SSH with keys `git@ssh.dev.azure.com:v3/...`, other SSH `user@dev.azure.com:v3/...`). Clear error with guidance if inference fails.
- **Docs**: `docs/guides/devops-adapter-integration.md` (project backlog context, git fallback); tutorial and agile-scrum updated for auto-detect.
- **Daily standup: slash prompt, summarize, and tutorial** (OpenSpec change `daily-standup-progress-support`, extends [#168](https://github.com/nold-ai/specfact-cli/issues/168))
- **`resources/prompts/specfact.backlog-daily.md`**: Slash-command prompt for interactive walkthrough with DevOps team (story-by-story, current focus, issues/open questions, discussion notes as comments); use as `specfact.daily` or `specfact.backlog-daily`.
- **`--summarize`** (stdout) and **`--summarize-to <path>`**: Output a prompt (instruction + filter context + standup data) for slash command or Copilot to generate a standup summary. Per-item data includes **body (description)** and **comments (annotations)** when adapter supports `get_comments`; wrapped in `--- BEGIN STANDUP PROMPT ---` / `--- END STANDUP PROMPT ---` for extraction. Command returns after output (no standup tables when summarizing).
- **Tutorial**: `docs/getting-started/tutorial-daily-standup-sprint-review.md`; linked in `docs/_layouts/default.html` and `docs/index.md`.

---

## [0.26.15] - 2026-01-30

### Added (0.26.15)
Expand Down
1 change: 1 addition & 0 deletions docs/_layouts/default.html
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ <h2 class="docs-sidebar-title">
<li><a href="{{ '/getting-started/installation/' | relative_url }}">Installation</a></li>
<li><a href="{{ '/getting-started/first-steps/' | relative_url }}">First Steps</a></li>
<li><a href="{{ '/getting-started/tutorial-backlog-refine-ai-ide/' | relative_url }}">Tutorial: Backlog Refine with AI IDE</a></li>
<li><a href="{{ '/getting-started/tutorial-daily-standup-sprint-review/' | relative_url }}">Tutorial: Daily Standup and Sprint Review</a></li>
</ul>

<p class="docs-nav-section">Guides</p>
Expand Down
1 change: 1 addition & 0 deletions docs/getting-started/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ uvx specfact-cli@latest plan init my-project --interactive
- 📖 **[DevOps Backlog Integration](../guides/devops-adapter-integration.md)** 🆕 **NEW FEATURE** - Integrate SpecFact into agile DevOps workflows
- 📖 **[Backlog Refinement](../guides/backlog-refinement.md)** 🆕 **NEW FEATURE** - AI-assisted template-driven refinement for standardizing work items
- 📖 **[Tutorial: Backlog Refine with AI IDE](tutorial-backlog-refine-ai-ide.md)** 🆕 - End-to-end for agile DevOps teams: slash prompt, story quality, underspecification, splitting, DoR, custom templates
- 📖 **[Tutorial: Daily Standup and Sprint Review](tutorial-daily-standup-sprint-review.md)** 🆕 - End-to-end daily standup: auto-detect repo (GitHub/ADO), view standup table, post comment, interactive, Copilot export
- 📖 **[Use Cases](../guides/use-cases.md)** - See real-world examples
- 📖 **[Command Reference](../reference/commands.md)** - Learn all available commands

Expand Down
23 changes: 17 additions & 6 deletions docs/getting-started/tutorial-backlog-refine-ai-ide.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,24 @@ This tutorial walks agile DevOps teams through integrating SpecFact CLI backlog

## Step 1: Run Backlog Refine and Get Items

From your repo root (or where your backlog lives):
From your **repo root** (or where your backlog lives):

```bash
# GitHub: fetch open items that need refinement (default: ignore already-refined)
specfact backlog refine github --repo-owner OWNER --repo-name REPO --search "is:open label:feature" --limit 5 --preview
# GitHub: org/repo are auto-detected from git remote when run from a GitHub clone
specfact backlog refine github --search "is:open label:feature" --limit 5 --preview

# Or export to a temp file for your AI IDE to process (recommended for interactive loop)
specfact backlog refine github --repo-owner OWNER --repo-name REPO --export-to-tmp --search "is:open label:feature" --limit 5
specfact backlog refine github --export-to-tmp --search "is:open label:feature" --limit 5
```

**Auto-detect from clone**: When you run from a **GitHub** clone (e.g. `https://github.com/owner/repo` or `git@github.com:owner/repo.git`), SpecFact infers `repo_owner` and `repo_name` from `git remote get-url origin`—no `--repo-owner`/`--repo-name` needed. When you run from an **Azure DevOps** clone (e.g. `https://dev.azure.com/org/project/_git/repo`; SSH keys: `git@ssh.dev.azure.com:v3/org/project/repo`; other SSH: `user@dev.azure.com:v3/org/project/repo`), org and project are inferred. Override with `.specfact/backlog.yaml`, env vars (`SPECFACT_GITHUB_REPO_OWNER`, `SPECFACT_ADO_ORG`, etc.), or CLI options when not in the repo or to override.

If you're **not** in a clone, pass adapter context explicitly:

```bash
specfact backlog refine github --repo-owner OWNER --repo-name REPO --search "is:open label:feature" --limit 5 --preview
# or ADO:
specfact backlog refine ado --ado-org ORG --ado-project PROJECT --state Active --limit 5 --preview
```

- Use `--ignore-refined` (default) so `--limit` applies to items that **need** refinement
Expand Down Expand Up @@ -116,10 +126,11 @@ When you’re satisfied with the refined content:

```bash
# If you used --export-to-tmp, save the refined file as ...-refined.md, then:
specfact backlog refine github --repo-owner OWNER --repo-name REPO --import-from-tmp --write
# (From repo root, org/repo or org/project are auto-detected from git remote)
specfact backlog refine github --import-from-tmp --write

# Or run refine interactively with --write (use with care; confirm each item)
specfact backlog refine github --repo-owner OWNER --repo-name REPO --write --labels feature --limit 3
specfact backlog refine github --write --labels feature --limit 3
```

Use `--preview` (default) until you’re confident; use `--write` only when you want to update the remote backlog.
Expand Down
Loading
Loading