Skip to content

Commit 52897da

Browse files
ADO Lens 0.5.0
ADO Lens 0.5.0
2 parents fc83253 + 47cfebc commit 52897da

27 files changed

Lines changed: 1140 additions & 41 deletions

‎.github/install-inno.ps1‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Makes sure Inno Setup 6 (ISCC.exe) is available on a GitHub runner: uses the preinstalled one, else installs it.
2+
$ErrorActionPreference = 'Stop'
3+
$known = @("${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe", "$env:ProgramFiles\Inno Setup 6\ISCC.exe")
4+
$iscc = $known | Where-Object { Test-Path $_ } | Select-Object -First 1
5+
if (-not $iscc) {
6+
choco install innosetup --no-progress -y
7+
if ($LASTEXITCODE -ne 0) { throw 'installing Inno Setup failed' }
8+
$iscc = $known | Where-Object { Test-Path $_ } | Select-Object -First 1
9+
}
10+
if (-not $iscc) { throw 'Inno Setup 6 (ISCC.exe) not found after installing' }
11+
Write-Host "Inno Setup: $iscc"

‎.github/workflows/ci.yml‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,27 @@ jobs:
3737

3838
- name: Test
3939
run: dotnet test AdoLens.sln -c Release --no-build --logger "console;verbosity=normal"
40+
41+
# The packages as a release builds them: the ZIP, the Claude Desktop extension and the installer (Inno Setup).
42+
package:
43+
name: package
44+
needs: build-test
45+
runs-on: windows-latest
46+
timeout-minutes: 20
47+
env:
48+
DOTNET_CLI_TELEMETRY_OPTOUT: '1'
49+
DOTNET_NOLOGO: '1'
50+
steps:
51+
- uses: actions/checkout@v7
52+
53+
- uses: actions/setup-dotnet@v6
54+
with:
55+
dotnet-version: 9.0.x
56+
57+
- name: Inno Setup
58+
shell: pwsh
59+
run: ./.github/install-inno.ps1
60+
61+
- name: Package
62+
shell: powershell
63+
run: .\pack.ps1 -OutDir dist -Installer

‎.github/workflows/release.yml‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,13 @@ jobs:
4141
shell: powershell
4242
run: .\release-notes.ps1 -Version $env:VERSION -OutFile dist\notes.md
4343

44+
- name: Inno Setup
45+
shell: pwsh
46+
run: ./.github/install-inno.ps1
47+
4448
- name: Package
4549
shell: powershell
46-
run: .\pack.ps1 -OutDir dist
50+
run: .\pack.ps1 -OutDir dist -Installer
4751

4852
# vX.Y.Z-beta.N is a test release: marked as pre-release, never "Latest".
4953
- name: Publish the release
@@ -52,4 +56,6 @@ jobs:
5256
GH_TOKEN: ${{ github.token }}
5357
run: |
5458
$kind = if ($env:TAG -match '-') { '--prerelease' } else { '--latest' }
55-
gh release create $env:TAG "dist/ado-lens-$env:VERSION.zip" "dist/ado-lens-$env:VERSION.zip.sha256" --title "ADO Lens $env:VERSION" --notes-file dist/notes.md --verify-tag $kind
59+
$assets = "zip", "zip.sha256", "mcpb", "mcpb.sha256" | ForEach-Object { "dist/ado-lens-$env:VERSION.$_" }
60+
$assets += "dist/ado-lens-setup-$env:VERSION.exe", "dist/ado-lens-setup-$env:VERSION.exe.sha256"
61+
gh release create $env:TAG @assets --title "ADO Lens $env:VERSION" --notes-file dist/notes.md --verify-tag $kind

‎CHANGELOG.md‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
11
# Changelog
22

3+
## 0.5.0 — 2026-10-15
4+
5+
Tests, templates, and two more ways to install.
6+
7+
- `ado_tests` (tool set `test`): the Test Cases of work items or of a sprint's requirements and bugs, with the latest
8+
outcome per plan, suite and configuration; items without tests; steps with `detail=full`.
9+
- `ado_test_create`: Test Cases from markdown (`## title`, `1. action => expected`), linked as tested-by, in the item's
10+
area and iteration, optionally added to a suite; recorded for `ado_undo`.
11+
- `ado_create template=<name>`: a team's work item template fills the values not given; `ado_fields type=…` lists the
12+
team's templates and the custom rules of the type in an inherited process.
13+
- Installer with a wizard (`ado-lens-setup-X.Y.Z.exe`, Inno Setup, per user, no administrator rights): Azure DevOps
14+
link and PAT checked before installing (the PAT goes to Credential Manager over an environment variable, never on a
15+
command line), mode, skills for Claude Code and ZIPs for Claude Desktop, registration (asks to quit Claude Desktop
16+
when needed); updates skip the questions; uninstall from Settings → Apps.
17+
- Claude Desktop extension (`ado-lens-X.Y.Z.mcpb`): project link, PAT (kept by Claude Desktop in secure storage) and
18+
mode in the extension settings.
19+
- `adolens login --pat-env <variable>` for unattended setups; without a project and with several in the organization it
20+
lists them and stops (exit code 4) instead of asking.
21+
- Releases publish the installer and the extension next to the ZIP, each with its SHA-256; CI builds all three.
22+
- `ado_upgrade` of an installation made with the installer EXE updates with the new installer EXE (SHA-256 checked,
23+
no questions), so the entry in Settings → Apps shows the new version.
24+
325
## 0.4.0 — 2026-10-15
426

527
How it works and why, and repeatable changes.

‎README.md‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ signed) program. Nothing else is needed on the machine, not even .NET.
4343

4444
The install package is not part of the repository (`dist\` is excluded by `.gitignore`). Other ways:
4545

46+
**With a wizard (installer EXE).** Download `ado-lens-setup-X.Y.Z.exe` from the **Releases** tab and run it — no
47+
administrator rights. It asks for the Azure DevOps link and the PAT (checked before anything is installed), who uses
48+
it (Product Owner / developer / everything), installs the skills and registers ADO Lens in Claude; an update skips the
49+
questions. Until the program is signed, Windows SmartScreen may show "Windows protected your PC" for a file downloaded
50+
in a browser: *More info → Run anyway* (or use the one-line install above, which avoids it). Uninstall it from
51+
*Settings → Apps*.
52+
53+
**Claude Desktop only (extension).** `ado-lens-X.Y.Z.mcpb` from **Releases**: open it with Claude Desktop (or drag it
54+
into *Settings → Extensions*) and fill in the project link and the PAT, which Claude Desktop keeps in the system's secure
55+
storage. It does not set up Claude Code or the skills; when ADO Lens is already signed in on the machine, leave the
56+
fields empty.
57+
4658
**A. From a release package** — nothing needs to be installed on the target machine, not even .NET.
4759

4860
1. Download `ado-lens-X.Y.Z.zip` from the **Releases** tab of this repository.
@@ -162,6 +174,7 @@ never a permission.
162174
| `wiki` | `ado_wiki`, `ado_wiki_write` | ✓ | ✓ | ✓ |
163175
| `trace` | `ado_trace`, `ado_changes`, `ado_file` | ✓ | ✓ | ✓ |
164176
| `recipes` | `ado_recipe` | ✓ | ✓ | ✓ |
177+
| `test` | `ado_tests`, `ado_test_create` | ✓ | – | ✓ |
165178
| `test`, `recipes` | planned | ✓ | (recipes) | ✓ |
166179
| `code` | planned | – | ✓ | ✓ |
167180

@@ -177,7 +190,7 @@ What each MCP tool answers, when Claude should reach for it, and the CLI command
177190
| `ado_fields` | types by backlog level; for a type: states, transitions, fields, required flags, allowed values; for a field: where it is used and its values; structure changes over time | before writing fields or WIQL; "which fields does a Bug have", "what changed in our process this month" | `adolens fields --type Bug`, `adolens fields --field Severity`, `adolens fields --changes 30d` |
178191
| `ado_work_item` | one or more items: state, people, paths, filled fields, description and acceptance criteria as markdown, parent / children / related, linked changesets, commits, PRs and builds; with `include`: comments, history | "what is #123 about", "who changed the criteria and when" | `adolens item 123 456 --include comments,history --detail summary` |
179192
| `ado_query` | items found by WIQL (with `@Me`, `@CurrentIteration`…) or a saved query, one line each | lists, filters, "open bugs of the sprint" | `adolens query --wiql "SELECT …"`, `adolens query --query "Shared Queries/Open bugs"` |
180-
| `ado_create` | creates an item from markdown; required fields, allowed values and people are checked first; soft length notes | writing stories, bugs, tasks | `adolens create --type Bug --title "…" --description "…" --field "Severity=2 - High"` |
193+
| `ado_create` | creates an item from markdown; required fields, allowed values and people are checked first; `template` fills what is not given from a team template; soft length notes | writing stories, bugs, tasks | `adolens create --type Bug --title "…" --description "…" --field "Severity=2 - High"` |
181194
| `ado_update` | changes one or many items (ids or WIQL): fields, state along the transitions, people, tags `+a; -b`, iteration `current`, a comment; many items → preview + `confirm` token | closing, moving to a sprint, mass changes | `adolens update 123 --state Done --comment "…"`, `adolens update --wiql "…" --tags "+reviewed"` |
182195
| `ado_comment` | markdown comment; `@[name]` mentions notify the person | asking, deciding, reporting | `adolens comment 123 "@[Anna] please confirm"` |
183196
| `ado_link` | parent, child, related, predecessor, successor, duplicate, duplicate-of, tested-by, tests; `remove` unlinks | structuring the backlog | `adolens link 123 456 --type child` |
@@ -192,6 +205,8 @@ What each MCP tool answers, when Claude should reach for it, and the CLI command
192205
| `ado_pipeline_run` | queues a pipeline by name or id, optionally on a branch, with variables | re-running a build | — |
193206
| `ado_wiki` | the project wiki: page tree (`depth`), one page as markdown with its version and subpages, or search across the project's wikis with snippets; long pages are cut unless `detail=full` | "how does X work", finding documentation | `adolens wiki`, `adolens wiki "Team/Setup"`, `adolens wiki --search "dual write"` |
194207
| `ado_wiki_write` | `create` a page, `append` / `prepend` to it, or `replace` it with the version from the last full read — a page changed by someone else in the meantime is never overwritten; optional change comment | release notes, keeping docs current | `adolens wiki-write "Team/Release notes" --file notes.md --mode append` |
208+
| `ado_tests` | the tests of work items (ids) or of a sprint's requirements and bugs: their Test Cases with the latest outcome per plan, suite and configuration (who, when), items without tests; `detail=full` adds the steps | "is it tested", sprint review | `adolens tests 123`, `adolens tests` (current sprint) |
209+
| `ado_test_create` | Test Cases for a work item from markdown (`## title`, steps `1. action => expected`), linked as tested-by, in the item's area and iteration; `plan` + `suite` (id or name) add them to a suite | turning acceptance criteria into tests | `adolens test-create 123 --file cases.md --plan R1 --suite Login` |
195210
| `ado_my_day` | since the previous working day (or `since`): where you were mentioned (all projects), your items and followed items changed by others, pull requests waiting for your review | the start of the day | `adolens myday --since 3d` |
196211
| `ado_search` | one search over work items (full text, with the field that matched), wiki pages and code (Git and TFVC, X++ objects named), grouped; a part that is not available (e.g. Code Search not installed) is reported and the rest still answers | "how does X work", "where is Y" | `adolens search "credit limit" --scope work;wiki` |
197212
| `ado_file` | a file by TFVC path, Git path + repo, or just its name (found through Code Search); X++ objects as their list of methods, `part` shows one method; `history=true`: who changed it, when, through which pull request and for which work items | "what does this object do", "why is it like this" | `adolens file CreditCheck.xml --part validate`, `adolens file CreditCheck.xml --history` |
@@ -248,6 +263,8 @@ pack.ps1 release package (ZIP + SHA-256)
248263
release.ps1 release-notes.ps1 releases (see below); .github\ CI and Release workflows, issue forms
249264
install.ps1 uninstall.ps1 installation; get.ps1 is the one-line download and install
250265
skills\ skills for Claude (po-verify, po-story, po-sprint, po-explain)
266+
packaging\inno\ installer with a wizard (Inno Setup script, built by pack.ps1 when ISCC.exe is there)
267+
packaging\mcpb\ Claude Desktop extension manifest
251268
docs\PLAN.md road map
252269
build\ dist\ output (keep nothing of your own there)
253270
```
@@ -294,6 +311,7 @@ regular expression per line, `!word` for allowed words. Without a list the relea
294311
| `SetupFlowTests.cs` | release versions and packages for updates, the team's wiki table (round trip, hand-edited pages), detecting the flow from releases and branches, the team map on the wiki with its version, local map over the team's |
295312
| `PrPipelineTests.cs` | PR lists and details (votes, checks, human threads only), PR actions (vote, comment on a line with a mention, create), failed build errors and log lines, running pipelines by name, saving environments, guessing the flow |
296313
| `TraceTests.cs` | line diff (Myers, unified hunks), X++ per method with form data sources, object names from AOT paths, `ado_trace` across TFVC and Git (deployed stages YES / NOT YET, environment labels, merged branches, deleted builds, criteria changed after coding), `ado_changes` lists and file diffs |
314+
| `TestCaseTests.cs` | test cases from markdown and their steps XML, creating and adding them to a suite, test status per item with outcomes, team templates on create, process rules in `ado_fields` |
297315
| `KnowledgeTests.cs` | search across work items, wiki and code (a missing part still answers), files found by name with X++ methods, file history with pull requests and work items, undo (values back, fields changed by others kept, comments deleted), backlog health, release notes, recipes (save, preview, run) |
298316
| `WikiTests.cs` | page tree, page with version, replace only with the current version (412 never overwrites), append, create over an existing page, search snippets |
299317
| `WorkItemTests.cs` | work item answers, required fields and allowed values before writing, transitions, preview and confirm of bulk updates, mentions, links, queries, HTML ⇄ markdown, PAT never sent to other hosts |

0 commit comments

Comments
 (0)