Skip to content

Commit 079affc

Browse files
Merge main and fix intro review findings
Preserve SDK 101 alongside the completed deeper tracks, and replace unsafe RSS transformations with parser-based text extraction and regression coverage. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2 parents 2a4fe1b + 6af47ec commit 079affc

28 files changed

Lines changed: 949 additions & 149 deletions

‎README.md‎

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@ Start with SDK 101 if you are new to the SDK. Across the introductory and deeper
2222
4. Enforce capability, input, timeout, validation, and lifecycle boundaries in application code.
2323
5. Explain what the model can infer and what the application must prove.
2424

25-
SDK 101 has exactly 30 minutes of guided lessons. Plan on about 90 minutes for Accessibility
26-
Reviewer or 75 minutes for Museum Exhibit Studio. Machine setup, authentication, and dependency
25+
SDK 101 has exactly 30 minutes of guided lessons.
26+
Plan on about 115 minutes for Accessibility Reviewer or 90 minutes for Museum Exhibit Studio.
27+
Machine setup, authentication, and dependency
2728
downloads happen separately in an untimed preflight for each workshop.
29+
The two deeper workshops include their interactive HTML lessons and end with a celebration and resources.
2830

2931
## Start the workshop
3032

@@ -67,7 +69,7 @@ output, and troubleshooting.
6769
```text
6870
copilot-sdk-workshop/
6971
|-- docs/ GitHub Pages site and controlled target page
70-
|-- workshop/ SDK 101 and two deeper tracks with optional extensions
72+
|-- workshop/ SDK 101, two deeper tracks, and completion resources
7173
|-- start-intro/ SDK 101 starters and podcast helpers in all six languages
7274
|-- start-accessibility/ Accessibility Reviewer starters in all six languages
7375
|-- start-museum/ Museum Exhibit Studio starters in all six languages
@@ -93,7 +95,7 @@ bash scripts/validate-workshop.sh
9395

9496
The command checks lesson structure, internal links, site behavior hooks, project coverage,
9597
and the introductory track's exact 30-minute lesson budget.
96-
It then runs browser-independent language-selection tests and restores, builds, or syntax-checks every
98+
It then runs browser-independent language-selection, site-flow, and completion tests and restores, builds, or syntax-checks every
9799
intro, accessibility, and museum starter, every finished project, and the Blazor target without authenticating
98100
Copilot, launching a browser, or sending a prompt. The museum projects ship no tests, mocks, or
99101
fixtures, so their targets only restore and build.
@@ -145,9 +147,10 @@ system messages, the prompt builders, one session runner that owns the lifecycle
145147
`main`. The finished sample is what a learner ends up with, not a separate reference architecture.
146148

147149
The learner-facing track begins at
148-
[`workshop/museum-00-preflight.md`](workshop/museum-00-preflight.md), then runs through six core
150+
[`workshop/museum-00-preflight.md`](workshop/museum-00-preflight.md), then runs through seven
149151
steps — first session, streaming, curator voice, approved facts, structural checks, and
150-
Wikipedia MCP research — plus an optional interactive `exhibit.html` capstone.
152+
Wikipedia MCP research, followed by an interactive `exhibit.html` capstone — and finishes with
153+
[celebration and resources](workshop/museum-09-complete.md).
151154

152155
When usable cited research exists, the curator calls `approved_fact_lookup` and the read-only
153156
`approved_wikipedia_fact_lookup` before writing the narrative and visitor questions. The second

‎docs/homepage.js‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Complete setup before the session.`,
4343
4444
Finding
4545
The name input has no accessible name.`,
46-
guidance: 'Build an SDLC developer tool in a 90-minute core workshop.'
46+
guidance: 'Build an SDLC developer tool in a 115-minute workshop, then celebrate and keep building.'
4747
},
4848
museum: {
4949
name: 'Museum Exhibit Studio',
@@ -58,7 +58,7 @@ System message: replace
5858
# Journey to the Moon
5959
## Narrative
6060
## Visitor questions`,
61-
guidance: 'Build a non-SDLC curator tool in a 90-minute core workshop.'
61+
guidance: 'Build a non-SDLC curator tool in a 90-minute workshop, then celebrate and keep building.'
6262
}
6363
};
6464

‎docs/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ <h1 id="hero-title">Choose what your agent is here to do.</h1>
5454
<label class="workshop-option" data-workshop="sdlc">
5555
<input type="radio" name="workshop" value="sdlc">
5656
<span class="workshop-option-copy">
57-
<span class="workshop-kicker">Developer tool · 90 minutes</span>
57+
<span class="workshop-kicker">Developer tool · 115 minutes</span>
5858
<strong>Review web accessibility</strong>
5959
<span>Build an SDLC agent that inspects a page, consults WCAG guidance, and produces an evidence-based report.</span>
6060
<span class="workshop-capabilities">Streaming · local tools · Playwright MCP · permissions</span>
@@ -63,7 +63,7 @@ <h1 id="hero-title">Choose what your agent is here to do.</h1>
6363
<label class="workshop-option" data-workshop="museum">
6464
<input type="radio" name="workshop" value="museum">
6565
<span class="workshop-option-copy">
66-
<span class="workshop-kicker">Non-SDLC tool · 75 minutes</span>
66+
<span class="workshop-kicker">Non-SDLC tool · 90 minutes</span>
6767
<strong>Curate a museum exhibit</strong>
6868
<span>Build a grounded interpretive agent that turns approved facts into visitor-ready exhibit copy.</span>
6969
<span class="workshop-capabilities">Custom persona · one application-owned tool · validation · evaluation</span>

‎docs/step.css‎

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,63 @@ button {
788788
}
789789
}
790790

791+
.workshop-complete h1 {
792+
color: var(--accent);
793+
letter-spacing: -0.03em;
794+
text-wrap: balance;
795+
}
796+
797+
.workshop-complete > p:first-of-type {
798+
max-width: 65ch;
799+
font-size: clamp(1.1rem, 2vw, 1.3rem);
800+
}
801+
802+
.completion-confetti {
803+
position: fixed;
804+
z-index: 110;
805+
inset: 0;
806+
overflow: hidden;
807+
pointer-events: none;
808+
}
809+
810+
.completion-confetti span {
811+
position: absolute;
812+
top: -1rem;
813+
width: 0.45rem;
814+
height: 0.8rem;
815+
background: var(--accent);
816+
animation: completion-confetti-fall 2800ms cubic-bezier(0.16, 1, 0.3, 1) var(--delay) both;
817+
}
818+
819+
.completion-confetti span:nth-child(3n) {
820+
background: var(--violet);
821+
}
822+
823+
.completion-confetti span:nth-child(3n + 1) {
824+
background: var(--success-green);
825+
}
826+
827+
@keyframes completion-confetti-fall {
828+
from {
829+
transform: translate3d(0, 0, 0) rotate(0);
830+
opacity: 1;
831+
}
832+
to {
833+
transform: translate3d(var(--drift), calc(100vh + 2rem), 0) rotate(var(--turn));
834+
opacity: 0;
835+
}
836+
}
837+
838+
@media (prefers-reduced-motion: reduce) {
839+
.completion-confetti {
840+
display: none;
841+
}
842+
843+
.completion-confetti span {
844+
animation: none;
845+
}
846+
}
847+
791848
/* Upstream workshop shell with the rebuilt curriculum behavior. */
792849
.header {
793850
position: sticky;

0 commit comments

Comments
 (0)