jgs-v1-report · git:20260909.7a107eb · 2026-09-09 · sha256 08a99ad231cb3cce
jgs-v1-report git:20260909.7a107ebA
Immutable. This exact content is served forever at /api/v1/blob/08a99ad231cb3cce.
---
name: jgs-v1-report
description: Produce a shareable model-health report and Requirements Traceability Matrix (RTM) for a SysML v1 model, written to a file. FREE tier (read-only). Requires jgs-magic-sysmlv1-mcp. Trigger: "RTM", "traceability matrix", "requirements matrix", "model health report", "model summary report", "export a report".
---
<!--
Copyright (c) 2026 JG Systems Consulting Ltd. All Rights Reserved.
See LICENSE for terms.
-->
# jgs-v1-report — Model-Health & RTM Export
## When to use
Use when the analysis has to be shared: it writes a model-health report and a Requirements Traceability Matrix (RTM) to a file.
## Prerequisites
- The `jgs-magic-sysmlv1-mcp` bridge installed and reachable (the FREE/read-only tier is sufficient).
- A SysML v1 project open in CATIA Magic / MSOSA.
- A writable output location for the report file.
You are a context-free AI agent executing the `jgs-v1-report` skill. **Read-only** — never call
`enable_writes` or any mutation tool. The only writes this skill performs are to the local filesystem
(via the agent's Read/Write tools) to save the report — never to the model.
**Invocation:** `/jgs-v1-report`
> **Behavior-content caveat (bridge gap, 2026-06-17):** `list_children` / `get_element_structure` /
> `walk_tree` do NOT enumerate `Activity.node`/`edge` or `StateMachine` region/state/transition.
> When the RTM or health report assesses functional/behavioral coverage, do not infer "empty
> activity/state-machine" from those tools — use `get_model_metrics` type counts
> (OpaqueActionImpl/ControlFlowImpl/TransitionImpl/StateImpl) or `execute_groovy` reading
> `getNode()`/`getRegion().getTransition()`.
---
## Scope note — read first
`generate_model_summary`, `get_model_metrics`, `check_requirement_coverage`, `export_requirements_matrix`
and `validate_model` all take **no arguments** and operate on the **whole open model** — there is no way
to scope this report to a sub-package. Always frame the output as model-wide.
---
## Step 1 — Model identity
Call `mcp__jgs-sysmlv1__get_root_package` for the model/root name and `mcp__jgs-sysmlv1__get_model_metrics`
for element/diagram/requirement counts by type.
## Step 2 — Narrative summary
Call `mcp__jgs-sysmlv1__generate_model_summary` for a high-level summary of element counts and coverage.
## Step 3 — Native validation
Call `mcp__jgs-sysmlv1__validate_model` for the host tool's own rule-violation list. Group results by
severity/rule. This is CATIA Magic's authoritative verdict, not a heuristic.
**Large output:** `validate_model` can return tens of thousands of characters on a real model (≈88 KB on
the qa-fixture-v1 model). Do **not** embed the full violation list in the report. Summarize: total count
and a breakdown by severity/rule, then list at most 25 representative violations (with element IDs). State
the omitted remainder count.
## Step 4 — Requirement coverage
Call `mcp__jgs-sysmlv1__check_requirement_coverage` for satisfied/verified statistics.
## Step 5 — Traceability matrix
Call `mcp__jgs-sysmlv1__export_requirements_matrix` for the full satisfy/verify matrix. For any
requirement where the matrix is ambiguous and you need the full chain, call
`mcp__jgs-sysmlv1__trace_requirement({"requirement_id": "<req_id>"})` (per requirement; takes
`requirement_id`). Do not call it on requirements that have no links — it returns empty.
---
## Step 6 — Write the report file
Build a markdown document and offer to save it as `jgs-v1-report-YYYY-MM-DD.md` (use today's date; if the
name exists append `-2`, `-3`, …). Use the agent's Write tool — never a bridge write tool.
```markdown
# SysML v1 Model Report — <model name>
*Generated: <date> · Scope: whole model*
## Health summary
<narrative from generate_model_summary>
**Stats:** <element_count> elements · <diagram_count> diagrams · <requirement_count> requirements
## Native validation (validate_model)
| Severity | Rule | Element | Detail |
|---|---|---|---|
| ... | ... | `<id>` | ... |
<or: "No validation violations reported.">
## Requirement coverage
- Satisfied: <n>/<total> · Verified: <m>/<total>
## Requirements Traceability Matrix
| Requirement | Satisfied by | Verified by |
|---|---|---|
| <REQ-ID> <name> | <block(s) or — gap —> | <test(s) or — gap —> |
**Every blank cell is a traceability gap.**
```
After writing, print the file path and a one-line summary (e.g. "12 of 40 requirements unsatisfied,
3 validation violations — see <file>").
---
## Error handling
- **Bridge not reachable:** "jgs-magic-sysmlv1-mcp bridge is not reachable. Is CATIA Magic running with the bridge plugin active?" Stop.
- **A section call fails:** include the section with a note "data unavailable — <tool> returned an error" and continue; never omit silently.
## What not to do
- Do not pass any arguments to the no-arg tools listed in the Scope note.
- Do not claim the report is scoped to a package — it is always model-wide.
- Do not call any model write tool.
## Common Mistakes
| Mistake | Fix |
|---------|-----|
| Reporting an Activity / StateMachine as "empty" from low child counts | `list_children`/`get_element_structure`/`walk_tree` do NOT enumerate Activity nodes/edges or SM regions/transitions — assess behavioral coverage from `get_model_metrics` type counts (OpaqueActionImpl/ControlFlowImpl/TransitionImpl/StateImpl) or `execute_groovy getNode()`/`getRegion().getTransition()` |
| Passing arguments to the report tools | `generate_model_summary`/`get_model_metrics`/`check_requirement_coverage`/`export_requirements_matrix`/`validate_model` take NO args and are whole-model — never scope them to a package |
| Embedding the full `validate_model` output | It can exceed tens of thousands of characters — summarize by severity/rule and list at most ~25 representative violations with the omitted count |
| Calling `trace_requirement` on non-Requirement links | It takes `requirement_id` and returns empty for requirements with no links — only call it where the matrix needs the full chain |