instar 1.2.21 → 1.2.23
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/README.md +10 -7
- package/dist/core/CoherenceGate.d.ts +12 -0
- package/dist/core/CoherenceGate.d.ts.map +1 -1
- package/dist/core/CoherenceGate.js +37 -2
- package/dist/core/CoherenceGate.js.map +1 -1
- package/dist/core/CoherenceReviewer.d.ts +28 -1
- package/dist/core/CoherenceReviewer.d.ts.map +1 -1
- package/dist/core/CoherenceReviewer.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +40 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/reviewers/value-alignment.d.ts +16 -0
- package/dist/core/reviewers/value-alignment.d.ts.map +1 -1
- package/dist/core/reviewers/value-alignment.js +71 -6
- package/dist/core/reviewers/value-alignment.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +16 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +17 -17
- package/src/scaffold/templates/jobs/instar/docs-coverage-audit.md +36 -0
- package/src/scaffold/templates.ts +16 -0
- package/upgrades/1.2.22.md +32 -0
- package/upgrades/1.2.23.md +50 -0
- package/upgrades/side-effects/docs-coverage-weekly.md +74 -0
- package/upgrades/side-effects/org-intent-runtime-gate.md +117 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Side-effects review — org-intent runtime gate (Phase 1)
|
|
2
|
+
|
|
3
|
+
Spec: `docs/specs/ORG-INTENT-RUNTIME-GATE-SPEC.md`
|
|
4
|
+
ELI16: `docs/specs/ORG-INTENT-RUNTIME-GATE-SPEC.eli16.md`
|
|
5
|
+
Phase: 1 of 4 (this PR). Phases 2-4 (session-start injection, tradeoff helper, drift detection job) are queued.
|
|
6
|
+
|
|
7
|
+
## Surface map
|
|
8
|
+
|
|
9
|
+
| Change | File | Type |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `OrgIntentReviewContext` interface + `ReviewContext.orgIntent` field | `src/core/CoherenceReviewer.ts` | Type extension (additive, optional field) |
|
|
12
|
+
| `OrgIntentManager.parse()` wired into `loadValueDocs()` | `src/core/CoherenceGate.ts` | Behavior change (structured parsing replaces flat extraction for `ORG-INTENT.md` only) |
|
|
13
|
+
| Reviewer prompt rewrite with three-rule contract | `src/core/reviewers/value-alignment.ts` | Behavior change (prompt content) |
|
|
14
|
+
| Criticality auto-promotion for value-alignment when ORG-INTENT has constraints | `src/core/CoherenceGate.ts` | Behavior change (failure-mode handling) |
|
|
15
|
+
| CLAUDE.md template: ORG-INTENT runtime subsection | `src/scaffold/templates.ts` | Doc change (fresh agents) |
|
|
16
|
+
| CLAUDE.md migration: ORG-INTENT runtime subsection patched into existing files | `src/core/PostUpdateMigrator.ts` | Migration parity (existing agents) |
|
|
17
|
+
| Tier 1 unit tests | `tests/unit/CoherenceGate.test.ts`, `tests/unit/PostUpdateMigrator-org-intent-runtime.test.ts` | Test addition |
|
|
18
|
+
| Tier 2 integration test | `tests/integration/coherence-gate-org-intent.test.ts` | Test addition |
|
|
19
|
+
| Tier 3 E2E lifecycle test | `tests/e2e/org-intent-runtime-lifecycle.test.ts` | Test addition |
|
|
20
|
+
|
|
21
|
+
No new agent-installed config keys. No new hooks. No agent-installed code changes — the runtime wiring is entirely in instar source. Migration is to `CLAUDE.md` only.
|
|
22
|
+
|
|
23
|
+
## Over-block analysis
|
|
24
|
+
|
|
25
|
+
**Could the new wiring block messages that previously passed?**
|
|
26
|
+
|
|
27
|
+
Yes — that is exactly the intended effect for agents with an authored `ORG-INTENT.md`. The behavior change is: constraints written in `ORG-INTENT.md` now actually block outbound messages that violate them. Prior to this change, the same agent with the same file would have let those messages through.
|
|
28
|
+
|
|
29
|
+
For agents without an `ORG-INTENT.md`, behavior is unchanged. The structured-intent path is gated on `OrgIntentManager.parse()` returning non-null; absent, template-only, or unparseable files return null and fall back to the legacy flat-blob path (which itself is what shipped before).
|
|
30
|
+
|
|
31
|
+
**Could the criticality auto-promotion over-block?**
|
|
32
|
+
|
|
33
|
+
The promotion only affects timeout behavior. Specifically: when `value-alignment` reviewer TIMES OUT on an external-facing message AND `ORG-INTENT.md` has at least one constraint, the gate fails closed instead of falling open. Pre-change behavior: a timeout on `value-alignment` led to `ALL_ABSTAIN` or `WARN_ONLY`, which fell open for internal channels and queued/fail-closed for external depending on config. Post-change behavior: external timeout under this condition triggers `HIGH_CRIT_TIMEOUT` which fails closed.
|
|
34
|
+
|
|
35
|
+
Net effect on operator: slightly higher rate of "Review system unavailable" responses on external channels under reviewer-timeout stress, instead of unreviewed messages slipping through. Override available: explicit `config.reviewerCriticality['value-alignment'] = 'standard'` restores prior behavior.
|
|
36
|
+
|
|
37
|
+
**Could the migration over-write user-customized CLAUDE.md content?**
|
|
38
|
+
|
|
39
|
+
No. Both insertion paths use content-sniff guards (`!content.includes('ORG-INTENT.md (Organizational Intent at Runtime)') && !content.includes('Organizational Intent at Runtime')`). The migration is purely additive — it inserts before an anchor (`**Topic-Project Bindings**`) when present, falls back to appending when absent, and skips entirely when the subsection is already present. Re-runs are idempotent (verified by unit test).
|
|
40
|
+
|
|
41
|
+
## Under-block analysis
|
|
42
|
+
|
|
43
|
+
**What does the new wiring NOT catch?**
|
|
44
|
+
|
|
45
|
+
- **Semantic constraint violations the reviewer LLM does not detect.** The reviewer relies on the LLM (`sonnet` by default) to recognize when a draft message violates a written constraint. A subtle violation — say, hinting at internal pricing without quoting a specific number — may slip through if the LLM does not connect the constraint to the draft.
|
|
46
|
+
- **Constraint scoping**: the current model treats all constraints as universal. There is no way to say "this constraint applies only to external contacts." Phase 3 may add channel/recipient scoping.
|
|
47
|
+
- **Tradeoff hierarchy use outside the reviewer**: only the value-alignment reviewer consults it. Code paths that make decisions (research agents, planning) cannot ask the hierarchy for a tiebreaker yet. Phase 3 adds a tradeoff helper API.
|
|
48
|
+
- **Drift accumulation**: a stream of messages each individually passing review can collectively drift from organizational intent. Phase 4 adds periodic drift detection.
|
|
49
|
+
|
|
50
|
+
**What if ORG-INTENT.md is mutated after the gate boots?**
|
|
51
|
+
|
|
52
|
+
The 60-minute `ValueDocCache` TTL means edits do not take effect until cache expiry (or process restart). This is documented in the Phase 4 E2E test (`cache-stale` case) so a future refactor cannot silently break the invariant. A future improvement (Phase 2 or 3) may add fs.watch-based invalidation.
|
|
53
|
+
|
|
54
|
+
## Level-of-abstraction fit
|
|
55
|
+
|
|
56
|
+
The runtime wiring lives in `src/core/CoherenceGate.ts` and `src/core/reviewers/value-alignment.ts` — the right layer. The parser already lived at `src/core/OrgIntentManager.ts`; this change connects the two at the layer that actually evaluates outbound messages.
|
|
57
|
+
|
|
58
|
+
The migration lives in `src/core/PostUpdateMigrator.ts` — the right layer for changes that need to propagate to existing agents.
|
|
59
|
+
|
|
60
|
+
No new abstractions introduced. The change adds one new type (`OrgIntentReviewContext`), one new private method (`resolveCriticality`), and one new helper function (`formatOrgIntent`) — all minimal and proportional to the work.
|
|
61
|
+
|
|
62
|
+
## Signal-vs-authority compliance
|
|
63
|
+
|
|
64
|
+
This is the right place in the stack for ORG-INTENT enforcement. The Coherence Gate is the authoritative pre-delivery review for outbound messages. The reviewer prompt explicitly distinguishes:
|
|
65
|
+
|
|
66
|
+
- **Constraints** → AUTHORITY: severity MUST be `block`. The reviewer is told to block constraint violations.
|
|
67
|
+
- **Goals** → mixed: contradictions warn or block depending on severity. The reviewer has discretion.
|
|
68
|
+
- **Values** → SIGNAL: drift warns. Not authoritative.
|
|
69
|
+
- **Tradeoff hierarchy** → SIGNAL feeding AUTHORITY: it tells the reviewer how to resolve ties; the reviewer is still authoritative on the verdict.
|
|
70
|
+
|
|
71
|
+
Lower-precision signals (e.g. deterministic keyword scans in the PEL) could be added later for blatant constraint violations, but those would be signals; the reviewer remains the authority. Per `feedback_signal_vs_authority` from agent memory.
|
|
72
|
+
|
|
73
|
+
## Interactions with existing systems
|
|
74
|
+
|
|
75
|
+
| System | Interaction | Risk |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| `value-alignment` reviewer (existing) | Prompt rewritten; receives `orgIntent` field in context | Low — prompt change tested at all three tiers |
|
|
78
|
+
| Other reviewers (existing) | No change | None |
|
|
79
|
+
| `loadValueDocs` cache | Extended to include `orgIntent` field | Low — additive |
|
|
80
|
+
| `ValueDocCache` TTL | Unchanged (60 minutes) | Documented; locked in by E2E test |
|
|
81
|
+
| Legacy `orgValues` flat blob | Still loaded and passed to reviewers | None — backwards compatible |
|
|
82
|
+
| Custom reviewers reading `context.orgValues` | Still work as before | None |
|
|
83
|
+
| `instar intent` CLI surface (existing) | Unchanged | None |
|
|
84
|
+
| `/intent/org`, `/intent/validate` HTTP routes (existing) | Unchanged | None |
|
|
85
|
+
| PostUpdateMigrator other migrations | New migration is independent | None |
|
|
86
|
+
| Husky pre-push tone-gate / version-gate | Should pass — new content has Evidence section, version bump is minor | Verified by full-suite run before push |
|
|
87
|
+
|
|
88
|
+
No other instar systems consume `ORG-INTENT.md`. The structured parser was a one-purpose primitive used only by the offline analyzer CLI and now by the gate.
|
|
89
|
+
|
|
90
|
+
## Rollback cost
|
|
91
|
+
|
|
92
|
+
Low. The legacy flat-blob path (`extractValueSection` → `orgValues`) is retained and still passed to reviewers. Three options:
|
|
93
|
+
|
|
94
|
+
1. **Code revert**: `git revert <PR-merge-sha>` restores prior behavior. Tests will fail until the new test files are also removed, but production behavior reverts cleanly.
|
|
95
|
+
2. **Soft revert via reviewer config**: explicitly set `config.responseReview.reviewers['value-alignment'].mode = 'warn'` to demote constraint violations from `block` to `warn`. This restores most of the prior behavior without reverting code.
|
|
96
|
+
3. **Soft revert via criticality config**: explicitly set `config.responseReview.reviewerCriticality['value-alignment'] = 'standard'` to undo the timeout-fail-closed change without touching the rest.
|
|
97
|
+
|
|
98
|
+
No data migration to roll back. No file format changes. No agent-installed code changes.
|
|
99
|
+
|
|
100
|
+
## Test coverage summary
|
|
101
|
+
|
|
102
|
+
| Tier | File | Tests | Status |
|
|
103
|
+
|---|---|---|---|
|
|
104
|
+
| 1 (unit) | `tests/unit/CoherenceGate.test.ts` (new describe block) | 5 | ✓ passing |
|
|
105
|
+
| 1 (unit) | `tests/unit/PostUpdateMigrator-org-intent-runtime.test.ts` | 5 | ✓ passing |
|
|
106
|
+
| 2 (integration) | `tests/integration/coherence-gate-org-intent.test.ts` | 4 | ✓ passing |
|
|
107
|
+
| 3 (E2E lifecycle) | `tests/e2e/org-intent-runtime-lifecycle.test.ts` | 4 | ✓ passing |
|
|
108
|
+
|
|
109
|
+
All three tiers exercise the same parser + gate + reviewer + HTTP route + production wiring, with each tier proving a different layer of the invariant.
|
|
110
|
+
|
|
111
|
+
## Open follow-ups (deferred to later phases, NOT this PR)
|
|
112
|
+
|
|
113
|
+
- Phase 2: Inject parsed intent at session-start (alongside identity/topic context).
|
|
114
|
+
- Phase 3: Standalone `POST /intent/tradeoff-resolve` helper consulted by non-reviewer code.
|
|
115
|
+
- Phase 4: Periodic drift detection job sampling recent outbound actions vs intent.
|
|
116
|
+
- Cache invalidation on `ORG-INTENT.md` mutation (fs.watch or signal-based).
|
|
117
|
+
- Per-channel constraint scoping (some constraints external-only, others universal).
|