Facilitate and recover
Prepare the workshop, check key handoffs and help participants recover without losing work.
Copilot App is the subject; the shop is the example. Follow the workshop flow, with a break before parallel work and no chapter deadlines.
Before participants arrive
Rehearse with the App build and accounts you will use.
| Check | Ready when |
|---|---|
| Environment | The participant’s own repository opens in a worktree; the 4 baseline tests pass; one owned shop runs on port 18765 |
| App controls | Plan, Interactive, effort and permissions are understood; Fusion Standard or the setup alternative is available |
| Skills and tools | Bundled Java skills load; Browser canvas, Pick & polish, impeccable and the two MCP tools have been tried |
| GitHub delivery | Actions is enabled; Shopping-cart checks / tests runs; PR delivery works from the quantity fix onward; Agent Merge is allowed for the two worker PRs and the integrated checkout PR |
| History privacy | Participants decide before running Chronicle whether its history access is acceptable; transcript review is an equal alternative |
App rehearsal checklist
Skills and Canvas
- The three Java skills are repository-bundled; impeccable is App-bundled. Invoke it with
/impeccable. Demonstrate loading guidance, not reinstalling the workshop’s pinned copies. - Follow the Canvas chapter: open the running shop and focus on one observed UI issue with Pick & polish. No instruction-file editing exercise is needed.
- Use three named task sessions: Cart: quantity bug, Cart: item removal (including Canvas) and Cart: query optimization. Merge and verify each task’s PR before starting the next from updated
main; name sessions only after their first prompt. Participants create sessions in the App UI, without changing agent instructions. - Confirm this worktree owns the running shop before refreshing UI edits; a matching URL is not enough. If ownership is unknown or different, use the human-run server handoff rather than touching another checkout’s app.
- Keep the shop running during same-worktree edits. DevTools reloads compiled backend changes; Maven tests compile Java and copy resources. After approved UI edits, Copilot runs
./mvnw compile, reloads the existing Browser canvas and verifies the visible change; no manual refresh is needed. An automatic restart resets cart data; static-resource updates normally do not. Stop/start manually when switching the running app to another worktree or for recovery.
Review and five-subagent checkout
- Approve a read-only independent critic for rubber ducking without editing the verification checkout’s
AGENTS.md. Use an actual critic, not a main-agent reread. On the normal path, merge and verify accepted corrections through a follow-up PR before checkout; local recovery keeps the checked local branch. - Start a fresh Cart: mock checkout session using New worktree from verified
main, including merged critique corrections. The App creates the feature branch. If using local recovery, explicitly select and verify the recorded reviewed local base instead. - Prepare the checkout plan in Plan mode. Approve the contract, plan, file ownership and local handoffs, then return to Interactive without implementing. The
/orchestrateprompt creates exactly five coordinated child sessions, each with its own worktree and branch. No/fleet, nested agents or custom profiles. The starter instructions already provide this scoped allowance; noAGENTS.mdedit is needed. - Approve five-way concurrency after a machine-load check. Start backend, UI, HTTP tests, resilience tests and a read-only reviewer together from the same reviewed commit. Agree on HTTP behavior, test setup/probes and exclusive fixture ownership first. Do not wait for backend implementation before starting the others; record actual overlap or the concurrency limitation.
- Four writers provide local commits; the reviewer provides findings tied to commits, including the final integrated head. The orchestrator owns integration, Maven and preview. Preserve all worktrees; no child publishing, merging, shops, Maven runs or nested agents.
- Check all earlier reviewed tests, boundary cases and new checkout tests, including
CheckoutContractTestandCheckoutResilienceTest. Verify rollback, immutable receipts, concurrent duplicate requests and replay after new cart items. Wait for DevTools to load compiled changes, then place an order in the Browser canvas. - After final review, use Create PR in Cart: mock checkout, then reuse Agent Merge. Keep Merge pull request off while reviewing repairs; authorize this checkout PR’s merge separately once checks and approvals pass. Have the same reviewer recheck repairs before merge approval; record later repair/review limitations. Workers never publish or merge. Verify exact merged main and that the shop serves its compiled code from the verified directory; change the running server’s worktree only if needed.
Evidence and privacy
Confirm /chronicle tips is available in your build. Focus on token efficiency,
agent turnaround and output quality; cost-tips is an optional drill-down.
History may span repositories or still be indexing. Never project unrelated
private work, invent missing usage figures or treat a later filter as undoing
earlier access.
For the final review, compare the recorded starter and verified result commits, keeping unfinished edits separate. Corrections need a new approved feature branch and reviewed PR; leave the verification checkout unchanged. Keep private Chronicle output out of the handoff.
Record App actions only when their actual responses are available. Shop screenshots and saved HTTP captures do not prove an App interaction. Run newcomer and experienced pilots, including navigation and recovery.
Interrupted sessions
Read the actual partial handoff first: source directory/revision, unfinished files, executed outcomes and owned helpers. Confirm cleanup before starting another preview. A query error with no detailed cause is not proof of an authentication failure. After a bounded retry following recovery, stop if the same failure repeats; do not create a retry or replacement-agent loop.
If the participant approves a facilitator or single-agent takeover, record the execution-method change. Preserve earlier failures and coverage gaps; delivered code is not proof that the original independent or native App exercise completed.
Check the delivery handoffs
The three task PRs precede two worker PRs targeting main:
| Order | Required handoff |
|---|---|
| Quantity-fix PR | Merge and verify at the end of Skills before creating Cart: item removal from updated main |
| Removal-and-Canvas PR | Keep both chapters in Cart: item removal; merge and verify after Canvas before creating the query session |
| MCP handoff PR | Merge and verify the query fix before creating both parallel sessions from updated main |
| UI worker PR | Use Create PR in Cart: empty-state UX. Review Agent Merge repairs with Merge pull request off; authorize this PR only, then confirm Merged and passing checks on main |
| Boundary-test PR | Use Create PR in Cart: boundary tests. Reconcile updated main with merging off; review resolutions and fresh CI, then separately authorize its merge |
Verify merged origin/main in the clean Cart: boundary tests worktree.
Preserve worker branches and other checkouts; account for squash merges.
No extra integration session is needed.
After rubber duck, start Cart: mock checkout:
build and review checkout → Create PR → Agent Merge →
checkout PR merged into main → verify merged app → Chronicle → handoff.
If participants opt in, run Chronicle in a fresh Cart: Chronicle session; scope its report to this
repository over the past seven days, excluding the analysis session itself.
Keep the checkout PR in the orchestrator’s session, not the earlier boundary-test PR.
Authorize its merge separately and record actual PR links.
The template’s main remains the unsolved starter, not a completed demo.
After Chronicle or transcript review, return to Cart: mock checkout for the read-only final handoff.
Recovery
Preserve the participant’s work first. Record what they actually completed; a fallback or reference demonstration is not a successful native App exercise.
| Blocker | What to do |
|---|---|
| Setup or skill loading | Help or pair with a working participant. Compilation errors are not the expected regression failures |
| Quantity, removal or query fix | Use a separate pinned copy; see reference recovery below |
| Browser, Pick & polish or impeccable | Use the Canvas fallback; record which interaction was unavailable |
| MCP connection or baseline | Use matched reference evidence, clearly labelled as reference, not the participant’s App tool calls |
| MCP handoff cannot be published | Follow MCP handoff recovery only from an accepted local copy with all earlier reviewed tests passing; record main as not updated |
| Worker, CI or Agent Merge blocked | Preserve both branches, disable Agent Merge on open PRs and follow integration recovery in Cart: boundary tests |
| Boundary test reveals a production bug | Keep the regression, approve the smallest correction in that session, and rerun the full suite before integration |
| Independent critic or five child sessions unavailable | Use the relevant chapter’s demonstration/review fallback; explicitly record the missing independent critique or five-agent run |
| Checkout coding or tests fail | Keep the integration branch, child worktrees and local handoff commits; mark checkout unfinished and retain the earlier reviewed result. No checkout reference solution is supplied |
| Checkout publishing or merge blocked | Preserve branch/open PR; mark verified locally; delivery blocked. No direct push or substitute local merge into main |
| Checkout merged but checks or preview fail | Record merged; post-merge verification blocked. Repairs need a new approved feature branch and PR |
| Session query error or interruption | Preserve source, branches and partial evidence; an idle session is not completion. Resume only missing work, not the entire rehearsal |
| Chronicle unavailable or privacy opt-out | Use the workshop transcript; record Chronicle not available or Chronicle not run: privacy choice. Missing usage is unknown |
CI: queued/running means wait; absent, skipped or failed is not a pass. Check Actions and the current PR revision. Keep the second PR’s Agent Merge off until the UI merge is verified. Never bypass policies, required approvals or failing checks.
Local recovery: remote status may be unknown. Keep the checked recovered
result for preview and handoff; do not switch back to incomplete remote main
or report local integration as Agent Merge completion.
Generated Impeccable state: for an untracked .impeccable/hook.cache.json,
request a narrowly scoped local Git exclude and review it before approval.
Do not commit the cache, delete the whole directory or ignore all .impeccable/
files. Keep intentional design records; review source changes separately.
Reference checkpoints and safe Git recovery
Expected reference results
The pinned revisions and
recorded checks
cover the three earlier tickets, not checkout.
These historical pins also predate current-starter input and keyboard hardening;
their counts and captures describe those exact revisions, not today’s main.
The table uses historical reference tests. In the normal workshop, participants
generate CartContractTest, RemoveContractTest and QueryContractTest;
their counts and failures vary. The current learner starter contains no
ready-made exercise tests.
| Check | Tests | Expected result |
|---|---|---|
Start, BaselineTest |
4 | Pass; repeated addition is not covered |
Start, activate CartContractTest |
3 | Two failures: quantity 2 vs 1, total €50 vs €20 |
| After bug fix, baseline + cart | 7 | Pass |
After bug fix, activate RemoveContractTest |
3 | Two failures: expected 200, actual 404 |
| After feature, baseline + cart + removal | 10 | Pass |
After feature, activate QueryContractTest |
2 | Two failures: 9/17 SELECTs, expected 1 |
| After performance, all four classes | 12 | Pass |
Maintainer test snapshots live at
workshop/tools/copilot-workshop/reference-tests/ in this repository,
excluded from the published site.
The pinned historical checkpoints below retain their own teaching/ classes
for reproducing these recorded counts. Use those files only in a separate
reference checkout; never replace reviewed learner tests. Boundary and
checkout tests add cases beyond the historical 12.
Recover without losing work
Use a new directory, never the participant’s project. This quantity-fix example checks out the full pinned commit, not a movable tag:
git clone --no-checkout https://github.com/jdubois/github-copilot-app-java-workshop.git cart-reference-bugfix
cd cart-reference-bugfix
git switch -c reference-work 8291261524b5e20ce86c111abe909877d8510776
git rev-parse HEAD
Confirm the printed SHA matches. For another checkpoint, use its full SHA below and a fresh directory name. If the commit is unavailable, stop.
- Connect a new App session to the reference copy. Check its directory and starting commit; activate any required teaching tests there and run the matching checks.
- Use that reference session only for the blocked task, committing reviewed results. For removal recovery, complete Canvas there too. Do not use the reference clone as the next task’s base.
- For performance recovery, restore any accepted Canvas UI changes, check startup paths for this copy, and activate all three teaching classes unchanged. Confirm all 12 supplied tests pass before parallel work.
- To resume GitHub delivery, apply the reviewed reference changes and any accepted Canvas work in a new worktree based on the participant’s own
main. Review the complete diff and rerun tests, then deliver those recovery changes through a reviewed PR. If GitHub is blocked, use the linked local recovery instead.
Do not push this clone: its origin is the template, not the personal
repository. Template-created repositories have independent history; changing
the remote alone does not make reference commits mergeable. Never merge
unrelated histories, overwrite personal main or replace an existing handoff
branch.
Stop the old shop in its owning terminal before starting the reference copy. Record that a reference solution was used. Reference copies do not include the participant’s Canvas changes, new boundary tests or checkout.
| Git checkpoint | Reference | Pinned commit |
|---|---|---|
v2-start |
Starter | 326f95840e3d42dcbb83d1bb182091cdda38382e |
v2-bugfix |
Quantity fix | 8291261524b5e20ce86c111abe909877d8510776 |
v2-feature |
Removal feature | f1b8d4104a3415c5568ea4f7fb15e1294aa3ad3f |
v2-performance |
Query fix | 0a7d9dd3962929c7909ecfee64f72b2f03f43970 |
These are one reference history in the template repository, not separate repositories or archives. Earlier v1 checkpoints remain unchanged.
Evidence and maintenance
Use participants’ actual test reports, previews and App responses. The published reference checks do not prove their generated checkout works.
Capture provenance and maintainer commands
The capture manifest pins source revisions, image/response hashes, runtime identities and the capture JVM version, which differs from the Java 21 compilation target. Saved MCP responses were captured using HTTP JSON-RPC, not through the App.
Code, skills, test CI and this handbook live in
this repository.
Run its maintainer gate, python3 tools/verify-checkpoints.py, from the repository root.
For handbook builds and reference captures, change into workshop/ first:
cd workshop
CAPTURE_CHANNEL=chrome python3 tools/copilot-workshop/capture-all.py --port 18767
bundle exec jekyll build --destination tools/copilot-workshop/.build/site
python3 -m unittest discover -s tools/copilot-workshop -p 'test_*.py'
python3 tools/copilot-workshop/check-site.py --remote
The local gate checks matched request IDs/runtime identities, eight distinct
products, €115 totals and the 9-to-1 SELECT change. --remote also checks live
annotated tags against the pins; local success does not establish remote state
or a successful website workflow. Checkpoint tags are protected against updates
and deletion.