bms-speckit-plugin 6.9.0 → 6.10.1
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bms-speckit",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.10.1",
|
|
4
4
|
"description": "Chain-orchestrated development pipeline with 12-step autonomous workflow (brainstorm → research → constitution → specify → plan → tasks → analyze → implement with rolling QC → final quality gate → merge) and 9-dimension QC agent (code errors, security incl. SQL parameterization, deps, UX/UI, accessibility, deployment artifacts, cross-DB compatibility, real-DB integration testing, HOSxP business logic validation, brand/layout polish). Runs autonomously — never prompts for clarification.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "manoirx"
|
|
@@ -250,17 +250,7 @@ chain_sequence:
|
|
|
250
250
|
|
|
251
251
|
# ── Phase 2: Implementation (main context) ────────────────────────────────
|
|
252
252
|
|
|
253
|
-
- step_id:
|
|
254
|
-
skill_id: internal.compact
|
|
255
|
-
action: execute
|
|
256
|
-
phase: 2
|
|
257
|
-
description: Free context window before implementation
|
|
258
|
-
timeout_seconds: 30
|
|
259
|
-
error_handling:
|
|
260
|
-
on_failure: continue
|
|
261
|
-
max_retries: 0
|
|
262
|
-
|
|
263
|
-
- step_id: step_10_implement_with_rolling_qc
|
|
253
|
+
- step_id: step_9_implement_with_rolling_qc
|
|
264
254
|
skill_id: speckit.implement
|
|
265
255
|
action: execute_loop
|
|
266
256
|
phase: 2
|
|
@@ -320,7 +310,7 @@ chain_sequence:
|
|
|
320
310
|
validation pass. Apply improvements, re-run all tests, confirm zero
|
|
321
311
|
regression. Only output FINISHED after everything is validated.
|
|
322
312
|
|
|
323
|
-
- step_id:
|
|
313
|
+
- step_id: step_10_final_quality_gate
|
|
324
314
|
agent_id: bms-speckit:quality-control
|
|
325
315
|
action: dispatch_agent
|
|
326
316
|
phase: 2
|
|
@@ -355,7 +345,7 @@ chain_sequence:
|
|
|
355
345
|
Proceed to merge unless unfixed build errors, test failures, or
|
|
356
346
|
critical security vulnerabilities remain.
|
|
357
347
|
|
|
358
|
-
- step_id:
|
|
348
|
+
- step_id: step_11_merge
|
|
359
349
|
skill_id: internal.git_merge_to_main
|
|
360
350
|
action: execute
|
|
361
351
|
phase: 2
|
|
@@ -396,6 +386,6 @@ metadata:
|
|
|
396
386
|
reason: Preserve main context window for implementation
|
|
397
387
|
phase_2:
|
|
398
388
|
name: Implementation & Verification & Merge
|
|
399
|
-
steps: [step_9 through
|
|
389
|
+
steps: [step_9 through step_11]
|
|
400
390
|
execution: main_context
|
|
401
391
|
reason: Implementation needs full tool access and ralph-loop
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bms-speckit-plugin",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.10.1",
|
|
4
4
|
"description": "Chain-orchestrated development pipeline: /bms-speckit takes requirements and runs brainstorm → constitution → specify → plan → tasks → analyze → implement → verify with per-step error handling",
|
|
5
5
|
"files": [
|
|
6
6
|
".claude-plugin/",
|
|
@@ -48,10 +48,9 @@ TaskCreate: "Step 5: Specify — feature specification"
|
|
|
48
48
|
TaskCreate: "Step 6: Plan — implementation plan"
|
|
49
49
|
TaskCreate: "Step 7: Tasks — task list"
|
|
50
50
|
TaskCreate: "Step 8: Analyze — consistency check"
|
|
51
|
-
TaskCreate: "Step 9:
|
|
52
|
-
TaskCreate: "Step 10:
|
|
53
|
-
TaskCreate: "Step 11:
|
|
54
|
-
TaskCreate: "Step 12: Merge to main"
|
|
51
|
+
TaskCreate: "Step 9: Implement with rolling QC"
|
|
52
|
+
TaskCreate: "Step 10: Final quality gate"
|
|
53
|
+
TaskCreate: "Step 11: Merge to main"
|
|
55
54
|
```
|
|
56
55
|
|
|
57
56
|
Then output a message to the user:
|
|
@@ -74,14 +73,14 @@ You are running the BMS Speckit specification and planning chain. Execute each s
|
|
|
74
73
|
|
|
75
74
|
**IMPORTANT — Progress reporting:** Before starting each step, output a progress message to the user in this format:
|
|
76
75
|
|
|
77
|
-
`[Step N/
|
|
76
|
+
`[Step N/11] step_name — description...`
|
|
78
77
|
|
|
79
78
|
After completing each step, output:
|
|
80
79
|
|
|
81
|
-
`[Step N/
|
|
80
|
+
`[Step N/11] DONE — brief result summary`
|
|
82
81
|
|
|
83
82
|
### Step 1 — Brainstorm `[on_failure: STOP]`
|
|
84
|
-
- **Progress:** Output `[Step 1/
|
|
83
|
+
- **Progress:** Output `[Step 1/11] Brainstorm — exploring requirements and design...`
|
|
85
84
|
- **Skill:** `superpowers.brainstorm`
|
|
86
85
|
- **Input:** "$ARGUMENTS"
|
|
87
86
|
- **Purpose:** Explore intent, requirements, design alternatives, and edge cases
|
|
@@ -89,10 +88,10 @@ After completing each step, output:
|
|
|
89
88
|
- **Output:** Detailed specification document
|
|
90
89
|
- **Timeout:** 300s
|
|
91
90
|
- **Post-action:** Commit all files and push. Message: `feat(speckit): brainstorm — explore requirements and design`
|
|
92
|
-
- **Done:** Output `[Step 1/
|
|
91
|
+
- **Done:** Output `[Step 1/11] DONE — brainstorm complete`
|
|
93
92
|
|
|
94
93
|
### Step 2 — Research `[on_failure: CONTINUE]`
|
|
95
|
-
- **Progress:** Output `[Step 2/
|
|
94
|
+
- **Progress:** Output `[Step 2/11] Research — surveying best practices and technologies...`
|
|
96
95
|
- **Purpose:** Research external best practices, proven patterns, recommended libraries/frameworks, and informative reference material relevant to the user's requirement. This grounds the pipeline in current industry knowledge before specification begins.
|
|
97
96
|
- **Tools:** Use `WebSearch` and `mcp__plugin_context7_context7__resolve-library-id` + `mcp__plugin_context7_context7__query-docs` for library documentation
|
|
98
97
|
- **Timeout:** 300s
|
|
@@ -111,25 +110,25 @@ After completing each step, output:
|
|
|
111
110
|
- **Security/compliance notes** — standards to adhere to (if applicable)
|
|
112
111
|
- **Prior art** — reference implementations or architectures found
|
|
113
112
|
- **Post-action:** Commit all files and push. Message: `feat(speckit): research — best practices and technology survey`
|
|
114
|
-
- **Done:** Output `[Step 2/
|
|
113
|
+
- **Done:** Output `[Step 2/11] DONE — research brief created (N topics researched)`
|
|
115
114
|
|
|
116
115
|
### Step 3 — Constitution `[on_failure: STOP]`
|
|
117
|
-
- **Progress:** Output `[Step 3/
|
|
116
|
+
- **Progress:** Output `[Step 3/11] Constitution — establishing engineering principles...`
|
|
118
117
|
- **Skill:** `speckit.constitution`
|
|
119
118
|
- **Input:** "Establish and enforce a comprehensive set of engineering principles that prioritize high code quality, strict adherence to Test-Driven Development (TDD) practices, and well-defined testing standards across unit, component, integration, and API levels to ensure system reliability and maintainability, maintain a consistent, user-friendly, and professional user interface aligned with strong user experience (UX) guidelines, optimize application performance through efficient architecture and resource management; enforce disciplined version control practices with frequent, atomic commits to minimize risk and improve traceability, promote the development and reuse of modular components and functions while centralizing business logic to avoid duplication and ensure consistency, provide clear, informative user feedback and progress reporting throughout system interactions, and leverage all available tools, frameworks, and domain-specific expertise to support developers in delivering robust, scalable, and high-quality applications."
|
|
120
119
|
- **Output:** `specs/constitution.md`
|
|
121
120
|
- **Timeout:** 300s
|
|
122
|
-
- **Done:** Output `[Step 3/
|
|
121
|
+
- **Done:** Output `[Step 3/11] DONE — constitution created`
|
|
123
122
|
|
|
124
123
|
### Step 4 — CLAUDE.md Sync `[on_failure: CONTINUE]`
|
|
125
|
-
- **Progress:** Output `[Step 4/
|
|
124
|
+
- **Progress:** Output `[Step 4/11] CLAUDE.md Sync — verifying compliance...`
|
|
126
125
|
- **Action:** Read CLAUDE.md and verify it complies with the constitution in `specs/constitution.md`. Update CLAUDE.md if it conflicts with or is missing constitution rules.
|
|
127
126
|
- **Timeout:** 120s
|
|
128
127
|
- **Post-action:** Commit all files and push. Message: `feat(speckit): add constitution and sync CLAUDE.md`
|
|
129
|
-
- **Done:** Output `[Step 4/
|
|
128
|
+
- **Done:** Output `[Step 4/11] DONE — CLAUDE.md synced`
|
|
130
129
|
|
|
131
130
|
### Step 5 — Specify `[on_failure: STOP]`
|
|
132
|
-
- **Progress:** Output `[Step 5/
|
|
131
|
+
- **Progress:** Output `[Step 5/11] Specify — creating feature specification...`
|
|
133
132
|
- **Skill:** `speckit.specify`
|
|
134
133
|
- **Input:** Use the detailed specification output from Step 1 (brainstorm) **enriched with the research findings from Step 2**. Include recommended libraries, best practices, and compliance requirements from the research brief in the specification input.
|
|
135
134
|
- **Knowledge lookup:** Use `mcp__bms-knowledge-mcp__search_knowledge` to search the `hosxp` collection for exact table names, field names, data types, and relationships needed by this feature. Reference actual HOSxP data structures in the spec.
|
|
@@ -139,35 +138,35 @@ After completing each step, output:
|
|
|
139
138
|
- **Timeout:** 300s
|
|
140
139
|
- **Retry:** up to 2 attempts
|
|
141
140
|
- **Post-action:** Commit all files and push. Message: `feat(speckit): add feature specification`
|
|
142
|
-
- **Done:** Output `[Step 5/
|
|
141
|
+
- **Done:** Output `[Step 5/11] DONE — specification created`
|
|
143
142
|
|
|
144
143
|
### Step 6 — Plan `[on_failure: STOP]`
|
|
145
|
-
- **Progress:** Output `[Step 6/
|
|
144
|
+
- **Progress:** Output `[Step 6/11] Plan — generating implementation plan...`
|
|
146
145
|
- **Skill:** `speckit.plan`
|
|
147
146
|
- **Input:** reads from step 5 artifacts
|
|
148
147
|
- **Output:** `specs/*/plan.md`
|
|
149
148
|
- **Timeout:** 300s
|
|
150
149
|
- **Retry:** up to 2 attempts
|
|
151
150
|
- **Post-action:** Commit all files and push. Message: `feat(speckit): add implementation plan`
|
|
152
|
-
- **Done:** Output `[Step 6/
|
|
151
|
+
- **Done:** Output `[Step 6/11] DONE — plan created`
|
|
153
152
|
|
|
154
153
|
### Step 7 — Tasks `[on_failure: STOP]`
|
|
155
|
-
- **Progress:** Output `[Step 7/
|
|
154
|
+
- **Progress:** Output `[Step 7/11] Tasks — generating task list...`
|
|
156
155
|
- **Skill:** `speckit.tasks`
|
|
157
156
|
- **Input:** reads from step 6 artifacts
|
|
158
157
|
- **Output:** `specs/*/tasks.md`
|
|
159
158
|
- **Timeout:** 300s
|
|
160
159
|
- **Retry:** up to 2 attempts
|
|
161
160
|
- **Post-action:** Commit all files and push. Message: `feat(speckit): add task list`
|
|
162
|
-
- **Done:** Output `[Step 7/
|
|
161
|
+
- **Done:** Output `[Step 7/11] DONE — N tasks created`
|
|
163
162
|
|
|
164
163
|
### Step 8 — Analyze `[on_failure: CONTINUE]`
|
|
165
|
-
- **Progress:** Output `[Step 8/
|
|
164
|
+
- **Progress:** Output `[Step 8/11] Analyze — cross-artifact consistency check...`
|
|
166
165
|
- **Skill:** `speckit.analyze`
|
|
167
166
|
- **Purpose:** Cross-artifact consistency check (spec ↔ plan ↔ tasks ↔ research). Non-destructive — report only.
|
|
168
167
|
- **Timeout:** 300s
|
|
169
168
|
- **Post-action:** Commit all files and push. Message: `feat(speckit): add cross-artifact analysis report`
|
|
170
|
-
- **Done:** Output `[Step 8/
|
|
169
|
+
- **Done:** Output `[Step 8/11] DONE — analysis complete`
|
|
171
170
|
|
|
172
171
|
### Completion Contract — DO NOT RETURN UNTIL THIS IS SATISFIED
|
|
173
172
|
|
|
@@ -267,13 +266,8 @@ Only after the Verification Gate passes (`GATE=OK`), update tasks 1–8 as compl
|
|
|
267
266
|
|
|
268
267
|
> **Execution context:** Runs in main context after subagent completes.
|
|
269
268
|
|
|
270
|
-
### Step 9 —
|
|
271
|
-
- **Progress:** Output `[Step 9/
|
|
272
|
-
- **Action:** Run `/compact` to free context window before implementation.
|
|
273
|
-
- **Done:** Update task 9 as completed.
|
|
274
|
-
|
|
275
|
-
### Step 10 — Implement with Rolling QC `[on_failure: CONTINUE | max_retries: 3]`
|
|
276
|
-
- **Progress:** Output `[Step 10/12] Implement — starting rolling QC loop (N tasks)...`
|
|
269
|
+
### Step 9 — Implement with Rolling QC `[on_failure: CONTINUE | max_retries: 3]`
|
|
270
|
+
- **Progress:** Output `[Step 9/11] Implement — starting rolling QC loop (N tasks)...`
|
|
277
271
|
- **Engine:** ralph-loop
|
|
278
272
|
- **Input:** Use the **tasks.md path returned by the Phase 1 subagent** (e.g. `specs/my-feature/tasks.md`). Replace `{TASKS_PATH}` below with the actual path.
|
|
279
273
|
- **Completion promise:** `FINISHED`
|
|
@@ -300,14 +294,20 @@ Only after the Verification Gate passes (`GATE=OK`), update tasks 1–8 as compl
|
|
|
300
294
|
4. **FIX** — fix every issue found in steps 2 and 3, re-run checks
|
|
301
295
|
5. **COMMIT** — only commit when build + lint + unit tests + integration tests all pass with zero errors
|
|
302
296
|
6. **NEXT** — move to next task
|
|
297
|
+
- **CRITICAL — ralph-loop prompt sanitation:** The `/ralph-loop:ralph-loop` slash command currently does not quote `$ARGUMENTS` when handing the prompt to bash (a known upstream bug in `ralph-loop/commands/ralph-loop.md`). This means **any shell metacharacter in your prompt is interpreted before the ralph-loop script runs**, causing the loop to fail before it starts. When constructing the prompt below:
|
|
298
|
+
- **Never include backticks (`` ` ``) anywhere in the prompt.** Do not use markdown code spans for command names. Write `npm run build` as `'npm run build'` (single quotes) or as the words `the build command`.
|
|
299
|
+
- **Never include `$(...)` or `` `...` `` (command substitution).**
|
|
300
|
+
- **Never include unescaped double quotes** inside the prompt — they close the outer quoting. If you must mention a quoted string, use single quotes.
|
|
301
|
+
- **Avoid stray `&`, `|`, `;`, `<`, `>`, `\` in prose.** These are shell separators/redirections.
|
|
302
|
+
- **Pre-flight scrub:** before issuing the slash command, scan your constructed prompt and replace every backtick with a single quote, every `$(...)` with `the output of ...`, every internal `"` with `'`. If unsure, use only ASCII letters, digits, spaces, hyphens, em-dashes, parentheses, periods, commas, colons, and forward slashes.
|
|
303
303
|
- **Action:** Run:
|
|
304
304
|
|
|
305
305
|
`/ralph-loop:ralph-loop "systematically execute speckit.implement via the Skill tool to complete every task defined in {TASKS_PATH} with strict adherence to specification requirements. IMPORTANT: apply rolling QC after EACH task — after implementing a task run build and fix build errors, run linter and fix lint errors, run ALL tests (not just new ones) and fix failures, check for hardcoded secrets and injection vulnerabilities in code you just wrote, verify UI code has actionable error messages and loading states. RUNTIME SAFETY: always add explicit return type annotations on data transformation functions, never spread or iterate a function return value without verifying it returns the expected collection type, use strict equality and null guards for external data, write tests that execute data transformers and verify output type and shape. SQL VALIDATION: before writing any SQL statement verify exact table and column names exist via bms-session-mcp-server list_tables/describe_table or bms-knowledge-mcp search_knowledge with hosxp collection, never guess column names, after writing test each query with EXPLAIN or LIMIT 0 via the query tool to confirm it executes without error. INTEGRATION TESTING: for every task that touches database or data-dependent logic run an integration test using the real bms-session-mcp-server query tool to execute the feature's SQL against the real HOSxP database (not mocks), flow the result through the actual code path, assert on concrete properties (row count, columns populated, types match, masked fields handled), use small LIMIT to avoid large result sets. If integration test fails investigate the real cause and fix it — do not relax the assertion. BUSINESS LOGIC: before writing any SQL state the business question it answers then consult bms-knowledge-mcp search_knowledge on hosxp collection to verify canonical table selection, soft-delete filters, correct date columns, join keys (hn/vn/an); use graph_search for multi-table relationships; for reporting queries also check moph or nhso collections for regulatory rules; cite the HOSxP convention in a code comment next to the query. Only commit when build plus lint plus tests all pass with zero errors then proceed to next task. Report progress to the user after each task: output [Task N/total] DONE — task_name. Do NOT batch QC at the end. Maintain atomic commits after each successful task with clear traceability, avoid requesting confirmation and proceed autonomously, once all tasks are implemented invoke speckit.analyze via the Skill tool to perform a full validation pass, automatically apply all recommended improvements or corrections, re-run all tests to confirm stability and zero regression, and only output <promise>FINISHED</promise> after every task is fully completed, validated, and aligned with production-grade quality standards" --completion-promise "FINISHED" --max-iterations 10`
|
|
306
306
|
|
|
307
|
-
- **Done:** Update task
|
|
307
|
+
- **Done:** Update task 9 as completed. Output `[Step 9/11] DONE — all tasks implemented and verified`
|
|
308
308
|
|
|
309
|
-
### Step
|
|
310
|
-
- **Progress:** Output `[Step 11
|
|
309
|
+
### Step 10 — Final Quality Gate `[on_failure: STOP | max_retries: 3]`
|
|
310
|
+
- **Progress:** Output `[Step 10/11] Final QC — running comprehensive quality audit...`
|
|
311
311
|
- **Agent:** Dispatch `bms-speckit:quality-control` agent
|
|
312
312
|
- **Purpose:** Final comprehensive sweep. Since inline QC already caught per-task issues, this focuses on **cross-cutting concerns** that can only be detected across the full codebase.
|
|
313
313
|
- **Timeout:** 900s
|
|
@@ -324,15 +324,15 @@ Only after the Verification Gate passes (`GATE=OK`), update tasks 1–8 as compl
|
|
|
324
324
|
- **H. Integration testing (real database, end-to-end)** — run actual integration tests against the real HOSxP database via `bms-session-mcp-server`. For every DB-touching feature verify there's an integration test that: executes the feature's real SQL via the `query` tool, flows real data through the actual code path (transformers, filters, UI components), asserts on concrete properties (row count range, column presence, type correctness, masked field handling, Thai encoding). Create missing integration tests. Never fix failures by mocking responses, skipping tests, or loosening assertions. Flag slow queries for user review. (skipped if bms-session-mcp-server is not available)
|
|
325
325
|
- **I. Business logic semantic validation** — verify every SQL statement actually retrieves the correct data per the user's intent and HOSxP conventions, not just that it runs without error. For each SQL: state the business question it should answer, cross-reference `mcp__bms-knowledge-mcp__search_knowledge` on `hosxp` collection for canonical table selection, soft-delete/status filters, correct date columns, join keys (hn/vn/an), code system usage (ICD-10/LOINC/TMT). Use `graph_search` for multi-table relationship questions. Check regulatory compliance via `moph` and `nhso` collections (43 files reporting, reimbursement rules). Verify Thai conventions (Buddhist calendar, CID validation, pre-masked fields). Fix semantic mismatches with code comments citing the HOSxP convention. Flag ambiguous intent for user review. (skipped if bms-knowledge-mcp is not available)
|
|
326
326
|
- The agent fixes everything it can. Major dependency updates are flagged for user review.
|
|
327
|
-
- **Completion rule:** When the QC agent returns its report, proceed to Step
|
|
327
|
+
- **Completion rule:** When the QC agent returns its report, proceed to Step 11 **unless** the report contains unfixed build errors, unfixed test failures, or unfixed critical security vulnerabilities. Informational findings, flagged-for-review items, and already-fixed issues do NOT block progression. If uncertain, proceed — the QC agent already fixed what it could.
|
|
328
328
|
- **Post-action:** Commit all fixes and push. Message: `fix(speckit): final QC — security, deps, UX consistency, accessibility`
|
|
329
|
-
- **Done:** Update task
|
|
329
|
+
- **Done:** Update task 10 as completed. Output `[Step 10/11] DONE — quality gate passed`
|
|
330
330
|
|
|
331
|
-
### Step
|
|
332
|
-
- **Progress:** Output `[Step
|
|
331
|
+
### Step 11 — Merge to Main `[on_failure: STOP]`
|
|
332
|
+
- **Progress:** Output `[Step 11/11] Merge — merging to main branch...`
|
|
333
333
|
- **Action:** Switch to main branch, merge the feature branch (fast-forward if possible), push main to remote, then clean up the feature branch.
|
|
334
334
|
- **Timeout:** 120s
|
|
335
|
-
- **Done:** Update task
|
|
335
|
+
- **Done:** Update task 11 as completed. Output:
|
|
336
336
|
|
|
337
337
|
> Pipeline complete! Feature merged to main.
|
|
338
338
|
|
|
@@ -343,15 +343,15 @@ Only after the Verification Gate passes (`GATE=OK`), update tasks 1–8 as compl
|
|
|
343
343
|
```
|
|
344
344
|
Phase 1 (subagent) Phase 2 (main context)
|
|
345
345
|
────────────────────────────── ──────────────────────────────
|
|
346
|
-
Step 1: brainstorm ──STOP── commit Step 9:
|
|
347
|
-
+ knowledge search (hosxp)
|
|
348
|
-
Step 2: research ────────── commit
|
|
349
|
-
+ WebSearch + context7 │
|
|
350
|
-
Step 3: constitution ─STOP─┐
|
|
351
|
-
Step 4: CLAUDE.md sync ───┘ commit
|
|
352
|
-
Step 5: specify ──────STOP── commit
|
|
353
|
-
+ knowledge search (hosxp)
|
|
354
|
-
Step 6: plan ─────────STOP── commit
|
|
346
|
+
Step 1: brainstorm ──STOP── commit Step 9: implement + rolling QC
|
|
347
|
+
+ knowledge search (hosxp) ┌─ implement task ─┐
|
|
348
|
+
Step 2: research ────────── commit │ inline QC │
|
|
349
|
+
+ WebSearch + context7 │ fix → commit │
|
|
350
|
+
Step 3: constitution ─STOP─┐ └─ next task ──────┘
|
|
351
|
+
Step 4: CLAUDE.md sync ───┘ commit Step 10: final QC agent ── commit
|
|
352
|
+
Step 5: specify ──────STOP── commit (security/deps/UX/a11y/deploy)
|
|
353
|
+
+ knowledge search (hosxp) Step 11: merge to main + push
|
|
354
|
+
Step 6: plan ─────────STOP── commit
|
|
355
355
|
Step 7: tasks ────────STOP── commit
|
|
356
356
|
Step 8: analyze ──────────── commit
|
|
357
357
|
```
|