@haaaiawd/loom 2.0.0 → 2.1.0

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 CHANGED
@@ -1,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ - Added environment-aware clarification through `loom context --human-channel available|unavailable`. Unattended Agents inspect first, research only permitted objective facts, and then use bounded assumptions or blocks rather than fabricating users or substituting web search for intent.
6
+ - Added `--state-dir <outside-workspace-dir>` sidecars for isolated benchmark and sandbox runs. Sidecars preserve virtual `.loom/` Task references without mutating the scored workspace or its `AGENTS.md`.
7
+ - Added equal human-channel controls and unattended condition prompts to Evil Eval scaffolding.
8
+
9
+ ## 2.1.0
10
+
11
+ - Added a current-state and recommended-action header to `loom context` output. Agents entering a project or resuming after compression now see project status, active task, work-map counts, and a recommended next action before the full protocol. The recommendation is advisory, not a script.
12
+ - Rewrote `AGENTS.md` with explicit LOOM trigger conditions (project entry, context reset, before substantial work, between Tasks) and a standard work rhythm that keeps Agent judgment while making the next step obvious.
13
+ - Integrated Crux integrity-chain review into the Keeper handoff. The Keeper now checks that responsible intent, project promises, design and capability decisions, Work Map, executable behavior, and human feedback loop form an intact chain, and looks for omission, substitution, drift, unsupported leaps, blindness, and ownerless gaps.
14
+ - Added staged visibility and review guidance to the project template and active-Task execution protocol. Tasks should prefer human-visible acceptance evidence, the Agent should show real working things at milestones, run `loom check` and project tests together before declaring a batch done, and prioritize reaching an exciting surface early to sustain the human's momentum.
15
+ - Strengthened capability source validation: `loom capability synthesize` now requires each decision-tree node's `source:` citation to reference a real `.md` file in the dossier's `research/` directory.
16
+ - Added `research/_guide.md` generation in `loom capability research` so Agents know what good research material looks like, what to avoid, and how to cite sources.
17
+ - Added `.loom/STRUCTURE.md` as a fifth project-truth layer declaring where source code, tests, docs, assets, and configuration files live. `loom check` warns when it is missing or still templated.
18
+ - Added `loom decision --json-file` for recording consequential superseding decisions with affected files and tasks. `loom check` warns when a done Task is marked affected by a later decision.
19
+ - Added `acceptance[]` as the primary Task completion structure, pairing `criterion`, `verify_by`, and `evidence`. Legacy `done_when[]` remains supported.
20
+ - Added Keeper auto-pass: when all Keeper gaps are minor and 3 or fewer, fixing them and running `loom project ready` auto-passes without another Keeper round.
21
+ - Added deliverable coverage tracking through `loom deliverable add` and Task `covers` field. `loom check` reports uncovered delivery units.
22
+ - Added `loom capability research → synthesize → confirm` lifecycle with status tracking per dossier.
23
+ - Updated help text with a typical first-pass flow and capability lifecycle sequence.
24
+
25
+ ## 2.0.1
26
+
27
+ - Added an active-Task execution protocol that restores workspace-aware coding guidance, risk-based testing, restartable progress, criterion-level proof, and conditional commit/PR boundaries after context resets.
28
+ - Strengthened the generated `AGENTS.md` anchor so Agents reload LOOM at project entry, after context loss, and before resumed editing without invoking it before every tool call.
29
+
3
30
  ## 2.0.0
4
31
 
5
32
  - Rebuilt LOOM as invisible Agent infrastructure around project understanding, a scalable design-document graph, separate professional-field dossiers, a broad Work Map, and one active Task.
package/CONTRIBUTING.md CHANGED
@@ -1,37 +1,37 @@
1
- # Contributing to LOOM
2
-
3
- LOOM should become simpler when it changes. A contribution is strongest when it preserves the natural
4
- human–Agent conversation, keeps project truth inspectable on disk, and proves its effect without adding
5
- another ritual.
6
-
7
- ## Before changing code
8
-
9
- 1. Read [the system design](design.md) and [the UX loop](docs/UX_FLOW.md).
10
- 2. Run the current suite and CLI locally:
11
-
12
- ```bash
13
- npm test
14
- node cli/bin/loom.js --help
15
- node cli/bin/loom.js prompts
16
- ```
17
-
18
- 3. Keep a change inside one observable problem. If a contract or stored shape changes, update its design,
19
- prompt, help text, and tests together.
20
-
21
- ## Pull requests
22
-
23
- A useful pull request explains:
24
-
25
- - the user or Agent failure it fixes;
26
- - the smallest complete change that fixes it;
27
- - the exact command or artifact that proves the result;
28
- - any compatibility, migration, or unverified boundary.
29
-
30
- Prompt changes must remain visible through `loom prompts` and be reflected in
31
- [`docs/PROMPT_CATALOG.md`](docs/PROMPT_CATALOG.md). Changes that claim better quality need a baseline-relative
32
- proof; a nicer-looking output alone is not evidence that LOOM caused the improvement.
33
-
34
- ## Release checks
35
-
36
- Run `npm test` and `npm pack --dry-run` before requesting release. See the
37
- [release checklist](docs/RELEASE_CHECKLIST.md) for the maintainer flow.
1
+ # Contributing to LOOM
2
+
3
+ LOOM should become simpler when it changes. A contribution is strongest when it preserves the natural
4
+ human–Agent conversation, keeps project truth inspectable on disk, and proves its effect without adding
5
+ another ritual.
6
+
7
+ ## Before changing code
8
+
9
+ 1. Read [the system design](design.md) and [the UX loop](docs/UX_FLOW.md).
10
+ 2. Run the current suite and CLI locally:
11
+
12
+ ```bash
13
+ npm test
14
+ node cli/bin/loom.js --help
15
+ node cli/bin/loom.js prompts
16
+ ```
17
+
18
+ 3. Keep a change inside one observable problem. If a contract or stored shape changes, update its design,
19
+ prompt, help text, and tests together.
20
+
21
+ ## Pull requests
22
+
23
+ A useful pull request explains:
24
+
25
+ - the user or Agent failure it fixes;
26
+ - the smallest complete change that fixes it;
27
+ - the exact command or artifact that proves the result;
28
+ - any compatibility, migration, or unverified boundary.
29
+
30
+ Prompt changes must remain visible through `loom prompts` and be reflected in
31
+ [`docs/PROMPT_CATALOG.md`](docs/PROMPT_CATALOG.md). Changes that claim better quality need a baseline-relative
32
+ proof; a nicer-looking output alone is not evidence that LOOM caused the improvement.
33
+
34
+ ## Release checks
35
+
36
+ Run `npm test` and `npm pack --dry-run` before requesting release. See the
37
+ [release checklist](docs/RELEASE_CHECKLIST.md) for the maintainer flow.
package/EVIL_EVAL.md CHANGED
@@ -1,112 +1,125 @@
1
- # Evil Eval
2
-
3
- Evil Eval asks a hostile question: does LOOM improve real Agent work, or does it merely generate more process
4
- that resembles rigor?
5
-
6
- ## Core comparison
7
-
8
- Each scenario runs two conditions:
9
-
10
- - Baseline: a normal capable Agent receives the raw brief and all ordinary tools, but no LOOM.
11
- - LOOM: the same model receives the same raw brief, workspace, tools, user answers, and budget, with LOOM available.
12
-
13
- The baseline is not weakened. It may inspect files, browse, ask questions, plan, use memory supplied by the host,
14
- and create any artifacts it normally would. The intended experimental variable is LOOM's protocol and persistent
15
- state, not permission, information, or model quality.
16
-
17
- This is the primary causal comparison: **no framework versus LOOM 2**. LOOM 1 may be added as a third regression
18
- condition when we want to know whether the redesign improved on its ancestor, but it cannot replace the no-framework
19
- baseline and does not answer whether LOOM itself adds value.
20
-
21
- ## Scenario shape
22
-
23
- A scenario records:
24
-
1
+ # Evil Eval
2
+
3
+ Evil Eval asks a hostile question: does LOOM improve real Agent work, or does it merely generate more process
4
+ that resembles rigor?
5
+
6
+ ## Core comparison
7
+
8
+ Each scenario runs two conditions:
9
+
10
+ - Baseline: a normal capable Agent receives the raw brief and all ordinary tools, but no LOOM.
11
+ - LOOM: the same model receives the same raw brief, workspace, tools, user answers, and budget, with LOOM available.
12
+
13
+ The baseline is not weakened. It may inspect files, browse, ask questions, plan, use memory supplied by the host,
14
+ and create any artifacts it normally would. The intended experimental variable is LOOM's protocol and persistent
15
+ state, not permission, information, or model quality.
16
+
17
+ This is the primary causal comparison: **no framework versus LOOM 2**. LOOM 1 may be added as a third regression
18
+ condition when we want to know whether the redesign improved on its ancestor, but it cannot replace the no-framework
19
+ baseline and does not answer whether LOOM itself adds value.
20
+
21
+ ## Scenario shape
22
+
23
+ A scenario records:
24
+
25
25
  - the identical raw brief;
26
26
  - workspace setup and immutable snapshot;
27
27
  - hidden user facts and a deterministic answer script;
28
+ - human-channel availability (`available` or `unavailable`), identical across conditions;
28
29
  - success criteria that judges can observe;
29
- - context-reset points;
30
- - equal token, time, and tool budgets;
31
- - at least three repetitions per condition.
32
-
33
- High-signal scenarios include ambiguous greenfield work, changes to an existing project, multidisciplinary
34
- personalized products, operational command work, and a mid-project user correction that supersedes an earlier
35
- decision.
36
-
37
- ## The evil parts
38
-
39
- 1. Force a context reset after clarification and again mid-Task.
40
- 2. Include one attractive but wrong implementation assumption.
41
- 3. Include a professional domain where generic advice is plausible but harmful.
42
- 4. Change one consequential user answer after the first plan is formed.
43
- 5. Give both conditions equal access to discoverable repository facts.
44
- 6. Penalize unnecessary questions, ceremony, document volume, time, and token cost.
30
+ - context-reset points;
31
+ - equal token, time, and tool budgets;
32
+ - at least three repetitions per condition.
33
+
34
+ High-signal scenarios include ambiguous greenfield work, changes to an existing project, multidisciplinary
35
+ personalized products, operational command work, and a mid-project user correction that supersedes an earlier
36
+ decision.
37
+
38
+ ## The evil parts
39
+
40
+ 1. Force a context reset after clarification and again mid-Task.
41
+ 2. Include one attractive but wrong implementation assumption.
42
+ 3. Include a professional domain where generic advice is plausible but harmful.
43
+ 4. Change one consequential user answer after the first plan is formed.
44
+ 5. Give both conditions equal access to discoverable repository facts.
45
+ 6. Penalize unnecessary questions, ceremony, document volume, time, and token cost.
45
46
  7. Require an implementation attempt or operational transcript; documents alone cannot win.
46
47
 
47
- ## Measures
48
-
49
- Every score cites observable evidence:
50
-
51
- | Measure | What it asks |
52
- |---|---|
53
- | Intent fidelity | Did the result solve the user's actual problem without unauthorized expansion? |
54
- | Question value | Did questions change decisions, and did the Agent avoid asking discoverable facts? |
55
- | Whole-project coverage | Were important behaviors, boundaries, dependencies, and failure paths understood? |
56
- | Capability depth | Did specialist knowledge produce a distinctive project decision rather than a summary? |
57
- | Buildability | Could a fresh Agent select and begin the right work without guessing? |
58
- | Reset continuity | What important truth survived forced context loss? |
59
- | User burden | How much unnecessary explanation, questioning, and framework operation reached the human? |
60
- | Cost and time | Was any quality gain worth its added tokens, latency, and artifacts? |
61
-
62
- ## Blinding and repetition
63
-
64
- Runs are anonymized. A fresh judge receives A and B in randomized order without framework names. The judge scores
65
- both, then receives the order swapped and judges again. Order-sensitive conclusions are marked unstable. Each
66
- condition runs at least three times because a single model trajectory cannot distinguish a system effect from luck.
67
-
68
- Anonymization may replace condition labels and framework metadata, but it must preserve each runnable artifact's
69
- internal directory names and relative paths. Before the judge sees a packet, the harness records a source digest/file
70
- manifest and reruns the condition's declared tests and smoke commands from the anonymized location. A missing file or
71
- path failure introduced by copying is a harness failure, not a condition failure; repair the packet and rerun the judge
72
- while preserving the erroneous first judgment as audit evidence.
73
-
74
- Human judgment should be used for product taste or domain harm when an automated judge cannot observe it. An LLM
75
- judge may organize evidence but does not become ground truth by being verbose.
76
-
77
- ## Ablations
78
-
79
- If full LOOM wins, run smaller comparisons to find the causal mechanism:
80
-
81
- - Task persistence only;
82
- - project whole plus Task persistence;
83
- - capability dossiers without the clarification protocol;
84
- - full LOOM without forced resets.
85
-
86
- LOOM should keep only mechanisms whose benefit survives ablation. If the same result comes from a smaller subset,
87
- delete the rest.
88
-
89
- ## CLI scaffold
90
-
91
- Create a scenario description:
92
-
93
- ```json
94
- {
95
- "id": "EVAL-001",
48
+ ## Unattended external benchmarks
49
+
50
+ An external benchmark such as a terminal-use suite may provide no human response channel. In that condition,
51
+ set `human_channel` to `unavailable` for both arms. Neither arm may invent a user answer or treat web search as
52
+ a substitute for user intent, preference, or authority. Both may inspect the workspace and use only the research
53
+ tools the benchmark makes available; unresolved consequential choices require a bounded reversible assumption or
54
+ a block.
55
+
56
+ Run LOOM with `--state-dir` pointing outside the scored workspace. The sidecar must be fresh per run and passed
57
+ to every LOOM command, so `.loom/` state cannot alter task files or hidden-test behavior.
58
+
59
+ ## Measures
60
+
61
+ Every score cites observable evidence:
62
+
63
+ | Measure | What it asks |
64
+ |---|---|
65
+ | Intent fidelity | Did the result solve the user's actual problem without unauthorized expansion? |
66
+ | Question value | Did questions change decisions, and did the Agent avoid asking discoverable facts? |
67
+ | Whole-project coverage | Were important behaviors, boundaries, dependencies, and failure paths understood? |
68
+ | Capability depth | Did specialist knowledge produce a distinctive project decision rather than a summary? |
69
+ | Buildability | Could a fresh Agent select and begin the right work without guessing? |
70
+ | Reset continuity | What important truth survived forced context loss? |
71
+ | User burden | How much unnecessary explanation, questioning, and framework operation reached the human? |
72
+ | Cost and time | Was any quality gain worth its added tokens, latency, and artifacts? |
73
+
74
+ ## Blinding and repetition
75
+
76
+ Runs are anonymized. A fresh judge receives A and B in randomized order without framework names. The judge scores
77
+ both, then receives the order swapped and judges again. Order-sensitive conclusions are marked unstable. Each
78
+ condition runs at least three times because a single model trajectory cannot distinguish a system effect from luck.
79
+
80
+ Anonymization may replace condition labels and framework metadata, but it must preserve each runnable artifact's
81
+ internal directory names and relative paths. Before the judge sees a packet, the harness records a source digest/file
82
+ manifest and reruns the condition's declared tests and smoke commands from the anonymized location. A missing file or
83
+ path failure introduced by copying is a harness failure, not a condition failure; repair the packet and rerun the judge
84
+ while preserving the erroneous first judgment as audit evidence.
85
+
86
+ Human judgment should be used for product taste or domain harm when an automated judge cannot observe it. An LLM
87
+ judge may organize evidence but does not become ground truth by being verbose.
88
+
89
+ ## Ablations
90
+
91
+ If full LOOM wins, run smaller comparisons to find the causal mechanism:
92
+
93
+ - Task persistence only;
94
+ - project whole plus Task persistence;
95
+ - capability dossiers without the clarification protocol;
96
+ - full LOOM without forced resets.
97
+
98
+ LOOM should keep only mechanisms whose benefit survives ablation. If the same result comes from a smaller subset,
99
+ delete the rest.
100
+
101
+ ## CLI scaffold
102
+
103
+ Create a scenario description:
104
+
105
+ ```json
106
+ {
107
+ "id": "EVAL-001",
96
108
  "title": "Ambiguous multidisciplinary build",
97
109
  "brief": "Build a calming recovery tool from this repository.",
98
110
  "hidden_user_facts": ["The user must retain manual control."],
111
+ "human_channel": "available",
99
112
  "success_criteria": ["A fresh Agent resumes correctly after a forced reset."],
100
- "context_reset_points": ["after-shaping", "mid-task"],
101
- "repetitions": 3
102
- }
103
- ```
104
-
105
- Then run:
106
-
107
- ```bash
108
- loom eval scaffold --json-file scenario.json
109
- ```
110
-
111
- LOOM writes a manifest, equalized condition prompts, and a blind judge prompt under `.loom/eval/<scenario>/`.
112
- Launching isolated Agents remains host-specific; do not claim the evaluation ran merely because the scaffold exists.
113
+ "context_reset_points": ["after-shaping", "mid-task"],
114
+ "repetitions": 3
115
+ }
116
+ ```
117
+
118
+ Then run:
119
+
120
+ ```bash
121
+ loom eval scaffold --json-file scenario.json
122
+ ```
123
+
124
+ LOOM writes a manifest, equalized condition prompts, and a blind judge prompt under `.loom/eval/<scenario>/`.
125
+ Launching isolated Agents remains host-specific; do not claim the evaluation ran merely because the scaffold exists.