aienvmp 0.1.54 → 0.1.56

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/BUGFIXES.md CHANGED
@@ -118,6 +118,18 @@ Short record of bugs, fixes, and follow-up checks.
118
118
  - Fix: `aiReadiness` now provides one advisory ready/review signal across status, context, doctor, summary, and dashboard.
119
119
  - Verification: regression tests cover ready/review summaries, text status output, schema metadata, and dashboard rendering.
120
120
 
121
+ ### AI readiness was visible but not first in human review surfaces
122
+
123
+ - Issue: CI Step Summary and the dashboard showed readiness, but agents and humans still had to scan past broader status fields to find the main AI continuation signal.
124
+ - Fix: `.aienvmp/summary.md` now starts with `AI readiness`, `AI signals`, and `AI next`; the dashboard audit band includes readiness signals in its hint.
125
+ - Verification: regression tests assert the summary top block and dashboard readiness signals; Windows and macOS package smoke checks cover generated artifacts.
126
+
127
+ ### AI review state could sound more blocking than intended
128
+
129
+ - Issue: `aiReadiness.level: review` made risk visible, but did not explicitly tell AI agents which local actions remain safe and which environment changes need intent/review first.
130
+ - Fix: `aiReadiness` now includes `requiresHumanReview`, `safeProjectLocalActions`, and `reviewOnlyEnvironmentChanges`; `summary.md` includes the first safe-local-work hint.
131
+ - Verification: regression tests cover status, context, summary, and schema outputs; Windows smoke confirmed generated JSON and summary fields.
132
+
121
133
  ## Template
122
134
 
123
135
  ### Title
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.56
4
+
5
+ - Added `aiReadiness.requiresHumanReview` so agents can distinguish review-needed signals from hard blocking.
6
+ - Added `aiReadiness.safeProjectLocalActions` to clarify what AI agents may still do in review state.
7
+ - Added `aiReadiness.reviewOnlyEnvironmentChanges` to keep environment changes advisory, intentional, and non-disruptive.
8
+ - Added the safe-local-work hint to `.aienvmp/summary.md`.
9
+ - Documented the summary top block and `aiReadiness` consumption rule in `schema --json`.
10
+ - Added regression tests for status, context, summary, and schema outputs.
11
+
12
+ ## 0.1.55
13
+
14
+ - Moved `AI readiness`, readiness signals, and next action to the top of `.aienvmp/summary.md`.
15
+ - Added `aiReadiness.signals` to the dashboard audit-band hint.
16
+ - Kept the CI Step Summary lightweight while making the first AI review signal easier to scan.
17
+ - Updated README and regression tests for the new summary/dashboard readiness surface.
18
+
3
19
  ## 0.1.54
4
20
 
5
21
  - Added `aiReadiness` to the shared preflight/status contract.
package/README.md CHANGED
@@ -34,7 +34,7 @@ Warnings are advisory by default. Use `doctor --strict <scope>` only when you wa
34
34
  ```text
35
35
  AIENV.md # Markdown env map for AI agents
36
36
  .aienvmp/status.json # first AI read: clear/review, next command, nextAgent hint
37
- .aienvmp/summary.md # compact AI/CI summary
37
+ .aienvmp/summary.md # compact AI/CI summary; starts with AI readiness
38
38
  .aienvmp/manifest.json # runtime map + light SBOM
39
39
  .aienvmp/sbom.json # standalone AI-readable light SBOM
40
40
  .aienvmp/sbom.cdx.json # CycloneDX-lite export from project manifests
@@ -48,7 +48,7 @@ AIENV.md # Markdown env map for AI agents
48
48
 
49
49
  - `status`, `context`, `plan`, and `handoff` share one preflight contract.
50
50
  - `schema --json` prints the stable AI-readable output contract without scanning.
51
- - `summary.md` is the short CI/AI handoff view.
51
+ - `summary.md` is the short CI/AI handoff view, with `AI readiness`, signals, and next action first.
52
52
  - `status.json.nextAgent` tells the next AI what to read and whether to review first.
53
53
  - `aiReadiness` gives a one-field ready/review signal for AI continuation.
54
54
  - `dependencyReadSet` lists manifests and lockfiles before package or security changes.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aienvmp",
3
- "version": "0.1.54",
3
+ "version": "0.1.56",
4
4
  "description": "AI-first environment maps and lightweight runtime SBOMs for shared development machines.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -53,19 +53,25 @@ export function renderSummary(status = {}, manifest = {}) {
53
53
  const dependencyFiles = dependencyFilesFor(status.dependencyReadSet);
54
54
  const agentPointers = status.agentPointers || {};
55
55
  const aiReadiness = status.aiReadiness || {};
56
+ const aiSignals = toList(aiReadiness.signals).slice(0, 5);
57
+ const aiNext = aiReadiness.next || "Run aienvmp context --json for details.";
56
58
 
57
59
  return [
58
60
  "# aienvmp summary",
59
61
  "",
62
+ `- AI readiness: ${aiReadiness.level || "unknown"}`,
63
+ `- AI signals: ${aiSignals.length ? aiSignals.join("; ") : "none"}`,
64
+ `- AI next: ${aiNext}`,
65
+ `- AI safe local work: ${toList(aiReadiness.safeProjectLocalActions)[0] || "read artifacts and avoid environment changes until reviewed"}`,
66
+ `- AI read first: ${readFirst}, then ${detail}`,
67
+ `- mode: advisory by default; strict is opt-in with ${strict}`,
68
+ "",
60
69
  `- state: ${status.state || "unknown"}`,
61
70
  `- workspace: ${workspace}`,
62
71
  `- warnings: ${valueOrZero(counts.warnings)} / open intents: ${valueOrZero(counts.openIntents)}`,
63
72
  `- runtimes: ${valueOrZero(counts.runtimes)} / dependencies: ${valueOrZero(counts.dependencies)} / vulnerabilities: ${valueOrZero(counts.vulnerabilities)}`,
64
73
  `- light SBOM risk: ${riskLevel} (${riskScore}) / scanner: ${scanner}`,
65
74
  `- next: ${next}`,
66
- `- AI readiness: ${aiReadiness.level || "unknown"} / ${aiReadiness.next || "Run aienvmp context --json for details."}`,
67
- `- AI read first: ${readFirst}, then ${detail}`,
68
- `- mode: advisory by default; strict is opt-in with ${strict}`,
69
75
  "",
70
76
  "## AI handoff",
71
77
  "",
package/src/contract.js CHANGED
@@ -24,7 +24,8 @@ export function schemaContract() {
24
24
  file: ".aienvmp/summary.md",
25
25
  command: "aienvmp summary --write",
26
26
  format: "markdown",
27
- purpose: "Compact AI and CI step summary for quick review."
27
+ purpose: "Compact AI and CI step summary for quick review.",
28
+ startsWith: ["AI readiness", "AI signals", "AI next"]
28
29
  },
29
30
  context: {
30
31
  command: "aienvmp context --json",
@@ -52,7 +53,8 @@ export function schemaContract() {
52
53
  compatibility: {
53
54
  stability: "additive",
54
55
  consumerRule: "Ignore unknown fields. Do not require optional fields unless listed in requiredFields.",
55
- localBehavior: "read-only; this command does not scan, install, update, or lock anything."
56
+ localBehavior: "read-only; this command does not scan, install, update, or lock anything.",
57
+ aiReadinessRule: "When aiReadiness.level is review, project-local code work may still continue if aiReadiness.projectLocalWork is allowed; environment changes should follow intent/review guidance."
56
58
  }
57
59
  };
58
60
  }
package/src/preflight.js CHANGED
@@ -105,10 +105,21 @@ function aiReadinessSummary({ state, decision, coordination, agentActivity, agen
105
105
  const next = level === "ready"
106
106
  ? "AI agents can continue project-local work; record intent before environment changes."
107
107
  : "Review listed signals before another AI changes runtimes, dependencies, package managers, Docker, or global tools.";
108
+ const safeProjectLocalActions = [
109
+ "read status, summary, context, env map, SBOM, and timeline artifacts",
110
+ "continue code-only work that does not install, remove, upgrade, downgrade, or switch tools",
111
+ "write a plan or intent before changing runtimes, dependencies, package managers, Docker, or global tools"
112
+ ];
113
+ const reviewOnlyEnvironmentChanges = review.length
114
+ ? "Record intent and review signals before environment changes; strict failure remains opt-in."
115
+ : "Record intent before environment changes; strict failure remains opt-in.";
108
116
  return {
109
117
  level,
118
+ requiresHumanReview: review.length > 0,
110
119
  projectLocalWork: decision?.canContinueProjectLocalWork ? "allowed" : "review-first",
111
120
  environmentChanges: decision?.canChangeEnvironmentWithoutReview ? "allowed" : "intent-and-review-first",
121
+ safeProjectLocalActions,
122
+ reviewOnlyEnvironmentChanges,
112
123
  signals: review,
113
124
  blockers,
114
125
  next,
package/src/render.js CHANGED
@@ -494,6 +494,8 @@ const auditItem=(key,value,hint,klass='')=>\`<div class="audit-item \${klass}"><
494
494
  const driftLabel=warnings.length?'detected':'none';
495
495
  const nextAgent=manifest.preflight?.nextAgent||{};
496
496
  const aiReadiness=manifest.preflight?.aiReadiness||{};
497
+ const aiReadinessSignals=(aiReadiness.signals||[]).slice(0,3);
498
+ const aiReadinessHint=(aiReadiness.next||'Run aienvmp context --json for details.')+(aiReadinessSignals.length?' Signals: '+aiReadinessSignals.join('; '):'');
497
499
  const coordination=manifest.preflight?.coordination||{};
498
500
  const conflictTargets=coordination.conflictTargets||[];
499
501
  const handoffFiles=nextAgent.dependencyFiles?.length?nextAgent.dependencyFiles:(dependencyReadSet[0]?[dependencyReadSet[0].manifest,...(dependencyReadSet[0].lockfiles||[])].filter(Boolean):[]);
@@ -510,7 +512,7 @@ document.getElementById('app').innerHTML=\`
510
512
  </header>
511
513
  <section class="audit" aria-label="Audit summary">
512
514
  \${auditItem('AI decision',reviewRequired?'review required':'can proceed',nextAction,reviewRequired?'review':'primary')}
513
- \${auditItem('AI readiness',aiReadiness.level||'unknown',aiReadiness.next||'Run aienvmp context --json for details.',aiReadiness.level==='ready'?'primary':'review')}
515
+ \${auditItem('AI readiness',aiReadiness.level||'unknown',aiReadinessHint,aiReadiness.level==='ready'?'primary':'review')}
514
516
  \${auditItem('Runtime drift',driftLabel,warnings.length?'Policy, runtime, or coordination warning detected':'No drift warnings detected',warnings.length?'review':'')}
515
517
  \${auditItem('Open env changes',String(intents.length),intents.length?'Resolve or coordinate before changes':'No pending env changes')}
516
518
  \${auditItem('Trust',trustState,trustState==='verified'?'Human or CI verified':'Machine observed; not AI-verified')}