baldart 3.16.0 → 3.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,27 @@ All notable changes to BALDART will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.17.0] - 2026-05-23
|
|
9
|
+
|
|
10
|
+
The `/prd` skill gains a third option in the design phase. Until v3.16.0, when a user reached Step 3 without having provided mockups (`mockups.status: none`), the only path forward was internal generation via the `ui-design` skill (3 HTML options → iteration → save). With Claude Design now offering a design-system-sync'd visual generator, users who prefer iterating in that surface had to abandon the PRD flow halfway, work externally, and then re-enter as if they'd had mockups from the start. This release adds **Step 3.0 — Mockup Source Decision**: when `mockups.status: none` AND UI impact ≠ N/A, the skill explicitly asks "internal generation or handoff to Claude Design?". The handoff branch generates a context-rich prompt (discovery + brand voice + design-system tokens + screens in scope + stack target) ready to paste, then STOPs. On user re-entry with local paths, it re-uses the existing Step 1.6 Mockup Intake verbatim — copy → analyze → populate state — and Step 3 falls naturally into Hybrid mode. Zero code paths downstream of the bivio are new; the entire feature is a decision point + a prompt generator on top of pre-existing infrastructure.
|
|
11
|
+
|
|
12
|
+
### Added — PRD Step 3.0 Mockup Source Decision
|
|
13
|
+
|
|
14
|
+
- **§ Step 3.0 in [framework/.claude/skills/prd/references/ui-design-phase.md](framework/.claude/skills/prd/references/ui-design-phase.md)** before the precondition decision tree. Activates only when `mockups.status: none` AND UI impact ≠ N/A. Poses the binary question (Internal `ui-design` vs Handoff Claude Design) with explicit STOP gate — silence or ambiguity re-asks rather than defaulting silently. Branch A sets `mockups.source: internal` and falls through unchanged. Branch B collects context from state file + `baldart.config.yml` + `.baldart/overlays/prd.md` + `${paths.design_system}/INDEX.md` + `tokens-reference.md` (when `features.has_design_system: true`), renders the handoff prompt template, presents it inside a fenced code-block with copy-paste instructions, persists `mockups.status: pending_external` + `mockups.source: claude-design` + `mockups.handoff_prompt_path` in the state file (prompt saved to `${paths.prd_dir}/<slug>/handoff/claude-design-prompt.md` for session-restart survival), and STOPs.
|
|
15
|
+
- **Re-entry handler in same file**. When the user returns with local paths after handoff, the skill invokes the existing Step 1.6 Mockup Intake procedure verbatim (no code duplication) — copy into `mockups/` with collision-safe rename, run Mockup analysis schema, populate `## UI Design`. Then flips `mockups.status` from `pending_external` to `provided` or `partial` based on coverage of `screens_in_scope[]`, keeps `mockups.source: claude-design` as audit trail, and falls through to the precondition decision tree which routes to Hybrid mode unchanged.
|
|
16
|
+
- **Precondition decision tree extended** with two new rows: `mockups.status: pending_external` ⇒ STOP (handoff in flight); `mockups.status: none` AND user picked Branch A ⇒ Full (preserves backwards-compatible default). The existing `provided` / `partial` ⇒ Hybrid and UI = N/A ⇒ Skip rows are unchanged.
|
|
17
|
+
- **New template asset [framework/.claude/skills/prd/assets/claude-design-handoff-prompt.template.md](framework/.claude/skills/prd/assets/claude-design-handoff-prompt.template.md)**. Seven-section structure populated at runtime: (1) feature objective, (2) user flow + personas, (3) screens in scope with required states + primary actions + data shown, (4) brand & voice (conditional on overlay), (5) design system constraints with tokens excerpt + registered primitives + numeric tables from `framework/agents/design-system-protocol.md` (conditional on `features.has_design_system: true`), (6) stack target + output format preference derived from `stack.framework`, (7) deliverable spec (PNG exports per state + code/Figma + inline notes on new components / token deviations / layout decisions). Generic and project-agnostic — all project-specific content is injected as placeholders.
|
|
18
|
+
- **Hard Rule 16 note in [framework/.claude/skills/prd/SKILL.md](framework/.claude/skills/prd/SKILL.md)** added to the existing Mockup Intake rule. Codifies that a NO answer at intake routes through Step 3.0 (not directly to Full mode), with cross-reference to the ui-design-phase section. The rule itself remains unchanged for backwards compatibility — Step 3.0 is purely additive.
|
|
19
|
+
|
|
20
|
+
### Notes
|
|
21
|
+
|
|
22
|
+
- **No new `baldart.config.yml` keys** — the schema-change propagation rule does not apply to this release. The bivio is runtime-only per the user's preference (zero persistent flag); no template/configure/update/doctor updates needed. All context for the handoff prompt is read from existing config keys (`paths.*`, `stack.*`, `features.has_design_system`).
|
|
23
|
+
- **Backwards compatibility.** PRDs in flight on v3.16.x finish on v3.16.x semantics. New PRD sessions started on v3.17.0+ see Step 3.0 only when they actually reach Step 3 with `mockups.status: none` — the default (Branch A) preserves the v3.16.x behavior exactly. Existing PRDs that already provided mockups never enter Step 3.0.
|
|
24
|
+
- **`ui-design` skill is unchanged** — Step 3.0 sits in front of it, doesn't modify it. The Full pipeline (3a → 3d) is reached identically when the user picks Branch A or when no mockup-related state exists at all. The `ui-expert` agent and `huashu-design`/`frontend-design` skills are equally untouched.
|
|
25
|
+
- **`mockup_analysis` schema is unchanged** — the new `pending_external` value of `mockups.status` is purely transitional and is overwritten by `provided` / `partial` on user re-entry, so existing PRD templates and state files keep validating without migration.
|
|
26
|
+
- **Files modified outside the Step 3.0 scope** (`card-template.yml`, `backlog-phase.md`, `validation-phase.md`, `prd-card-writer.md`, `framework/.claude/skills/new/SKILL.md`) are the v3.16.0 in-flight release (agent routing + UI specialist briefing — see entry below) and are NOT part of v3.17.0. v3.16.0 should be tagged and pushed before v3.17.0 in the release sequence.
|
|
27
|
+
- **Verification is manual** (no test suite). Dogfood scenarios: (1) `/prd` with mockups provided at intake → never enters Step 3.0, Hybrid mode as today (regression check); (2) `/prd` without mockups, answer "A" at Step 3.0 → Full mode runs identically to v3.16.x; (3) `/prd` without mockups, answer "B" → prompt rendered with discovery + tokens + screens + stack, saved to `handoff/`, state shows `pending_external`, skill STOPs; (4) simulate re-entry with a PNG path → file copied to `mockups/`, status flips to `provided`, Step 3 enters Hybrid mode invoking `ui-design` only for uncovered screens; (5) `features.has_design_system: false` → § 5 of the rendered prompt is omitted entirely; (6) no overlay present → § 4 brand voice omitted.
|
|
28
|
+
|
|
8
29
|
## [3.16.0] - 2026-05-23
|
|
9
30
|
|
|
10
31
|
The `/new` orchestrator becomes specialist-aware: it now reads `owner_agent` from each card YAML and dispatches the right implementation agent — `coder` for backend/logic, `ui-expert` for UI cards, with `plan`/`visual-designer`/`motion-expert` reserved as stubs that fall back to `coder` with a WARN. UI cards (`owner_agent: ui-expert`) receive a dedicated mission briefing that enforces the registry-first BLOCKING cascade (read `${paths.design_system}/INDEX.md` + `tokens-reference.md` + per-component specs BEFORE coding), the implementation-only constraint (no mockup redesign — STOP and ask on registry conflicts), and the Post-Intervention Coherence Check (reconcile INDEX + components + tokens in the same commit). The PRD side enforces the contract end-to-end: `owner_agent` is now a mandatory enum on every child card, UI cards have UI-only scope (logic moves to a sibling `coder` card), and the validation phase blocks commit on enum violations + warns on mixed-scope UI cards.
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.17.0
|
|
@@ -101,6 +101,13 @@ message. You ask questions, wait for answers, and iterate.
|
|
|
101
101
|
(`mockup_analysis.screens[].gaps[]`) DEVONO diventare domande mirate in Discovery o
|
|
102
102
|
essere esplicitamente waivate.
|
|
103
103
|
|
|
104
|
+
**Nota — handoff esterno post-intake.** Se l'utente risponde NO al mockup intake, lo
|
|
105
|
+
Step 3.0 in UI Design gli chiederà se vuole generare i mockup internamente (workflow
|
|
106
|
+
`ui-design`) o fare handoff a **Claude Design**. Nel ramo handoff la skill genera un
|
|
107
|
+
prompt context-rich pronto da incollare, fa STOP, e al rientro con i path locali
|
|
108
|
+
riusa esattamente questa stessa procedura di Step 1.6 → Step 3 entra in Hybrid mode.
|
|
109
|
+
Vedi [ui-design-phase.md](references/ui-design-phase.md) § "Step 3.0 — Mockup Source Decision".
|
|
110
|
+
|
|
104
111
|
---
|
|
105
112
|
|
|
106
113
|
## TEMPLATES
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Claude Design Handoff Prompt — Template
|
|
2
|
+
|
|
3
|
+
> Template populated at runtime by **Step 3.0 (Mockup Source Decision)** in
|
|
4
|
+
> [../references/ui-design-phase.md](../references/ui-design-phase.md) when the
|
|
5
|
+
> user picks the **handoff** branch. All `{{placeholders}}` are resolved from the
|
|
6
|
+
> PRD state file (`${paths.prd_dir}/sessions/YYYY-MM-DD-<slug>-state.md`),
|
|
7
|
+
> `baldart.config.yml`, and optional overlays.
|
|
8
|
+
>
|
|
9
|
+
> Render rules:
|
|
10
|
+
> - Conditional sections (marked `{{#if …}} … {{/if}}`) are emitted only when the
|
|
11
|
+
> condition is true. Skip the entire section (including its heading) when false.
|
|
12
|
+
> - Lists (marked `{{#each …}}`) render one bullet per item; emit "—" if empty.
|
|
13
|
+
> - The rendered output is presented to the user inside a fenced markdown
|
|
14
|
+
> code-block so they can copy-paste verbatim into Claude Design.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Feature: {{feature_title}}
|
|
19
|
+
|
|
20
|
+
## 1. Obiettivo
|
|
21
|
+
|
|
22
|
+
{{feature_objective_one_sentence}}
|
|
23
|
+
|
|
24
|
+
## 2. User flow
|
|
25
|
+
|
|
26
|
+
{{user_flow_summary}}
|
|
27
|
+
|
|
28
|
+
{{#if primary_personas}}
|
|
29
|
+
**Personas target**:
|
|
30
|
+
{{#each primary_personas}}
|
|
31
|
+
- {{this.name}} — {{this.context}}
|
|
32
|
+
{{/each}}
|
|
33
|
+
{{/if}}
|
|
34
|
+
|
|
35
|
+
## 3. Schermate in scope
|
|
36
|
+
|
|
37
|
+
{{#each screens_in_scope}}
|
|
38
|
+
### {{this.name}}
|
|
39
|
+
|
|
40
|
+
- **Scopo**: {{this.purpose}}
|
|
41
|
+
- **Stati richiesti**: {{this.states_required}} <!-- empty, loading, populated, error, success, ecc. -->
|
|
42
|
+
- **Azioni primarie**: {{this.primary_actions}}
|
|
43
|
+
- **Dati visualizzati**: {{this.data_shown}}
|
|
44
|
+
{{#if this.notes}}
|
|
45
|
+
- **Note**: {{this.notes}}
|
|
46
|
+
{{/if}}
|
|
47
|
+
|
|
48
|
+
{{/each}}
|
|
49
|
+
|
|
50
|
+
{{#if brand_voice}}
|
|
51
|
+
## 4. Brand & voice
|
|
52
|
+
|
|
53
|
+
- **Tono**: {{brand_voice.tone}}
|
|
54
|
+
- **Personalità**: {{brand_voice.personality}}
|
|
55
|
+
- **Do**: {{brand_voice.do}}
|
|
56
|
+
- **Don't**: {{brand_voice.dont}}
|
|
57
|
+
{{#if brand_voice.references}}
|
|
58
|
+
- **Riferimenti visivi**: {{brand_voice.references}}
|
|
59
|
+
{{/if}}
|
|
60
|
+
{{/if}}
|
|
61
|
+
|
|
62
|
+
{{#if has_design_system}}
|
|
63
|
+
## 5. Design system constraints
|
|
64
|
+
|
|
65
|
+
> Riusa SOLO i token e le primitive elencate. Se devi proporre qualcosa di nuovo,
|
|
66
|
+
> segnalalo esplicitamente nella consegna così posso aggiornare il registro.
|
|
67
|
+
|
|
68
|
+
### Token chiave
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
{{design_tokens_excerpt}}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Primitive da riusare
|
|
75
|
+
|
|
76
|
+
{{#each registered_primitives}}
|
|
77
|
+
- **{{this.name}}** — {{this.purpose}} ({{this.path}})
|
|
78
|
+
{{/each}}
|
|
79
|
+
|
|
80
|
+
### Vincoli numerici (da `design-system-protocol.md`)
|
|
81
|
+
|
|
82
|
+
- Type scale: {{tokens.type_scale}}
|
|
83
|
+
- Spacing scale: {{tokens.spacing_scale}}
|
|
84
|
+
- Radius: {{tokens.radius_scale}}
|
|
85
|
+
- Contrast minimo: {{tokens.contrast_target}} (WCAG AA + APCA Lc ≥ {{tokens.apca_target}})
|
|
86
|
+
- Motion durations: {{tokens.motion_durations}}
|
|
87
|
+
{{/if}}
|
|
88
|
+
|
|
89
|
+
## 6. Stack target
|
|
90
|
+
|
|
91
|
+
- **Framework**: {{stack.framework}}
|
|
92
|
+
- **Output preferito**: {{output_format_preference}} <!-- "HTML/CSS standalone" | "React component (Tailwind)" | "Figma frame" -->
|
|
93
|
+
{{#if stack.charting}}
|
|
94
|
+
- **Charting library**: {{stack.charting}}
|
|
95
|
+
{{/if}}
|
|
96
|
+
{{#if stack.animation}}
|
|
97
|
+
- **Animation library**: {{stack.animation}}
|
|
98
|
+
{{/if}}
|
|
99
|
+
|
|
100
|
+
## 7. Cosa restituirmi
|
|
101
|
+
|
|
102
|
+
Per ogni schermata elencata in § 3:
|
|
103
|
+
|
|
104
|
+
1. **PNG export** ad alta risoluzione (≥ 2x) di OGNI stato richiesto (es. `lista-ordini__empty.png`, `lista-ordini__populated.png`).
|
|
105
|
+
2. {{output_format_preference_block}} <!-- "Codice HTML/CSS in un file unico" | "Codice React (.tsx) con import Tailwind" | "Link Figma alla frame" -->
|
|
106
|
+
3. **Note inline** su:
|
|
107
|
+
- Componenti nuovi (non presenti nel registry sopra) che hai introdotto e perché.
|
|
108
|
+
- Token deviation: qualunque colore/spacing/radius fuori dalla palette sopra, con motivazione.
|
|
109
|
+
- Decisioni di layout non ovvie (es. priority sort, hierarchy visiva, density).
|
|
110
|
+
|
|
111
|
+
Quando hai pronto, dimmi i **path locali** dei file (PNG/HTML/TSX) — li importerò in questa sessione PRD per analisi e validazione contro il design system.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
<!-- baldart-handoff: do-not-edit-manually -->
|
|
116
|
+
<!-- Generated from claude-design-handoff-prompt.template.md by /prd Step 3.0 -->
|
|
@@ -1,15 +1,97 @@
|
|
|
1
1
|
# UI Design Phase (Step 3)
|
|
2
2
|
|
|
3
|
+
## Step 3.0 — Mockup Source Decision (only when `mockups.status: none`)
|
|
4
|
+
|
|
5
|
+
When the state file shows `mockups.status: none` AND UI impact ≠ N/A, the user
|
|
6
|
+
has not provided any mockup at intake. Before falling into the **Full** pipeline,
|
|
7
|
+
offer them an explicit choice — generate internally or hand off to **Claude
|
|
8
|
+
Design** (Anthropic's design product, design-system-sync'd) — so they don't have
|
|
9
|
+
to abandon the PRD flow halfway.
|
|
10
|
+
|
|
11
|
+
Skip this step entirely when `mockups.status` ∈ {`provided`, `partial`,
|
|
12
|
+
`pending_external`} (already decided) or when UI impact = N/A (no design work).
|
|
13
|
+
|
|
14
|
+
### The question (single STOP)
|
|
15
|
+
|
|
16
|
+
Ask the user, verbatim:
|
|
17
|
+
|
|
18
|
+
> Non hai fornito mockup all'intake. Come preferisci produrli per questa feature?
|
|
19
|
+
> **(A) Internamente** — genero io 3 opzioni HTML (workflow `ui-design`), iteriamo qui.
|
|
20
|
+
> **(B) Handoff a Claude Design** — ti preparo un prompt context-rich da incollare in Claude Design; quando hai i mockup tornami con i path locali.
|
|
21
|
+
|
|
22
|
+
**STOP.** Wait for an explicit `A` / `B` answer. Silence or ambiguity ⇒ ask
|
|
23
|
+
again (do NOT default silently).
|
|
24
|
+
|
|
25
|
+
### Branch A — Internal generation
|
|
26
|
+
|
|
27
|
+
Set `mockups.source: internal` in the state file, then fall through to the
|
|
28
|
+
**Precondition decision tree** below — the `none` row routes to Full mode
|
|
29
|
+
unchanged. No other side-effect of Step 3.0.
|
|
30
|
+
|
|
31
|
+
### Branch B — Claude Design handoff
|
|
32
|
+
|
|
33
|
+
1. **Collect context from the state file + config + overlays:**
|
|
34
|
+
- `feature_title`, `feature_objective_one_sentence` from `## Feature Description`.
|
|
35
|
+
- `user_flow_summary`, `primary_personas` from `## Discovery Log` (dimensions 1 + 2).
|
|
36
|
+
- `screens_in_scope[]` from `## UI Design` (derive from User Stories + ISA touchpoints if not yet populated — same logic as Hybrid mode § "Build the per-screen routing table").
|
|
37
|
+
- `brand_voice` from `.baldart/overlays/prd.md` if present (skip section otherwise).
|
|
38
|
+
- When `features.has_design_system: true`: read `${paths.design_system}/INDEX.md` (primitive list) + `${paths.design_system}/tokens-reference.md` (tokens excerpt). When `false`: omit § 5 of the prompt entirely.
|
|
39
|
+
- `stack.framework`, `stack.charting`, `stack.animation` from `baldart.config.yml`.
|
|
40
|
+
- `output_format_preference` derived from `stack.framework` (Next/Remix → React+Tailwind; vanilla → HTML/CSS; otherwise ask the user).
|
|
41
|
+
- Numeric token tables (type scale, spacing, radius, contrast, motion durations) from `framework/agents/design-system-protocol.md` — cite verbatim.
|
|
42
|
+
|
|
43
|
+
2. **Render the prompt** by populating
|
|
44
|
+
[../assets/claude-design-handoff-prompt.template.md](../assets/claude-design-handoff-prompt.template.md)
|
|
45
|
+
with the collected context. Strip empty conditional sections.
|
|
46
|
+
|
|
47
|
+
3. **Present the rendered prompt** to the user inside a fenced markdown
|
|
48
|
+
code-block, prefixed with this instruction (verbatim):
|
|
49
|
+
|
|
50
|
+
> Incolla il prompt qui sotto in Claude Design. Quando hai i mockup pronti,
|
|
51
|
+
> tornami con i **path locali** dei file (PNG, HTML, TSX, o link Figma) e
|
|
52
|
+
> riprendo da qui — copio i file nella cartella del PRD, li analizzo come
|
|
53
|
+
> al solito (Step 1.6 Mockup Intake), e Step 3 entra in Hybrid mode.
|
|
54
|
+
|
|
55
|
+
4. **Update state file** before stopping:
|
|
56
|
+
- `mockups.status: pending_external`
|
|
57
|
+
- `mockups.source: claude-design`
|
|
58
|
+
- `mockups.handoff_prompt_path: ${paths.prd_dir}/<slug>/handoff/claude-design-prompt.md` (save the rendered prompt to disk so it survives session restarts).
|
|
59
|
+
- `step_3_mode: pending_external_handoff` (transitional — overwritten when user returns).
|
|
60
|
+
|
|
61
|
+
5. **STOP.** Wait for the user to return with local paths.
|
|
62
|
+
|
|
63
|
+
### Re-entry from handoff (user returns with paths)
|
|
64
|
+
|
|
65
|
+
When the user comes back with one or more local paths after the handoff:
|
|
66
|
+
|
|
67
|
+
1. Invoke **Step 1.6 — Mockup Intake** verbatim
|
|
68
|
+
([SKILL.md](../SKILL.md) § Hard Rule 16,
|
|
69
|
+
[discovery-phase.md](discovery-phase.md) § "Mockup analysis schema"):
|
|
70
|
+
- Copy local files into `${paths.prd_dir}/<slug>/mockups/` with collision-safe
|
|
71
|
+
rename.
|
|
72
|
+
- Run the full Mockup analysis schema (screens, user_flow, components,
|
|
73
|
+
states_visible, copy_excerpts, gaps, design_system_alignment).
|
|
74
|
+
- Populate `## UI Design` in the state file.
|
|
75
|
+
2. Flip `mockups.status` from `pending_external` to `provided` or `partial`
|
|
76
|
+
based on coverage of `screens_in_scope[]`. Keep `mockups.source: claude-design`
|
|
77
|
+
as audit trail.
|
|
78
|
+
3. Fall through to the **Precondition decision tree** below — the `provided` /
|
|
79
|
+
`partial` row routes to **Hybrid mode** unchanged.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
3
83
|
## Precondition decision tree
|
|
4
84
|
|
|
5
85
|
Read `mockups.status` and `screens_in_scope[]` from the state file `## UI Design`
|
|
6
|
-
section (populated by Step 1.6) plus the UI impact
|
|
7
|
-
checklist. Pick exactly one branch:
|
|
86
|
+
section (populated by Step 1.6 and/or Step 3.0 re-entry) plus the UI impact
|
|
87
|
+
dimension from the discovery checklist. Pick exactly one branch:
|
|
8
88
|
|
|
9
89
|
| Condition | Branch | Action |
|
|
10
90
|
|-----------|--------|--------|
|
|
11
91
|
| UI impact = N/A | **Skip totale** | Mark task 2 `completed` ("Skipped — no UI"). `step_3_mode: skipped`. Proceed to PRD Writing Phase. |
|
|
12
|
-
| `mockups.status: none` AND UI impact ≠ N/A | **
|
|
92
|
+
| `mockups.status: none` AND UI impact ≠ N/A | **3.0 Decision** | Run Step 3.0 above first. Branch A ⇒ fall through to **Full**; Branch B ⇒ STOP, then re-enter. |
|
|
93
|
+
| `mockups.status: pending_external` | **STOP** | User is in handoff with Claude Design. Do not advance until paths arrive (see § "Re-entry from handoff"). |
|
|
94
|
+
| `mockups.status: none` AND user picked Branch A in Step 3.0 | **Full** | Run the standard pipeline 3a → 3b → 3c → 3d as before. `step_3_mode: full`. |
|
|
13
95
|
| `mockups.status` ∈ {`provided`, `partial`} AND UI impact ≠ N/A | **Hybrid** | Per-screen routing (see § Hybrid mode below). `step_3_mode: hybrid` (or `skipped` if every screen is covered AND no `mockup_analysis.design_system_alignment.violations`). |
|
|
14
96
|
|
|
15
97
|
Mark task 2 as `in_progress` for the Full and Hybrid branches.
|