Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
34fcaf3
Fix TUI post-design messaging and sync fork in release pipeline
a11smiles Mar 5, 2026
9f9ee9b
Bump to v0.2.1b5, improve task tree UX, and add Python 3.13 to CI
a11smiles Mar 5, 2026
eb776fe
Remove eager infra/apps/db directory creation from init scaffold
a11smiles Mar 11, 2026
2daca0b
Fix __pycache__ warning during wheel build
a11smiles Mar 11, 2026
c133630
Fix --output-dir nesting project inside subdirectory
a11smiles Mar 11, 2026
a2c47d5
Add --output-dir and hint fixes to HISTORY.rst
a11smiles Mar 11, 2026
cd54c08
Derive naming env and zone_id from --environment flag
a11smiles Mar 11, 2026
39d4660
Add json_output parameter to all command functions
a11smiles Mar 11, 2026
ad579ad
Fix black formatting in custom.py
a11smiles Mar 11, 2026
3af3f23
Fix TUI stage tree status and add stage skip guard
a11smiles Mar 11, 2026
98a6924
Unify missing-project error message across all commands
a11smiles Mar 11, 2026
a00a325
Rework cost analysis display: --table, --report, --json flags
a11smiles Mar 11, 2026
874e2c6
Move generate docs default output to concept/docs/
a11smiles Mar 11, 2026
fe239fd
Normalize path separators in generate docs/speckit output
a11smiles Mar 11, 2026
83f3979
Add path normalization entry to HISTORY.rst
a11smiles Mar 11, 2026
0f8fff3
Fix cross-mount path crash in generate docs/speckit --path
a11smiles Mar 11, 2026
2b537ba
Generate spec-kit templates instead of duplicating docs
a11smiles Mar 11, 2026
8886dfd
Enrich speckit generation with full project context
a11smiles Mar 11, 2026
2a186d1
Enrich backlog generation with full project context
a11smiles Mar 11, 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
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12"]
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v4
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -205,9 +205,12 @@ jobs:
# Ensure fork exists (no-op if already forked)
gh repo fork Azure/azure-cli-extensions --clone=false || true

# Clone the fork via gh (handles auth automatically)
# Sync fork's main with upstream so we have the latest index/service files
GH_USER=$(gh api user -q .login)
echo "Fork owner: $GH_USER"
gh repo sync "${GH_USER}/azure-cli-extensions" --source Azure/azure-cli-extensions --branch main --force

# Clone the fork via gh (handles auth automatically)
gh repo clone "${GH_USER}/azure-cli-extensions" azure-cli-extensions -- --depth 1

# Add upstream for PR targeting
Expand Down
16 changes: 16 additions & 0 deletions .github/workflows/repostats.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
on:
schedule:
# Run this once per day, towards the end of the day for keeping the most
# recent data point most meaningful (hours are interpreted in UTC).
- cron: "0 23 * * *"
workflow_dispatch: # Allow for running this manually.

jobs:
j1:
name: repostats-for-nice-project
runs-on: ubuntu-latest
steps:
- name: run-ghrs
uses: jgehrcke/github-repo-stats@RELEASE
with:
ghtoken: ${{ secrets.STATS_GITHUB_TOKEN }}
105 changes: 105 additions & 0 deletions HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,111 @@
Release History
===============

0.2.1b5
+++++++

Backlog enrichment
~~~~~~~~~~~~~~~~~~~
* **Enriched backlog with full project context** — ``generate backlog``
now loads build stages, deploy status, cost analysis, and stage
completion (same context as spec-kit) for richer item generation.
* **Completed work items** — items for already-built/deployed stages are
generated with ``status: done`` and grouped under a "Completed POC Work"
epic, with tasks marked as done.
* **Production Readiness epic** — dedicated epic for POC-to-production
work (SKU upgrades, networking, CI/CD, monitoring, DR), separate from
generic "Deferred / Future Work".
* **Azure DevOps hierarchy** — generation prompt requests Feature → User
Story → Task structure with ``children[]``; push code now creates Task
work items linked to their parent User Story.
* **Dict task format** — tasks can be ``{"title": "...", "done": true}``
objects; GitHub issues render completed tasks as ``[x]``, DevOps
descriptions show checkbox markers. String tasks remain supported.

Spec-kit enrichment
~~~~~~~~~~~~~~~~~~~~
* **Enriched spec-kit with full project context** — ``generate speckit``
now loads discovery state, build stages, deploy status, cost analysis,
and stage completion to populate templates with real project data.
* **Per-template prompt overrides** — each spec-kit template gets a
tailored AI prompt that tells the doc-agent exactly which context
sections to use and what output format to produce.
* **production.md** — new template covering POC-to-production guidance:
SKU upgrades, networking, CI/CD, monitoring, DR, load testing, and
estimated production costs.
* **Restructured tasks.md** — tasks now map 1:1 to build/deploy stages
with status markers: ``[x]`` completed, ``[!]`` failed, ``[ ]`` pending.
Added Phase 6 (Production Readiness) for hardening tasks.

Init improvements
~~~~~~~~~~~~~~~~~~
* **Removed eager directory creation from init** — ``concept/apps/``,
``concept/infra/`` (terraform/, bicep/), and ``concept/db/`` (sql/,
cosmos/, databricks/, fabric/) are no longer created during
``az prototype init``. These directories are now created on demand
by the build stage only when they are actually needed.
* **Fixed --output-dir nesting** — ``--output-dir ./my-output`` now
uses the specified directory as the project root instead of creating
a ``name/`` subdirectory inside it.
* **Fixed "Next: cd ..." hint** — the summary panel now shows the
actual project directory name instead of always displaying the
``--name`` value.
* **--json flag on all commands** — added ``json_output`` parameter to
every command function so the global ``--json`` / ``-j`` flag is
accepted on all 24 commands (previously only 3 accepted it).
* **Naming env/zone_id derived from --environment** — ``naming.env``
and ``naming.zone_id`` in ``prototype.yaml`` now reflect the chosen
environment (dev→dev/zd, staging→stg/zs, prod→prd/zp) instead of
always defaulting to ``dev``/``zd``.

TUI stage tree fix
~~~~~~~~~~~~~~~~~~
* **Fixed stage tree showing completed checkmark for unstarted stages** —
when launching with ``--stage design`` from an init-only project, the
Design stage now correctly shows as in-progress (●) instead of
completed (✓). Stage status is now derived from detected state files,
not the target stage.
* **Stage skip guard** — ``--stage deploy`` from an init-only project
now prints a warning and falls back to the next valid stage (e.g.
design) instead of allowing users to skip ahead.
* **Consistent "no project" error message** — all commands now show the
same red ``CLIError`` message when ``prototype.yaml`` is missing:
*"No prototype project found. Run 'az prototype init'."*
* **Replaced ``--output-format`` with ``--table`` / ``--report``** — the
``analyze costs`` command shows the cost summary table by default,
``--table`` shows the summary without saving a file, ``--report``
shows the full detailed report, and ``--json`` returns raw JSON.
The ``generate backlog`` command uses ``--table`` instead of
``--output-format``.
* **``--json`` on cost analysis returns full content** — ``--json`` now
suppresses console output and returns a structured JSON dict with the
full cost report in the ``content`` field for machine consumption.
* **``generate docs`` default output moved to ``concept/docs/``** —
documentation is now generated alongside other concept artifacts
instead of a separate ``docs/`` directory at the project root.
* **Normalized path separators in generate output** — displayed paths
now use forward slashes on all platforms instead of mixed separators
on Windows. Also handles cross-mount ``--path`` values (e.g.
``Y:\output`` from a ``\\Mac\projects`` project) without crashing.
* **Spec-kit generates its own templates** — ``generate speckit`` now
produces spec-kit-specific files (``constitution.md``, ``spec.md``,
``plan.md``, ``tasks.md``) aligned with the `spec-kit
<https://github.com/github/spec-kit>`_ format instead of duplicating
the documentation templates.

TUI post-design improvements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* **Removed CLI "Next steps" from TUI** — the ``az prototype`` CLI
commands block is no longer printed into the TUI console after
architecture generation; replaced with a continuation prompt.
* **"continue" launches build** — typing ``continue`` after design
completes now starts the build stage, matching the prompt text.
* **Reduced console noise** — removed extra blank lines between
"Planning...", "Generating architecture...", and feasibility
check messages in the TUI output.
* **Feasibility wording** — changed "Reviewing {iac} feasibility..."
to "Confirming {iac} feasibility..." and removed the arrow prefix.

0.2.1b4
+++++++

Expand Down
10 changes: 7 additions & 3 deletions azext_prototype/_help.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,10 +214,14 @@
the command returns the cached result unless the design context has
changed. Use --refresh to force a fresh analysis.
examples:
- name: Generate cost estimate
- name: Show cost summary table (default)
text: az prototype analyze costs
- name: Get costs in JSON format
text: az prototype analyze costs --output-format json
- name: Show cost summary table only (no file save)
text: az prototype analyze costs --table
- name: Show full detailed cost report
text: az prototype analyze costs --report
- name: Get costs as JSON
text: az prototype analyze costs --json
- name: Force fresh analysis (bypass cache)
text: az prototype analyze costs --refresh
"""
Expand Down
22 changes: 14 additions & 8 deletions azext_prototype/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,16 @@ def load_arguments(self, _):

with self.argument_context("prototype analyze costs") as c:
c.argument(
"output_format",
arg_type=get_enum_type(["table", "json", "markdown"]),
help="Output format for the cost report.",
default="markdown",
"table",
action="store_true",
default=False,
help="Display only the cost summary table.",
)
c.argument(
"report",
action="store_true",
default=False,
help="Display the full detailed cost report.",
)
c.argument(
"refresh",
Expand All @@ -259,10 +265,10 @@ def load_arguments(self, _):
c.argument("org", help="Organization or owner name (GitHub org/user or Azure DevOps org).")
c.argument("project", help="Project name (Azure DevOps project or GitHub repo).")
c.argument(
"output_format",
arg_type=get_enum_type(["table", "json", "markdown"]),
help="Output format for the backlog.",
default="markdown",
"table",
action="store_true",
default=False,
help="Display backlog as a table instead of markdown.",
)
c.argument(
"quick",
Expand Down
2 changes: 1 addition & 1 deletion azext_prototype/azext_metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"azext.isPreview": true,
"azext.minCliCoreVersion": "2.50.0",
"name": "prototype",
"version": "0.2.1b4",
"version": "0.2.1b5",
"azext.summary": "Azure CLI extension for building rapid prototypes with GitHub Copilot.",
"license": "MIT",
"classifiers": [
Expand Down
Loading
Loading