@smartmemory/compose 0.1.40-beta → 0.1.42-beta
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/contracts/judge-result.json +2 -2
- package/lib/roadmap-gen.js +10 -1
- package/package.json +1 -1
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"stakes": {
|
|
31
31
|
"enum": ["cheap", "default", "paranoid"],
|
|
32
|
-
"description": "Depth class set by caller. cheap (T1 only), default (T1+T2). paranoid (T1+T2, then a T3 adversary over every interpretive 'met'). STRAT-JUDGE-T3-READJAIL: the paranoid T3 is
|
|
32
|
+
"description": "Depth class set by caller. cheap (T1 only), default (T1+T2). paranoid (T1+T2, then a T3 adversary over every interpretive 'met'). STRAT-JUDGE-T3-READJAIL[-CODEXNEST]: the paranoid T3 is a true cross-model jailed Codex adversary (container namespace read-jail — Docker driver; sandbox-exec retained as inert substrate — confining reads to the staged turn tree) when available, else an honest probe-time degrade to the in-process Claude cold-read. Per-predicate provenance is in predicates[].t3."
|
|
33
33
|
},
|
|
34
34
|
"predicates": {
|
|
35
35
|
"type": "array",
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"properties": {
|
|
106
106
|
"mode": {
|
|
107
107
|
"enum": ["codex_jailed", "codex_jailed_error", "claude_cold_fallback"],
|
|
108
|
-
"description": "codex_jailed: true cross-model Codex adversary,
|
|
108
|
+
"description": "codex_jailed: true cross-model Codex adversary, read-jailed to the staged turn tree by a non-nesting container namespace (Docker driver). claude_cold_fallback: probe-time degrade to in-process Claude cold-read (no OS jail; reasoning-isolation+ordering only). codex_jailed_error: jailed adversary failed post-launch — predicate resolved ambiguous, error surfaced, NEVER silently relabeled fallback."
|
|
109
109
|
},
|
|
110
110
|
"guarantee": {
|
|
111
111
|
"type": ["string", "null"],
|
package/lib/roadmap-gen.js
CHANGED
|
@@ -103,7 +103,16 @@ export function generateRoadmapFromBase(baseText, features, opts = {}) {
|
|
|
103
103
|
// Build merged phase order: source order first (preserves curated sequencing
|
|
104
104
|
// for empty/legacy phases that have no feature.json), then any feature.json
|
|
105
105
|
// phases not yet in source (truly new phases) sorted by feature position.
|
|
106
|
-
|
|
106
|
+
//
|
|
107
|
+
// Dedupe by phase identity (first occurrence wins). A phaseId is a section
|
|
108
|
+
// identity; the same `## ` heading appearing twice in source is the
|
|
109
|
+
// duplicate-section bug, not two distinct phases. Without this dedupe the
|
|
110
|
+
// emit loop below pushes an anon-phase block once per occurrence, so regen
|
|
111
|
+
// is a fixed point on duplicates (2x stays 2x forever) rather than a
|
|
112
|
+
// converger — a duplicate introduced once becomes permanent and survives
|
|
113
|
+
// hand-collapse on the next regen. Deduping makes regen self-healing:
|
|
114
|
+
// 4x/2x/1x source all converge to 1x output.
|
|
115
|
+
const orderedPhaseIds = [...new Set(sourcePhaseOrder)];
|
|
107
116
|
const seenInSource = new Set(sourcePhaseOrder);
|
|
108
117
|
const newPhases = [...phases.keys()].filter(p => !seenInSource.has(p));
|
|
109
118
|
newPhases.sort((a, b) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smartmemory/compose",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.42-beta",
|
|
4
4
|
"description": "Structured AI dev pipeline — goal-to-product orchestration with gates, iteration loops, and feature lifecycle management.",
|
|
5
5
|
"author": "SmartMemory",
|
|
6
6
|
"license": "MIT",
|