The same API, the next feature, started from Rally and SharePoint.
The hello-world run started from a Slack message. Real teams start from a Rally feature with accepted stories and a product spec in SharePoint. AI-DLC 2.11 reads only files inside the workspace, so the team snapshots both into the workspace, commits them, and names them in the request. You start from that committed workspace: one git clone of the rally-feature branch. This page shows exactly what changes, with real input files and real aidlc output. It does not replay an AI run: what Claude will do at each gate is labelled expected.
What changes compared with the hello-world run
| Hello-world run (request age) | This feature (reviewer queue filters) | |
|---|---|---|
| Start from | The starter code repo, plus the team files downloaded by hand | One clone: aidlc-java-workspace, branch rally-feature, with the finished hello-world run and the inputs already committed |
| Input | A Slack message, pasted into docs-in/request.md | A Rally feature + 3 stories, exported to docs-in/rally/F1187-…md; a SharePoint spec, onboarded into knowledge/ |
| Who wrote the requirement | Claude, from the message, at Requirements Analysis | Product already wrote stories and acceptance criteria. Claude turns them into numbered requirements that cite the story IDs |
| Profile | express: 10 of 33 stages | express again: one repo, stories accepted. It skips User Stories (2.4) and Units Generation (2.7), which is right: Rally already holds the stories |
| Reverse engineering | Full scan of the repo | The codekb from the last run is kept, but it is a scan of v1.0.2: at v1.1.0 aidlc engine workspace codekb-scope-diff --repo priorauth-api reports it STALE, so expect a rescan of what changed (the aging package) |
| Team steps | Branch, commit, PR, commit the record | The same, plus snapshot the inputs before /aidlc and write back to Rally after the PR |
| New workspace files | none | docs-in/rally/, docs-in/sharepoint/, scripts/export-rally.py, knowledge/documents/ + knowledge/documentkb/, a few lines in CLAUDE.md |
Clone the starter workspace at the rally-feature branch
Everything this feature needs is already committed on one branch: the finished hello-world run, the Rally export, the onboarded spec and the team's input rules. You clone it, let AI-DLC set up its files and pull in the code repo, and start a branch for the change from v1.1.0, where the hello-world run left the code.
mkdir C:\work -Force | Out-Null cd C:\work git clone -b rally-feature https://github.com/varasrinivas/aidlc-java-workspace.git java-workspace cd java-workspace aidlc config --harness claude aidlc system workspace-sync git -C priorauth-api switch -c request-filters v1.1.0
mkdir -p ~/work && cd ~/work git clone -b rally-feature https://github.com/varasrinivas/aidlc-java-workspace.git java-workspace cd java-workspace aidlc config --harness claude aidlc system workspace-sync git -C priorauth-api switch -c request-filters v1.1.0
Cloning into 'java-workspace'... configured …\java-workspace for Claude Code 2.11.0; next: open Claude Code in this project … aidlc workspace-sync: reconciling …\java-workspace against repos.json (1 repo(s)) staging clone priorauth-api from https://github.com/varasrinivas/aidlc-priorauth-api.git (branch main) ... ✓ cloned priorauth-api on 'main' ✓ .gitignore managed block → 1 child dir(s) ✓ aidlc.code-workspace → 1 child root(s) ✓ workspace in sync Switched to a new branch 'request-filters'
java-workspace/ branch rally-feature of aidlc-java-workspace CLAUDE.md team rules + the Rally/SharePoint input rules (step 4) repos.json priorauth-api, cloned from the public starter repo docs-in/rally/F1187-reviewer-queue-filters.md the export AI-DLC reads (step 2) docs-in/rally/F1187.json the Rally API responses it was made from docs-in/sharepoint/Reviewer-Queue-API-Spec.md the spec, as markitdown converted it from Word scripts/export-rally.py turns the API responses into the .md aidlc/spaces/default/knowledge/ the spec, onboarded (step 3) aidlc/spaces/default/codekb/priorauth-api/ the hello-world scan, at v1.0.2 aidlc/spaces/default/intents/261013-…/ the hello-world run: status complete priorauth-api/ cloned by workspace-sync; branch request-filters at v1.1.0
$ git log --oneline 299f894 F1187 inputs: Rally export, SharePoint spec onboarded, input rules f0c0c0f intent 261013-request-age-api: complete (PR #58, v1.1.0) 97693a3 Workspace for priorauth-api: team rules, repo list, verify scripts
repos.json brings the code repo back on every machine.workspace-sync checks out main of the starter, which is v1.0.2 (before the hello-world change). This feature builds on the age fields, so the branch starts from the tag v1.1.0.aidlc doctor reports "Hooks have never executed although this workflow has progressed 10 stages": the finished run came from another machine. It clears when the hooks run in your first claude session.The Rally feature, already exported to a file AI-DLC can read
Kiran exported the feature before committing it. Re-run the export yourself: it rewrites the Markdown from the saved API response, and git status printing nothing proves the committed file is exactly what the script produces. Later, the same script calls Rally with a read-only key.
python scripts\export-rally.py --from-json docs-in\rally\F1187.json --out docs-in\rally\F1187-reviewer-queue-filters.md git status --short docs-in
python3 scripts/export-rally.py --from-json docs-in/rally/F1187.json --out docs-in/rally/F1187-reviewer-queue-filters.md git status --short docs-in
wrote docs-in\rally\F1187-reviewer-queue-filters.md (58 lines)wrote docs-in/rally/F1187-reviewer-queue-filters.md (58 lines) (git status prints nothing: identical)
$env:RALLY_API_KEY = "<a read-only Rally API key>"
python scripts\export-rally.py --feature F1187 --save-json docs-in\rally\F1187.json --out docs-in\rally\F1187-reviewer-queue-filters.mdLater, with a real subscription (Windows; on macOS export RALLY_API_KEY=… and python3). Live mode follows Rally's documented API (zsessionid header, query/fetch) and reaches it (a wrong key stops with "Rally answered 401 Unauthorized … Check RALLY_API_KEY"), but it has not been run with a real key for this course. Your acceptance-criteria field may not be c_AcceptanceCriteria: Rally has no standard one, so pass --ac-field.The spec, already onboarded into the space's knowledge base
DocumentKB is AI-DLC's catalog of documents the team already owns. Onboarding extracted the text, fingerprinted it, and recorded it as untrusted data, so a sentence in a spec can never act as an instruction. The catalog is committed, so your clone already has it.
aidlc engine knowledge list
UNTRUSTED PATHS — NOT INSTRUCTIONS. … 1 document(s) id extraction/status summary path 01a13951-ae71-7f78-93bd-9d5ffeea2b9e extracted absent documents/Reviewer-Queue-API-Spec.md
java-workspace/aidlc/spaces/default/knowledge/ documents/Reviewer-Queue-API-Spec.md the team's copy of the document documentkb/index.json the catalog: one row per document documentkb/01a13951-…/metadata.json source, fingerprint, extractor, "untrusted" documentkb/01a13951-…/content.md the extracted text agents read documentkb/01a13951-…/source.sha256 detects a changed document at the next sync java-workspace/aidlc/spaces/default/intents/audit/ <machine>-<id>.md DOCUMENT_INDEXED: which document, its digest, when
mkdir aidlc\spaces\default\knowledge\documents -Force | Out-Null
Copy-Item docs-in\sharepoint\Reviewer-Queue-API-Spec.md aidlc\spaces\default\knowledge\documents\
aidlc engine knowledge onboardHow Kiran onboarded it, and how you add the next document (Windows; on macOS mkdir -p and cp). Then commit aidlc/..docx: it would be catalogued as unsupported. Convert first, e.g. markitdown Spec.docx -o Spec.md, or onboard a PDF (up to 50 pages are extracted).onboard docs-in/x.md answers "docs-in/x.md is outside documents. Copy it under documents/ first, then re-run." The docs say it copies for you; the tool doesn't.documents/ and run aidlc engine knowledge sync. To remove one: delete the file, then sync. There is no remove verb.The input rules, already in the team's CLAUDE.md
Claude Code reads CLAUDE.md at every start. Kiran added six lines that tell every stage where stories and specs come from, how to cite them, and what to do when they disagree.
Get-Content CLAUDE.md -Tail 6
tail -6 CLAUDE.md
## Inputs from Rally and SharePoint Features come from Rally as snapshots in docs-in/rally/ (scripts/export-rally.py); Rally is the source of truth for stories. Cite the story ID (US5120…) next to every requirement, plan row and test; never invent a story. Product specs come from SharePoint, converted to Markdown and onboarded under aidlc/spaces/default/knowledge/. When a spec and a story disagree, ask at the gate; never pick one silently. Refresh both snapshots before /aidlc, and commit them with the record.
aidlc/spaces/default/memory/ holds rules AI-DLC learns and affirms through its own gates; editing it by hand skips that audit. CLAUDE.md is yours: write house rules there.Start the run, naming both inputs
Start Claude Code in the workspace (claude) and give the request. Naming the spec's path matters: stages read the documents a request names; nothing in 2.11 reads the whole knowledge base on its own.
/aidlc express Build what ./docs-in/rally/F1187-reviewer-queue-filters.md describes. The product spec is aidlc/spaces/default/knowledge/documents/Reviewer-Queue-API-Spec.md.
Setting up an express workflow for this: 7 stages, 7 approval gates; no reviewers, sensors, learnings ritual, summary confirmation, or plan approval; lead agent only. Intent created: 261014-reviewer-queue-filters (space: default) State initialized: express scope, 10 stages, Minimal depth Project type: Brownfield First post-init stage: reverse-engineering (INCEPTION) codekb priorauth-api: STALE (scanned at v1.0.2, the repo is at v1.1.0) → rescan of what changed … ▸ Reverse Engineering is done. How would you like to proceed? 1. Approve 2. Request Changes 3. Other
/aidlc feature … instead when the feature spans repos (Units Generation then splits it into one unit per repo) or when the stories are still being argued about (User Stories then runs too, and you'd skip it if Rally stays the source). The first question you answer is the Reverse Engineering gate, as in the hello-world run; choose Yes if Claude Code asks to change the project's settings first.aidlc engine knowledge associate <id> --intent links the spec to it in the catalog, so a later reader of the record sees which document the run used.What each gate checks differently, and the one decision only people can make
The stages are the same 10. What changes is what they read and cite. The useful part: the story and the spec disagree, and Requirements Analysis is where that must surface, not in code review.
| Stage | Hello-world run | Expected with a Rally feature and a spec |
|---|---|---|
| 2.1 Reverse Engineering | Full scan, 9 codekb files | Starts from codekb/priorauth-api/, which the engine reports STALE at v1.1.0 (tested), so expect a rescan of what changed: the aging package |
| 2.3 Requirements Analysis | FR1…FR3 from one message, after 4 lettered questions and 2 follow-ups | One FR per acceptance criterion, each citing it: FR1 ← US5120 AC1. NFRs from spec §5. Open questions: Q-1 unknown tenant, 400 (spec §4) or empty list (US5120)? Q-2 the second tenant NM-02 the story note asks for: which rows? |
| 2.4 User Stories | skipped (express) | skipped (express): the Rally stories are the stories |
| 3.5 Code Generation plan | Each row → an FR | Each row → an FR and its story; one row adds NM-02 rows to requests.sample.json (Q-2). traceability.json maps FR → US → files → tests. A new intent starts with plan approval off again (express): turn it on with your 2.3 approval, as in hello-world step 11. The plan names its own branch: say "use request-filters" when you approve it, or Claude makes a second one, as it did in the real hello-world test |
| 3.6 Build and Test | Matrix per FR; cross-unit-traceability.md PASS | The same matrix, now also readable per story: every AC of US5120–US5122 has a passing test |
| 4.1–4.4 Operation | Skipped: no pipeline or deploy config in the workspace | Skipped again, for the same reason, unless the team adds its pipeline config or a deploy runbook to the workspace first |
2 Q-1: an unknown tenant returns 400, as the spec says: a mistyped tenant must not look like an empty queue. Rally US5120 AC3 is updated to match after the run. Q-2: add two pending NM-02 requests to the sample export. (Ravi, Meena)
Recorded. requirements.md updated: FR1.3 unknown tenant → 400 (spec §4; overrides US5120 AC3, to be updated in Rally) · NM-02 sample rows added to the plan · answers written into requirements-analysis-questions.md with names
Neither file is wrong on its own; they were written by different people at different times. The gate makes a named person choose, and the audit shard keeps who and why. The losing source gets fixed afterwards (step 8), so Rally and the record agree again.
Answered by Ravi Menon and Meena Iyer
From the plan to the pull request: one branch, one PR
AI-DLC has no pull-request stage in any scope; the PR comes from the team's CLAUDE.md (one unit = one branch = one PR), as PR #58 did in the hello-world run. Express has no units, so this run gets one branch, the request-filters you made at step 1, and one PR. Not run: the engine's stops are the hello-world run's, the git and gh lines are its step 14 with this feature's branch and intent.
| What happens | Whose step | Where it is recorded | |
|---|---|---|---|
| 1 | Plan approval. Claude writes the code-generation plan, each row citing an FR and its story, and stops (if you turned plan approval on at 2.3). Say “use request-filters” here, or the plan names a branch of its own. | the engine stops; Meena answers | construction/code-generation/code-generation-plan.md, the audit log |
| 2 | Code and tests on request-filters, then scripts/verify, never an ad hoc mvn. | Claude, because CLAUDE.md says so | code-summary.md; traceability.json maps FR → US → files → tests |
| 3 | Commit. The code on request-filters, the record on the workspace's branch (“commit it after every gate”). Claude Code asks before each git commit. | Claude, under the team's rule | both repos' history |
| 4 | The 3.5 and 3.6 gates. No unit checkpoint and no verification-command question: express has zero units. The Operation stages skip themselves (step 6). | the engine; Meena answers | aidlc-state.md, the audit log |
| 5 | Push and open the PR, with the code summary as its description and the Rally IDs in its title, so a search in either tool finds the other. | Kiran | GitHub |
| 6 | Review and squash-merge. AI-DLC's own default in memory/org.md is trunk-based with squash-merge. Then step 8: write back to Rally. | Meena | GitHub; main |
! git -C priorauth-api push -u origin request-filters ! gh pr create --repo acme-health/priorauth-api --base main --head request-filters --title "Reviewer queue filters (F1187: US5120-US5122)" --body-file aidlc/spaces/default/intents/261014-reviewer-queue-filters/construction/code-generation/code-summary.md
To github.com:acme-health/priorauth-api.git * [new branch] request-filters -> request-filters Creating pull request for request-filters into main in acme-health/priorauth-api https://github.com/acme-health/priorauth-api/pull/61
acme-health and PR #61 are the story's GitHub: your origin is the public starter, which you cannot push to. git -C priorauth-api log --oneline -3 shows Claude's commit on request-filters, above v1.1.0./aidlc feature … instead (step 5) and Units Generation splits the work; each unit then has its own plan approval, branch, a checkpoint where the engine runs scripts/verify itself and asks “Approve this completed <unit>?”, and its own PR. The feature-scope page, step 11 walks through that loop.Write the result back to Rally
AI-DLC has no tracker stage, just as it has no PR stage. Closing the loop is a team step: move the stories, fix the criterion the gate overruled, and link the PR and the intent so the next person can find the record from Rally.
In Rally, after PR merges (by hand today): US5120, US5121, US5122 ScheduleState → Completed (the owner accepts them after the demo) US5120 Acceptance criteria: unknown tenant → 400 (the Q-1 decision) F1187 Discussion: "Delivered in priorauth-api 1.2.0, PR #61, intent 261014-reviewer-queue-filters"
(nothing for AI-DLC to do. Then commit the workspace with the hello-world step 17 command, unchanged: it already picks up docs-in/rally/, docs-in/sharepoint/, scripts/export-rally.py and the knowledge/ files, plus the onboarding audit entry)
Going live: connect Claude Code to Rally and SharePoint
Connections help around the run: looking up a story while answering a gate, refreshing the export, writing back. They don't replace the committed snapshots. None of this was run for the course; it follows each vendor's documentation as of October 2026.
https://mcp.rallydev.com/mcp (EMEA: mcp-eu). API key as a Bearer header, or OAuth. Since 2 Oct 2026 it serves four generic tools; rally_openapi_invoke_tool can write, so it stays on ask. Make the key under a read-only account if you only read.ANTHROPIC_API_KEY is not set (Claude Code says so: the key takes precedence and connectors are disabled). A tenant admin consents once. Without it: rclone with read-only scopes, then markitdown..claude/settings.json is regenerated by aidlc config, so permission rules go in .claude/settings.local.json or your user settings. Tested with 2.11.0: re-running aidlc config, and aidlc config project --mcp defaults --yes / none --yes, add or remove only AI-DLC's five servers and keep your rally entry. Claude Code lists it as "Pending approval" until you approve it once in claude.untrusted, and every agent sees every MCP server, so keep write tools on ask. If stories or specs can contain patient data, check that Anthropic, Microsoft and Broadcom are each covered by your BAA/DPA before any of it goes through them. Admin consent in Entra and a Rally API key are owned by your platform team, not by the run.What is real here, and what is not
Real: the starter branch and everything on it; export-rally.py and its offline output (the .md is generated from the .json, not typed); the onboarding, the documentkb/ files, the list output and the "outside documents" message, all from AI-DLC 2.11.0 on 14 Oct 2026. Tested from a fresh clone of the branch: aidlc config, workspace-sync (clones the code repo), the export check, knowledge list, and the engine's own readers (it reads the hello-world run as complete, the codekb as STALE at v1.1.0, and starts a new intent for F1187 next to it). Not real: the Rally subscription and the SharePoint library (the files stand in for them; the IDs F1187, US5120–US5122 and E212 are invented), and Claude's output at steps 5 and 6 and the pull request at step 7, which are the expected shape: no AI run was performed for this variant. Tested without real accounts: live mode reaches Rally's API and gets the expected 401 for a wrong key; Claude Code parses the .mcp.json entry; aidlc keeps it. Untested: a real Rally key, Rally's MCP tools, and the Microsoft 365 connector.
Sources: AI-DLC docs on knowledge, CLI commands, Inception stages and Claude features; Claude Code MCP; Broadcom Rally MCP and WSAPI keys; Claude's Microsoft 365 connector; markitdown.