autonomousguy 0.6.4
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/LICENSE +21 -0
- package/README.md +96 -0
- package/bin/validate.js +119 -0
- package/package.json +54 -0
- package/skills/autosar/autosar-bsw/SKILL.md +586 -0
- package/skills/autosar/autosar-bsw/references/adaptive-ap.md +104 -0
- package/skills/autosar/autosar-bsw/references/boot-nvm-power.md +127 -0
- package/skills/autosar/autosar-bsw/references/com-stack.md +118 -0
- package/skills/autosar/autosar-bsw/references/comms-protocol.md +130 -0
- package/skills/autosar/autosar-swc/SKILL.md +531 -0
- package/skills/autosar/autosar-swc/references/adaptive-ap.md +69 -0
- package/skills/autosar/autosar-swc/references/rte-api.md +149 -0
- package/skills/change-management/change-and-impact/SKILL.md +259 -0
- package/skills/change-management/change-and-impact/references/html-report-template.html +154 -0
- package/skills/code-quality/code-review/SKILL.md +287 -0
- package/skills/code-quality/code-review/references/adaptive-ap.md +30 -0
- package/skills/code-quality/code-review/references/html-report-template.html +154 -0
- package/skills/code-quality/misra/SKILL.md +306 -0
- package/skills/code-quality/misra/references/html-report-template.html +154 -0
- package/skills/code-quality/misra/references/rules.md +72 -0
- package/skills/debugging/embedded-debugging/SKILL.md +250 -0
- package/skills/debugging/embedded-debugging/references/adaptive-ap.md +33 -0
- package/skills/debugging/embedded-debugging/references/html-report-template.html +154 -0
- package/skills/requirements/requirements/SKILL.md +298 -0
- package/skills/safety/iso26262/SKILL.md +199 -0
- package/skills/safety/iso26262/references/asil-table.md +86 -0
- package/skills/testing/embedded-testing/SKILL.md +288 -0
- package/skills/workspace/codebase-analysis/SKILL.md +548 -0
- package/skills/workspace/codebase-analysis/references/adaptive-ap.md +77 -0
- package/skills/workspace/codebase-analysis/references/html-report-template.html +154 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>Analysis Report</title>
|
|
7
|
+
<!--
|
|
8
|
+
Shared report skeleton for autonomousguy skills. Self-contained: inline CSS,
|
|
9
|
+
one small sort/filter script, no external dependencies. ASCII only, no em dashes.
|
|
10
|
+
Fill the placeholders below. Keep Layers 1-2 lean; push detail into Layer 3.
|
|
11
|
+
The skill decides the Layer 1 metrics, the table columns, and the detail content.
|
|
12
|
+
-->
|
|
13
|
+
<style>
|
|
14
|
+
:root {
|
|
15
|
+
--fg: #1b1f24; --muted: #5b6470; --line: #e1e4e8; --bg: #ffffff;
|
|
16
|
+
--chip-red-bg: #ffe3e3; --chip-red-fg: #9b1c1c;
|
|
17
|
+
--chip-amber-bg: #fff4d6; --chip-amber-fg: #8a5a00;
|
|
18
|
+
--chip-blue-bg: #e3effe; --chip-blue-fg: #1b4f9b;
|
|
19
|
+
--chip-gray-bg: #eceff2; --chip-gray-fg: #44505c;
|
|
20
|
+
--chip-green-bg: #e3f7e8; --chip-green-fg: #1d6b34;
|
|
21
|
+
}
|
|
22
|
+
body { margin: 0; padding: 0 20px 40px; color: var(--fg); background: var(--bg);
|
|
23
|
+
font-family: -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
|
|
24
|
+
font-size: 14px; line-height: 1.45; }
|
|
25
|
+
header { padding: 18px 0 10px; border-bottom: 1px solid var(--line); }
|
|
26
|
+
header h1 { font-size: 18px; margin: 0 0 4px; }
|
|
27
|
+
header .meta { color: var(--muted); font-size: 12px; }
|
|
28
|
+
/* Layer 1 - summary banner */
|
|
29
|
+
.summary { display: flex; flex-wrap: wrap; gap: 14px; margin: 16px 0; }
|
|
30
|
+
.stat { border: 1px solid var(--line); border-radius: 8px; padding: 10px 14px; min-width: 96px; }
|
|
31
|
+
.stat .n { font-size: 22px; font-weight: 600; }
|
|
32
|
+
.stat .l { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .03em; }
|
|
33
|
+
/* Controls */
|
|
34
|
+
.controls { margin: 8px 0 6px; }
|
|
35
|
+
.controls input { width: 280px; max-width: 100%; padding: 6px 9px; font-size: 13px;
|
|
36
|
+
border: 1px solid var(--line); border-radius: 6px; }
|
|
37
|
+
/* Layer 2 - table */
|
|
38
|
+
table { width: 100%; border-collapse: collapse; font-size: 13px; }
|
|
39
|
+
th, td { text-align: left; padding: 7px 10px; border-bottom: 1px solid var(--line); vertical-align: top; }
|
|
40
|
+
th { cursor: pointer; user-select: none; white-space: nowrap; background: #fafbfc; }
|
|
41
|
+
th[data-sort]:after { content: " \2195"; color: var(--muted); font-size: 10px; }
|
|
42
|
+
tbody tr:hover { background: #fafbfc; }
|
|
43
|
+
/* Chips */
|
|
44
|
+
.chip { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 11px; font-weight: 600; }
|
|
45
|
+
.chip-mandatory, .chip-high, .chip-critical { background: var(--chip-red-bg); color: var(--chip-red-fg); }
|
|
46
|
+
.chip-required, .chip-medium, .chip-major { background: var(--chip-amber-bg); color: var(--chip-amber-fg); }
|
|
47
|
+
.chip-advisory, .chip-low, .chip-minor { background: var(--chip-blue-bg); color: var(--chip-blue-fg); }
|
|
48
|
+
.chip-info { background: var(--chip-gray-bg); color: var(--chip-gray-fg); }
|
|
49
|
+
.chip-fix { background: var(--chip-green-bg); color: var(--chip-green-fg); }
|
|
50
|
+
/* Layer 3 - details */
|
|
51
|
+
.details { margin-top: 22px; }
|
|
52
|
+
.details h2 { font-size: 14px; border-bottom: 1px solid var(--line); padding-bottom: 6px; }
|
|
53
|
+
details { border: 1px solid var(--line); border-radius: 8px; margin: 8px 0; padding: 6px 12px; }
|
|
54
|
+
details summary { cursor: pointer; font-weight: 600; }
|
|
55
|
+
details pre { background: #f6f8fa; padding: 10px; border-radius: 6px; overflow-x: auto; font-size: 12px; }
|
|
56
|
+
details .label { color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: .03em; margin-top: 10px; }
|
|
57
|
+
footer { margin-top: 28px; padding-top: 12px; border-top: 1px solid var(--line);
|
|
58
|
+
color: var(--muted); font-size: 12px; }
|
|
59
|
+
</style>
|
|
60
|
+
</head>
|
|
61
|
+
<body>
|
|
62
|
+
|
|
63
|
+
<!-- Header (thin): what was analyzed, timestamp, skill/tool, scope -->
|
|
64
|
+
<header>
|
|
65
|
+
<h1>{{REPORT_TITLE}}</h1>
|
|
66
|
+
<div class="meta">{{SCOPE}} · {{SKILL_NAME}} · generated {{TIMESTAMP}}</div>
|
|
67
|
+
</header>
|
|
68
|
+
|
|
69
|
+
<!-- Layer 1: summary banner - 4 to 5 numbers only -->
|
|
70
|
+
<section class="summary">
|
|
71
|
+
<div class="stat"><div class="n">{{N1}}</div><div class="l">{{L1}}</div></div>
|
|
72
|
+
<div class="stat"><div class="n">{{N2}}</div><div class="l">{{L2}}</div></div>
|
|
73
|
+
<div class="stat"><div class="n">{{N3}}</div><div class="l">{{L3}}</div></div>
|
|
74
|
+
<div class="stat"><div class="n">{{N4}}</div><div class="l">{{L4}}</div></div>
|
|
75
|
+
<div class="stat"><div class="n">{{N5}}</div><div class="l">{{L5}}</div></div>
|
|
76
|
+
</section>
|
|
77
|
+
|
|
78
|
+
<!-- Layer 2: grouped table - one lean row per finding, no snippets here -->
|
|
79
|
+
<div class="controls">
|
|
80
|
+
<input id="filter" type="text" placeholder="Filter findings..." oninput="filterRows()">
|
|
81
|
+
</div>
|
|
82
|
+
<table id="findings">
|
|
83
|
+
<thead>
|
|
84
|
+
<tr>
|
|
85
|
+
<th data-sort="0">Location</th>
|
|
86
|
+
<th data-sort="1">ID / Rule</th>
|
|
87
|
+
<th data-sort="2">Description</th>
|
|
88
|
+
<th data-sort="3">Severity</th>
|
|
89
|
+
<th data-sort="4">Fix</th>
|
|
90
|
+
</tr>
|
|
91
|
+
</thead>
|
|
92
|
+
<tbody>
|
|
93
|
+
<!-- Example rows; replace with one row per finding. Link the Fix cell or a row id to its detail below. -->
|
|
94
|
+
<tr>
|
|
95
|
+
<td>file.c:42</td><td>Rule 14.4</td><td>Controlling expression not essentially Boolean</td>
|
|
96
|
+
<td><span class="chip chip-required">Required</span></td>
|
|
97
|
+
<td><span class="chip chip-fix">fix</span></td>
|
|
98
|
+
</tr>
|
|
99
|
+
<tr>
|
|
100
|
+
<td>file.c:8</td><td>Dir 4.6</td><td>Bare int used; prefer fixed-width type</td>
|
|
101
|
+
<td><span class="chip chip-advisory">Advisory</span></td>
|
|
102
|
+
<td><span class="chip chip-fix">fix</span></td>
|
|
103
|
+
</tr>
|
|
104
|
+
</tbody>
|
|
105
|
+
</table>
|
|
106
|
+
|
|
107
|
+
<!-- Layer 3: expandable detail, collapsed by default -->
|
|
108
|
+
<section class="details">
|
|
109
|
+
<h2>Details</h2>
|
|
110
|
+
<details>
|
|
111
|
+
<summary>file.c:42 - Rule 14.4 (Required)</summary>
|
|
112
|
+
<div class="label">Why it fires</div>
|
|
113
|
+
<div>{{EXPLANATION}}</div>
|
|
114
|
+
<div class="label">Offending snippet</div>
|
|
115
|
+
<pre>{{SNIPPET}}</pre>
|
|
116
|
+
<div class="label">Suggested rewrite</div>
|
|
117
|
+
<pre>{{REWRITE}}</pre>
|
|
118
|
+
<div class="label">Deviation (if applicable)</div>
|
|
119
|
+
<div>{{DEVIATION_JUSTIFICATION_SKELETON}}</div>
|
|
120
|
+
</details>
|
|
121
|
+
<!-- Repeat one <details> per finding. -->
|
|
122
|
+
</section>
|
|
123
|
+
|
|
124
|
+
<!-- Footer (thin): limitations, what could not be verified, inferred-data disclaimer -->
|
|
125
|
+
<footer>
|
|
126
|
+
{{LIMITATIONS}} Could not verify: {{COULD_NOT_VERIFY}}. Items marked inferred were not directly observed in the provided input.
|
|
127
|
+
</footer>
|
|
128
|
+
|
|
129
|
+
<script>
|
|
130
|
+
function filterRows() {
|
|
131
|
+
var q = document.getElementById('filter').value.toLowerCase();
|
|
132
|
+
var rows = document.querySelectorAll('#findings tbody tr');
|
|
133
|
+
rows.forEach(function (r) {
|
|
134
|
+
r.style.display = r.textContent.toLowerCase().indexOf(q) > -1 ? '' : 'none';
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
document.querySelectorAll('#findings th[data-sort]').forEach(function (th) {
|
|
138
|
+
th.addEventListener('click', function () {
|
|
139
|
+
var idx = +th.getAttribute('data-sort');
|
|
140
|
+
var tb = document.querySelector('#findings tbody');
|
|
141
|
+
var rows = Array.prototype.slice.call(tb.querySelectorAll('tr'));
|
|
142
|
+
var asc = th.getAttribute('data-asc') !== 'true';
|
|
143
|
+
th.setAttribute('data-asc', asc);
|
|
144
|
+
rows.sort(function (a, b) {
|
|
145
|
+
var x = a.cells[idx].textContent.trim().toLowerCase();
|
|
146
|
+
var y = b.cells[idx].textContent.trim().toLowerCase();
|
|
147
|
+
return asc ? (x < y ? -1 : x > y ? 1 : 0) : (x > y ? -1 : x < y ? 1 : 0);
|
|
148
|
+
});
|
|
149
|
+
rows.forEach(function (r) { tb.appendChild(r); });
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
</script>
|
|
153
|
+
</body>
|
|
154
|
+
</html>
|