You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+25-28Lines changed: 25 additions & 28 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,45 +15,42 @@ or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any addi
15
15
16
16
## Content architecture contract
17
17
18
-
Challenge content lives under `modules/<moduleId>/challenges/<slug>/`. The build reads
18
+
Activity content lives under `modules/<moduleId>/challenges/<slug>/`. The build reads
19
19
`meta.yml` as the single source of truth and copies `README.md` and `COACH.md` into the
20
20
generated Pages data. Do not hand-edit generated files under `docs/assets/data/`; run
21
21
`npm run build` instead.
22
22
23
23
Outcome journeys live in [`outcomes.json`](outcomes.json). Use that file to curate existing
24
-
challenges into adoption, migration, security, agentic workflow, and cloud DevOps paths
25
-
without duplicating challenge content.
24
+
activities into adoption, migration, security, agentic workflow, and cloud DevOps paths
25
+
without duplicating activity content.
26
26
27
-
Every challenge directory must contain:
27
+
Every activity directory must contain:
28
28
29
29
```text
30
30
meta.yml # catalog metadata and dependency contract
31
-
README.md # student guide
31
+
README.md # customer delivery team guide
32
32
COACH.md # facilitator guide, hints, expected outputs, common failures
33
33
```
34
34
35
35
### `meta.yml` required fields
36
36
37
37
| Field | Contract |
38
38
|---|---|
39
-
|`id`| Globally unique challenge id. Use `<module>-<local-id>` (`ghec-ch01`, `ghas-02`, `ghaw-15`, `sre-agent-04`). Ids are stable and may have intentional gaps. |
39
+
|`id`| Globally unique activity ID. Use `<module>-<local-id>` (`ghec-ch01`, `ghas-02`, `ghaw-15`, `sre-agent-04`). IDs are stable and may have intentional gaps. |
40
40
|`title`| Short catalog title. |
41
41
|`module`| One of `ghec`, `ghas`, `ghaw`, `sre-agent`. |
42
42
|`track`| Track slug for the module; must match `docs/build.js` module config. |
43
43
|`difficulty`|`beginner`, `intermediate`, or `advanced`. |
44
-
|`duration_minutes`| Estimated student time in minutes. |
45
-
|`prerequisites`|Challenge ids that must be completed first. Empty means independent except for stated environment setup. |
46
-
|`prerequisite_capabilities`| Skills or access needed before starting; do not use this for challenge ids. |
44
+
|`duration_minutes`| Estimated time for a delivery team member in minutes. |
45
+
|`prerequisites`|Activity ids that must be completed first. Empty means independent except for stated environment setup. |
46
+
|`prerequisite_capabilities`| Skills or access needed before starting; do not use this for activity ids. |
47
47
|`description`| One-sentence catalog summary. |
48
-
|`success_criteria`| Observable outcomes that prove the challenge is complete. |
49
-
|`take_home_action`| Imperative production-adoption step the reader repeats in **their own org/tenant** (e.g. "In your own org, enforce push protection org-wide"). Plain scalar; drives real GitHub usage, not a coaching chat. |
50
-
|`take_home_owner`| Who owns the rollout: `developer`, `platform-governance`, or `solution-architect`. |
51
-
|`take_home_signal`| Observable production signal proving it landed (e.g. "Secret push protection blocks a real push in your org"). |
48
+
|`success_criteria`| Observable outcomes that prove the activity is complete. |
52
49
|`tags`| Search/filter terms. Use lowercase kebab-case where possible. |
| Independence and setup | 20 |Challenge can be started from a clean environment with only listed prerequisites/capabilities; no hidden state from previous challenges; app dependency acquisition is documented. |
99
-
|Student guide quality | 20 | README has clear goal, steps, validation commands/screens, expected outputs, cleanup notes where needed, and no dead/internal-only links. |
95
+
| Independence and setup | 20 |Activity can be started from a clean environment with only listed prerequisites/capabilities; no hidden state from previous activities; app dependency acquisition is documented. |
96
+
|Customer delivery team guide quality | 20 | README has clear goal, steps, validation commands/screens, expected outputs, cleanup notes where needed, and no dead/internal-only links. |
100
97
| Coach guide quality | 15 | COACH covers facilitator intent, hints, expected solution/evidence, timing, and common failure modes without leaking secrets. |
101
98
| Validation evidence | 15 | Build/audit pass; success criteria are objectively checkable; commands are current; external dependency versions or availability claims are source-backed. |
102
99
| Accessibility and operational safety | 10 | Works in intended org/account type; calls out Azure/billing/permissions risk; avoids destructive defaults and committed secrets. |
103
-
| Catalog fit and coverage | 5 |Challenge fills a real module/track need, avoids unnecessary duplication, and has useful tags for discovery. |
100
+
| Catalog fit and coverage | 5 |Activity fills a real module/track need, avoids unnecessary duplication, and has useful tags for discovery. |
| P1 | Core learning path fails, hidden dependency, stale product instruction, dead required link, or misleading success criteria. | Blocks merge unless owner accepts documented risk. |
120
-
| P2 | Coach/student quality gap, weak evidence, missing optional metadata, incomplete cleanup, or confusing catalog fit. | May merge with assigned follow-up. |
117
+
| P2 | Coach/delivery team member quality gap, weak evidence, missing optional metadata, incomplete cleanup, or confusing catalog fit. | May merge with assigned follow-up. |
121
118
| P3 | Editorial polish, tag improvement, minor timing mismatch, or optional reference update. | Non-blocking. |
122
119
123
120
### QA inventory format
124
121
125
-
For audit-friendly reviews, use one inventory object per challenge. JSON Lines works well
122
+
For audit-friendly reviews, use one inventory object per activity. JSON Lines works well
126
123
in PR comments, issue bodies, or generated local reports because it is machine-diffable
127
124
and does not require a repo planning markdown file.
@@ -87,7 +87,7 @@ To prefetch everything during clone, use `git clone --recurse-submodules <repo>`
87
87
## Validation
88
88
89
89
The build validates:
90
-
- Every `prerequisites` entry references a real challenge`id` in the catalog.
90
+
- Every `prerequisites` entry references a real activity`id` in the catalog.
91
91
- No circular dependencies.
92
92
- Warns on missing optional fields.
93
93
@@ -107,7 +107,7 @@ CI runs the same build on every PR and fails the check if validation errors are
107
107
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the `meta.yml` field contract and authoring guide.
108
108
See [`modules/README.md`](modules/README.md) for the module and directory layout.
109
109
See [`docs/EXTERNAL-REPOS.md`](docs/EXTERNAL-REPOS.md) for how external dependencies (Juice Shop, sample apps, third-party delivery sessions) are managed and pinned.
110
-
Use `modules/_TEMPLATE/challenge/` as your starting point for new challenges.
110
+
Use `modules/_TEMPLATE/challenge/` as your starting point for new activities.
0 commit comments