instar 1.3.1271 → 1.3.1272

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.
Files changed (32) hide show
  1. package/dist/core/types.d.ts +7 -0
  2. package/dist/core/types.d.ts.map +1 -1
  3. package/dist/core/types.js.map +1 -1
  4. package/dist/data/standards-guard-index.json +1 -1
  5. package/dist/data/standards-guard-index.meta.json +2 -2
  6. package/dist/data/standards-registry.meta.json +1 -1
  7. package/dist/scheduler/AgentMdJobLoader.d.ts +2 -0
  8. package/dist/scheduler/AgentMdJobLoader.d.ts.map +1 -1
  9. package/dist/scheduler/AgentMdJobLoader.js +14 -7
  10. package/dist/scheduler/AgentMdJobLoader.js.map +1 -1
  11. package/dist/scheduler/InstallBuiltinJobs.d.ts.map +1 -1
  12. package/dist/scheduler/InstallBuiltinJobs.js +3 -0
  13. package/dist/scheduler/InstallBuiltinJobs.js.map +1 -1
  14. package/dist/scheduler/JevJobCompletionAudit.d.ts +18 -2
  15. package/dist/scheduler/JevJobCompletionAudit.d.ts.map +1 -1
  16. package/dist/scheduler/JevJobCompletionAudit.js +35 -5
  17. package/dist/scheduler/JevJobCompletionAudit.js.map +1 -1
  18. package/dist/scheduler/JobScheduler.js +3 -3
  19. package/dist/scheduler/JobScheduler.js.map +1 -1
  20. package/dist/scheduler/buildPerSlugManifest.d.ts +2 -0
  21. package/dist/scheduler/buildPerSlugManifest.d.ts.map +1 -1
  22. package/dist/scheduler/buildPerSlugManifest.js +2 -0
  23. package/dist/scheduler/buildPerSlugManifest.js.map +1 -1
  24. package/package.json +1 -1
  25. package/src/data/builtin-manifest.json +3 -3
  26. package/src/data/standards-guard-index.json +1 -1
  27. package/src/data/standards-guard-index.meta.json +2 -2
  28. package/src/data/standards-registry.meta.json +1 -1
  29. package/src/scaffold/templates/jobs/instar/commitment-detection.md +3 -1
  30. package/src/scaffold/templates/jobs/instar/reflection-trigger.md +3 -0
  31. package/upgrades/1.3.1272.md +58 -0
  32. package/upgrades/side-effects/jev-audit-claimed-effects.md +88 -0
@@ -0,0 +1,88 @@
1
+ # Side-Effects Review — Jev audit: claimed effects
2
+
3
+ **Version / slug:** `jev-audit-claimed-effects`
4
+ **Date:** `2026-09-23`
5
+ **Author:** `echo`
6
+ **Second-pass reviewer:** `not required (Tier 1; observe-only, adds no decision surface, fully reversible by removing frontmatter)`
7
+
8
+ ## Summary of the change
9
+
10
+ The job-completion audit's deterministic column was inert on 363/363 rows
11
+ because no job declared an effect. Declaring unconditional `declaredEffects`
12
+ on this job population would manufacture false failures (the enabled jobs
13
+ write conditionally). This adds `conditionalEffects`: a jailed path the audit
14
+ verifies ONLY when the run claims it with an `EFFECT: <path>` stdout line.
15
+ Unclaimed → new `conditional-unclaimed` state (not suspicious). Claimed but
16
+ missing/stale → the existing `missing`/`stale` states (suspicious — the
17
+ false-success signal). Two built-in templates declare one effect each.
18
+
19
+ ## Decision-point inventory
20
+
21
+ - *(none)* — the audit remains observe-only. The new state feeds the existing
22
+ evidence pack Jev reasons over; no block, retry, alert or gate is added.
23
+
24
+ ---
25
+
26
+ ## 1. Over-block
27
+
28
+ Nothing is newly rejected. A run that prints no marker is `conditional-unclaimed`,
29
+ which is excluded from the suspicious stratum and gated on `false_success`
30
+ alone (same treatment as `no-effects-declared`). A claimed path that is
31
+ refused by the jail (absolute/`..`/symlink/escape) is recorded as `refused`,
32
+ as today, never as a failure of the job.
33
+
34
+ ## 2. Under-block
35
+
36
+ A job that does work but forgets to print the marker reads as a quiet run —
37
+ the audit under-detects that run's success/failure exactly as it does today.
38
+ This is the safe direction: silence never accuses. A job that prints the marker
39
+ without writing the file is caught (`missing`/`stale`) — the target case.
40
+
41
+ ## 3. Level-of-abstraction fit
42
+
43
+ The claim is parsed at the audit's capture chokepoint, the only place that
44
+ already holds the run output, the declared set and the jail root. No new
45
+ layer. The alternative — inferring "did work" from Jev — would put an LLM in
46
+ the deterministic column; the marker keeps the deterministic column
47
+ deterministic.
48
+
49
+ ## 4. Signal vs authority compliance
50
+
51
+ Signal-producer. The marker parse is brittle-by-design (exact line shape) and
52
+ holds NO authority: its only output is a field in the evidence pack. Per
53
+ `docs/signal-vs-authority.md`, a brittle check may inform, never block. It
54
+ informs.
55
+
56
+ ## 5. Interactions
57
+
58
+ - `declaredEffects` semantics unchanged; the two lists are unioned into the
59
+ verified set, each capped at 8 independently.
60
+ - The suspicious-stratum filter (`missing`/`stale`) is untouched, so
61
+ `conditional-unclaimed` never jumps the queue.
62
+ - Load-time validation is shared between both lists (one loop), so the jail
63
+ cannot drift between them.
64
+ - `installBuiltinJobs` overwrites built-in job bodies on update, so existing
65
+ agents receive the two template declarations on their next update
66
+ (Migration Parity — no separate migration needed; manifests regenerate).
67
+
68
+ ## 6. External surfaces
69
+
70
+ Job stdout gains one line on the two declaring jobs. That line is the job's
71
+ own output, already captured, scrubbed and clamped by the audit; it reaches
72
+ Jev inside the evidence pack under the existing egress rules. No new
73
+ network surface, no new user-facing message.
74
+
75
+ ## 7. Multi-machine posture (Cross-Machine Coherence)
76
+
77
+ Machine-local BY DESIGN, identical to `declaredEffects`: the effect is a file
78
+ on the disk where the job ran, verified on that disk. Evidence packs and
79
+ verdict rows are already machine-local (14-day retention, never replicated,
80
+ never HTTP-served raw). No user-facing notice is added, so one-voice gating
81
+ does not apply.
82
+
83
+ ## 8. Rollback cost
84
+
85
+ Delete the `conditionalEffects` entries (and the marker instruction line)
86
+ from the two templates. The audit falls back to `no-effects-declared` —
87
+ today's behaviour. No migration, no state repair; existing packs with the
88
+ new state remain valid JSON and are read as non-suspicious.