aienvmp 0.1.35 → 0.1.36
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 +6 -0
- package/README.md +1 -0
- package/package.json +1 -1
- package/src/commands/dash.js +2 -0
- package/src/preflight.js +14 -0
- package/src/render.js +5 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.36
|
|
4
|
+
|
|
5
|
+
- Added an explicit enforcement profile to the shared AI preflight contract.
|
|
6
|
+
- Surfaced advisory-by-default vs optional strict mode in the dashboard.
|
|
7
|
+
- Clarified that strict checks are intended for CI or explicit human-requested gates, not default local blocking.
|
|
8
|
+
|
|
3
9
|
## 0.1.35
|
|
4
10
|
|
|
5
11
|
- Added a shared AI preflight contract across status, context, plan, and handoff outputs.
|
package/README.md
CHANGED
|
@@ -105,6 +105,7 @@ aienvmp doctor --strict security # fail only scoped warnings
|
|
|
105
105
|
- one advisory engine, optional enforcement with `doctor --ci`
|
|
106
106
|
- scoped enforcement with `doctor --strict security|policy|coordination|all`
|
|
107
107
|
- context and plan expose suggested strict scopes for CI
|
|
108
|
+
- dashboard and preflight explain advisory default vs optional strict mode
|
|
108
109
|
- non-blocking unless strict mode is explicitly requested
|
|
109
110
|
- security checks are opt-in and read-only
|
|
110
111
|
|
package/package.json
CHANGED
package/src/commands/dash.js
CHANGED
|
@@ -9,6 +9,7 @@ import { renderDashboard } from "../render.js";
|
|
|
9
9
|
import { loadPolicy, policyWarnings } from "../policy.js";
|
|
10
10
|
import { recommendedActions } from "../actions.js";
|
|
11
11
|
import { strictResult } from "../enforcement.js";
|
|
12
|
+
import { buildPreflight } from "../preflight.js";
|
|
12
13
|
|
|
13
14
|
export async function dashWorkspace(args) {
|
|
14
15
|
const dir = workspaceDir(args);
|
|
@@ -23,6 +24,7 @@ export async function dashWorkspace(args) {
|
|
|
23
24
|
const planEnvironment = await detectedPlanEnvironment(dir);
|
|
24
25
|
const html = renderDashboard({
|
|
25
26
|
...manifest,
|
|
27
|
+
preflight: buildPreflight(manifest, warnings, intents),
|
|
26
28
|
recommendedActions: recommendedActions(manifest, { warnings, intents }),
|
|
27
29
|
planArtifacts,
|
|
28
30
|
planRemediation,
|
package/src/preflight.js
CHANGED
|
@@ -16,6 +16,20 @@ export function buildPreflight(manifest = {}, warnings = [], intents = []) {
|
|
|
16
16
|
: "Review warnings or open intents before environment changes.",
|
|
17
17
|
decision,
|
|
18
18
|
enforcement,
|
|
19
|
+
enforcementProfile: {
|
|
20
|
+
defaultMode: "advisory",
|
|
21
|
+
localOperation: "non-blocking",
|
|
22
|
+
strictMode: "optional",
|
|
23
|
+
strictUse: "CI or explicit human-requested checks only",
|
|
24
|
+
reason: "Avoid disrupting shared servers or developer machines while still making drift visible.",
|
|
25
|
+
recommendedStrictCommand: enforcement.recommendedCommand,
|
|
26
|
+
strictCommands: [
|
|
27
|
+
"aienvmp doctor --strict security",
|
|
28
|
+
"aienvmp doctor --strict policy",
|
|
29
|
+
"aienvmp doctor --strict coordination",
|
|
30
|
+
"aienvmp doctor --strict all"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
19
33
|
counts: {
|
|
20
34
|
warnings: warnings.length,
|
|
21
35
|
openIntents: intents.length,
|
package/src/render.js
CHANGED
|
@@ -313,6 +313,9 @@ const envStepsHtml=envSteps.length?'<div class="timeline">'+envSteps.map(s=>\`<d
|
|
|
313
313
|
const ciReadiness=manifest.ciReadiness||[];
|
|
314
314
|
const ciHasFailure=ciReadiness.some(s=>s.status==='fail');
|
|
315
315
|
const ciReadinessHtml=ciReadiness.length?'<table>'+ciReadiness.map(s=>\`<tr><th>\${esc(s.scope)}</th><td><code>\${esc(s.status)}</code>\${s.matchedWarningCodes?.length?\` \${esc(s.matchedWarningCodes.join(', '))}\`:''}</td></tr>\`).join('')+'</table>':'<div class="okline">Run <code>aienvmp doctor --strict security|policy|coordination|all</code> to choose CI enforcement scope.</div>';
|
|
316
|
+
const enforcementProfile=manifest.preflight?.enforcementProfile||{};
|
|
317
|
+
const strictCommands=enforcementProfile.strictCommands||[];
|
|
318
|
+
const enforcementHtml=\`<table><tr><th>Default</th><td><code>\${esc(enforcementProfile.defaultMode||'advisory')}</code></td></tr><tr><th>Local</th><td>\${esc(enforcementProfile.localOperation||'non-blocking')}</td></tr><tr><th>Strict</th><td>\${esc(enforcementProfile.strictUse||'CI or explicit checks only')}</td></tr><tr><th>Recommended</th><td><code>\${esc(enforcementProfile.recommendedStrictCommand||'aienvmp doctor --strict all')}</code></td></tr></table><div class="timeline">\${strictCommands.slice(0,4).map(cmd=>\`<div class="event"><time>CI</time><div><code>\${esc(cmd)}</code></div></div>\`).join('')}</div><div class="path">\${esc(enforcementProfile.reason||'Warnings stay advisory unless strict mode is requested.')}</div>\`;
|
|
316
319
|
const card=(title,badge,body)=>\`<section class="card"><div class="card-head"><h2>\${title}</h2>\${badge||''}</div>\${body}</section>\`;
|
|
317
320
|
const reviewRequired=warnings.length>0||intents.length>0;
|
|
318
321
|
const recentChanges=timeline.slice(-8).length;
|
|
@@ -361,6 +364,8 @@ document.getElementById('app').innerHTML=\`
|
|
|
361
364
|
<div style="height:14px"></div>
|
|
362
365
|
\${card('Environment Steps',envSteps.length?'<span class="pill warn">'+envSteps.length+' items</span>':'<span class="pill off">none</span>',envStepsHtml)}
|
|
363
366
|
<div style="height:14px"></div>
|
|
367
|
+
\${card('Enforcement Mode','<span class="pill">advisory</span>',enforcementHtml)}
|
|
368
|
+
<div style="height:14px"></div>
|
|
364
369
|
\${card('CI Readiness',ciHasFailure?'<span class="pill warn">review</span>':'<span class="pill">ready</span>',ciReadinessHtml)}
|
|
365
370
|
<div style="height:14px"></div>
|
|
366
371
|
\${card('Environment Health',warnings.length?'<span class="pill warn">attention</span>':'<span class="pill">clear</span>',warnHtml)}
|