yam-flow 0.1.8 → 0.1.9
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 +23 -0
- package/COMMANDS.md +2 -2
- package/README.md +2 -2
- package/dist/bin/yam.js +9 -3
- package/dist/lib/trust-kernel.d.ts +6 -0
- package/dist/lib/trust-kernel.js +12 -0
- package/package.json +1 -1
- package/references/final-report.md +26 -0
- package/skills/deep/SKILL.md +2 -2
- package/skills/mission/SKILL.md +2 -2
- package/skills/quick/SKILL.md +2 -1
- package/skills/ueye/SKILL.md +2 -1
- package/src/bin/yam.ts +9 -3
- package/src/lib/trust-kernel.ts +18 -0
- package/yam.manifest.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to yam-flow are documented here.
|
|
4
4
|
|
|
5
|
+
## v0.1.9 - 2026-06-18
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Expanded `yam loop report --json` into a read-only handoff artifact with `fix_first_items`, `recommended_direction`, `implementation_notes`, `why_this_next`, `blocked_by`, and `owner_route`.
|
|
10
|
+
- Added loop report smoke coverage for the new handoff fields while keeping the existing minimal and blocked report paths.
|
|
11
|
+
|
|
12
|
+
### Improved
|
|
13
|
+
|
|
14
|
+
- Updated `$quick`, `$deep`, `$mission`, and `$ueye` final response guidance so implementation work can include Study Note and handoff habits without forcing a CLI artifact for ordinary work.
|
|
15
|
+
- Updated `references/final-report.md`, README, COMMANDS, and manifest principles to treat Study Note and handoff direction as final-report practices.
|
|
16
|
+
|
|
17
|
+
### Verification
|
|
18
|
+
|
|
19
|
+
- `npm run typecheck`
|
|
20
|
+
- `npm run build`
|
|
21
|
+
- `node ./dist/bin/yam.js loop report --json` with handoff fields
|
|
22
|
+
- `npm run cli-smoke`
|
|
23
|
+
- `npm run verify:self`
|
|
24
|
+
- `npm run forbidden-names:check`
|
|
25
|
+
- `npm run package-boundary:check`
|
|
26
|
+
- `npm run dist:freshness`
|
|
27
|
+
|
|
5
28
|
## v0.1.8 - 2026-06-16
|
|
6
29
|
|
|
7
30
|
### Added
|
package/COMMANDS.md
CHANGED
|
@@ -148,7 +148,7 @@ yam tools doctor /path/to/project
|
|
|
148
148
|
yam tools doctor /path/to/project --json
|
|
149
149
|
yam context pressure /path/to/project --json
|
|
150
150
|
yam cleanup scan /path/to/project --json
|
|
151
|
-
yam loop report --route quick --intent "fix release readiness" --stage "inspect:passed:read release report" --evidence "typecheck passed" --issue-code "src/bin/yam.ts release report" --issue-role "summarizes release readiness without publishing" --issue-symptom "npm auth failure needs clearer next action" --changed-code "yam loop report" --changed-role "records loop evidence and learning note" --change-summary "added a read-only loop artifact" --why-important "it helps users learn what changed without overclaiming verification" --learning-note "fix blockers before claiming done" --json
|
|
151
|
+
yam loop report --route quick --intent "fix release readiness" --stage "inspect:passed:read release report" --evidence "typecheck passed" --fix-first-item "npm auth must be verified before publish" --remaining-task "rerun release report after auth refresh" --recommended-direction "fix npm auth first, then publish manually" --implementation-note "keep loop report read-only" --why-this-next "auth blocks public release claims" --blocked-by "npm whoami E401" --owner-route deep --issue-code "src/bin/yam.ts release report" --issue-role "summarizes release readiness without publishing" --issue-symptom "npm auth failure needs clearer next action" --changed-code "yam loop report" --changed-role "records loop evidence and learning note" --change-summary "added a read-only loop artifact" --why-important "it helps users learn what changed without overclaiming verification" --learning-note "fix blockers before claiming done" --json
|
|
152
152
|
yam proof /path/to/project
|
|
153
153
|
yam proof --route deep --truth verified --command "npm run build: pass"
|
|
154
154
|
yam proof --route ueye --truth verified --visual "reference image only"
|
|
@@ -195,7 +195,7 @@ Supported report shapes:
|
|
|
195
195
|
|
|
196
196
|
- Runtime evidence mini: command/process, observation, cleanup, truth status, next action.
|
|
197
197
|
- Patch queue lite: mission lane status, changed files, verification hint, rollback hint, truth status.
|
|
198
|
-
- Loop report: intent, stage outcomes, evidence, blockers, next action, remaining tasks, and study note.
|
|
198
|
+
- Loop report: intent, stage outcomes, evidence, blockers, next action, fix-first items, remaining tasks, recommended direction, blocked-by notes, owner route, and study note.
|
|
199
199
|
- Study note: short non-specialist explanation of the failing code, its role, observed symptom, changed code, and why it matters.
|
|
200
200
|
- Benchmark optimization loop lite: baseline, one change, rerun, keep/revert decision.
|
|
201
201
|
- Structured diagnostic next action: severity, evidence, owner route, next action, truth status.
|
package/README.md
CHANGED
|
@@ -142,7 +142,7 @@ yam ueye report --reference ./reference.png --actual .yam/screens/home.png --pre
|
|
|
142
142
|
yam proof --route ueye --truth verified --visual "implementation screenshot evidence recorded" --design-completion '{"completion_claim":"done","has_implementation_screenshot":true,"design_quality":"pass","states_checked":true,"mobile_checked":true,"contrast_checked":true,"cta_checked":true,"direction_locked":true,"truth_status":"verified"}'
|
|
143
143
|
yam media proof --requested --attempted --output ./generated.png --wait-loop --json
|
|
144
144
|
yam proof --route mission --mission-envelope '{"agent_id":"implementer","assigned_scope":"target component","changed_files":["src/file.ts"],"verification_hint":"npm run typecheck","truth_status":"partial"}'
|
|
145
|
-
yam loop report --route quick --intent "fix release readiness" --stage "inspect:passed:read release report" --evidence "typecheck passed" --issue-code "src/bin/yam.ts release report" --issue-role "summarizes release readiness without publishing" --issue-symptom "npm auth failure needs clearer next action" --changed-code "yam loop report" --changed-role "records loop evidence and learning note" --change-summary "added a read-only loop artifact" --why-important "it helps users learn what changed without overclaiming verification" --learning-note "fix blockers before claiming done" --json
|
|
145
|
+
yam loop report --route quick --intent "fix release readiness" --stage "inspect:passed:read release report" --evidence "typecheck passed" --fix-first-item "npm auth must be verified before publish" --remaining-task "rerun release report after auth refresh" --recommended-direction "fix npm auth first, then publish manually" --implementation-note "keep loop report read-only" --why-this-next "auth blocks public release claims" --blocked-by "npm whoami E401" --owner-route deep --issue-code "src/bin/yam.ts release report" --issue-role "summarizes release readiness without publishing" --issue-symptom "npm auth failure needs clearer next action" --changed-code "yam loop report" --changed-role "records loop evidence and learning note" --change-summary "added a read-only loop artifact" --why-important "it helps users learn what changed without overclaiming verification" --learning-note "fix blockers before claiming done" --json
|
|
146
146
|
yam release report --json
|
|
147
147
|
yam safety "supabase db reset"
|
|
148
148
|
yam detect /path/to/project
|
|
@@ -216,7 +216,7 @@ These shapes keep reports machine-readable without turning normal work into a he
|
|
|
216
216
|
- Runtime evidence mini: compact route, command/process, observation, cleanup, truth status, and next action fields for `$deep` or `$mission` runtime claims.
|
|
217
217
|
- Patch queue lite: `$mission` lane records with pending/applied/verified/reverted/blocked state, changed files, verification hint, rollback hint, truth status, and next action.
|
|
218
218
|
- Release report JSON: `yam release report --json` summarizes typecheck, forbidden-name scan, package boundary, registry status, CLI smoke, dist freshness, diagnostics, and final truth status.
|
|
219
|
-
- Loop report JSON: `yam loop report --json` records a read-only
|
|
219
|
+
- Loop report JSON: `yam loop report --json` records a read-only handoff artifact: intent, stages, evidence, blockers, next action, fix-first items, remaining tasks, recommended direction, implementation notes, blocked-by notes, owner route, tool intent, truth status, and study note.
|
|
220
220
|
- Study note: `yam.study-note.v1` keeps short non-specialist explanations for what code was failing, what role it plays, how the symptom showed up, what changed, and why it matters. Missing details stay in `limits` instead of being guessed.
|
|
221
221
|
- Publish blocker evidence: release reports classify common npm auth, permission, OTP, immutable-version, cache, registry, and tarball failures into safe next actions.
|
|
222
222
|
- Publish readiness evidence: release reports run read-only registry/auth/version probes, redact account/token details, and keep npm publish outside the report.
|
package/dist/bin/yam.js
CHANGED
|
@@ -1970,16 +1970,16 @@ async function loop(args = []) {
|
|
|
1970
1970
|
function loopUsage() {
|
|
1971
1971
|
console.log(`yam loop
|
|
1972
1972
|
|
|
1973
|
-
Read-only loop artifact helpers. A loop report records intent, stages, evidence, blockers, next action, and a short study note. It does not run agents, start processes, publish packages, or write files.
|
|
1973
|
+
Read-only loop artifact helpers. A loop report records intent, stages, evidence, blockers, next action, handoff fields, and a short study note. It does not run agents, start processes, publish packages, or write files.
|
|
1974
1974
|
|
|
1975
1975
|
Usage:
|
|
1976
|
-
yam loop report [--route route] [--intent text] [--loop-kind harness|release|ueye|scout|deep|mission] [--stage id:status:note] [--evidence text] [--blocked text] [--remaining-task text] [--truth status] [--intent-label read_only|write|destructive|runtime|visual|publish] [--issue-code text] [--issue-role text] [--issue-symptom text] [--changed-code text] [--changed-role text] [--change-summary text] [--why-important text] [--learning-note text] [--json]
|
|
1976
|
+
yam loop report [--route route] [--intent text] [--loop-kind harness|release|ueye|scout|deep|mission] [--stage id:status:note] [--evidence text] [--blocked text] [--fix-first-item text] [--remaining-task text] [--recommended-direction text] [--implementation-note text] [--why-this-next text] [--blocked-by text] [--owner-route route] [--truth status] [--intent-label read_only|write|destructive|runtime|visual|publish] [--issue-code text] [--issue-role text] [--issue-symptom text] [--changed-code text] [--changed-role text] [--change-summary text] [--why-important text] [--learning-note text] [--json]
|
|
1977
1977
|
`);
|
|
1978
1978
|
}
|
|
1979
1979
|
async function loopReport(args = []) {
|
|
1980
1980
|
if (args[0] === 'help' || args[0] === '--help' || args[0] === '-h')
|
|
1981
1981
|
return loopUsage();
|
|
1982
|
-
const flags = parseSimpleFlags(args, new Set(['route', 'intent', 'loop-kind', 'stage', 'evidence', 'blocked', 'blocker', 'next-action', 'remaining-task', 'truth', 'intent-label', 'tool-intent', 'issue-code', 'issue-role', 'issue-symptom', 'changed-code', 'changed-role', 'change-summary', 'why-important', 'learning-note', 'json']));
|
|
1982
|
+
const flags = parseSimpleFlags(args, new Set(['route', 'intent', 'loop-kind', 'stage', 'evidence', 'blocked', 'blocker', 'next-action', 'fix-first-item', 'remaining-task', 'recommended-direction', 'direction', 'implementation-note', 'why-this-next', 'blocked-by', 'owner-route', 'truth', 'intent-label', 'tool-intent', 'issue-code', 'issue-role', 'issue-symptom', 'changed-code', 'changed-role', 'change-summary', 'why-important', 'learning-note', 'json']));
|
|
1983
1983
|
const blockers = [...arrayFlag(flags.blocked), ...arrayFlag(flags.blocker)];
|
|
1984
1984
|
const report = buildLoopReport({
|
|
1985
1985
|
route: normalizeRoute(flags.route) || String(flags.route || ''),
|
|
@@ -1991,7 +1991,13 @@ async function loopReport(args = []) {
|
|
|
1991
1991
|
truth_status: isTruthStatus(flags.truth) ? flags.truth : undefined,
|
|
1992
1992
|
intent_label: normalizeToolIntent(flags.intent_label || flags.tool_intent || 'read_only'),
|
|
1993
1993
|
next_action: String(flags.next_action || ''),
|
|
1994
|
+
fix_first_items: arrayFlag(flags.fix_first_item),
|
|
1994
1995
|
remaining_tasks: arrayFlag(flags.remaining_task),
|
|
1996
|
+
recommended_direction: String(flags.recommended_direction || flags.direction || ''),
|
|
1997
|
+
implementation_notes: arrayFlag(flags.implementation_note),
|
|
1998
|
+
why_this_next: String(flags.why_this_next || ''),
|
|
1999
|
+
blocked_by: arrayFlag(flags.blocked_by),
|
|
2000
|
+
owner_route: String(flags.owner_route || flags.route || ''),
|
|
1995
2001
|
issue_code: String(flags.issue_code || ''),
|
|
1996
2002
|
issue_role: String(flags.issue_role || ''),
|
|
1997
2003
|
issue_symptom: String(flags.issue_symptom || ''),
|
|
@@ -161,7 +161,13 @@ export interface LoopReport {
|
|
|
161
161
|
intent_label: ToolIntent;
|
|
162
162
|
tool_intent: ToolIntent;
|
|
163
163
|
next_action: string;
|
|
164
|
+
fix_first_items: string[];
|
|
164
165
|
remaining_tasks: string[];
|
|
166
|
+
recommended_direction: string;
|
|
167
|
+
implementation_notes: string[];
|
|
168
|
+
why_this_next: string;
|
|
169
|
+
blocked_by: string[];
|
|
170
|
+
owner_route: string;
|
|
165
171
|
study_note: StudyNote;
|
|
166
172
|
}
|
|
167
173
|
export interface UeyeRunReport {
|
package/dist/lib/trust-kernel.js
CHANGED
|
@@ -259,7 +259,13 @@ export function buildLoopReport(input = {}) {
|
|
|
259
259
|
intent_label: intentLabel,
|
|
260
260
|
tool_intent: intentLabel,
|
|
261
261
|
next_action: shortText(input.next_action || (blockers[0] ? 'resolve the blocker before claiming this loop complete' : 'record the next smallest useful action')),
|
|
262
|
+
fix_first_items: asList(input.fix_first_items || input.fix_first_item),
|
|
262
263
|
remaining_tasks: asList(input.remaining_tasks || input.remaining_task),
|
|
264
|
+
recommended_direction: shortText(input.recommended_direction || input.direction),
|
|
265
|
+
implementation_notes: asList(input.implementation_notes || input.implementation_note),
|
|
266
|
+
why_this_next: shortText(input.why_this_next),
|
|
267
|
+
blocked_by: asList(input.blocked_by),
|
|
268
|
+
owner_route: normalizeOwnerRoute(input.owner_route || input.route),
|
|
263
269
|
study_note: studyNote
|
|
264
270
|
};
|
|
265
271
|
}
|
|
@@ -388,6 +394,12 @@ function normalizeToolIntentLabel(value = '') {
|
|
|
388
394
|
return text;
|
|
389
395
|
return 'read_only';
|
|
390
396
|
}
|
|
397
|
+
function normalizeOwnerRoute(value = '') {
|
|
398
|
+
const text = String(value || '').trim().replace(/^\$/, '').replace(/^yam-/, '');
|
|
399
|
+
if (['quick', 'ueye', 'question', 'scout', 'deep', 'mission'].includes(text))
|
|
400
|
+
return `$${text}`;
|
|
401
|
+
return text ? shortText(text, 80) : '';
|
|
402
|
+
}
|
|
391
403
|
function shortText(value = '', limit = 240) {
|
|
392
404
|
const text = String(value || '').trim().replace(/\s+/g, ' ');
|
|
393
405
|
if (text.length <= limit)
|
package/package.json
CHANGED
|
@@ -16,8 +16,10 @@ Include these when they are useful and keep them short:
|
|
|
16
16
|
- Context pressure or cleanup findings when they could affect the next run.
|
|
17
17
|
- Publish blocker evidence when npm/release work fails.
|
|
18
18
|
- Structured diagnostic next action, when a check found a concrete next step.
|
|
19
|
+
- Study Note for implementation work: what code was wrong, what role it has, how the symptom showed up, what changed, and why it matters in short non-specialist language.
|
|
19
20
|
- Remaining tasks.
|
|
20
21
|
- Fix-first items before planned tasks.
|
|
22
|
+
- Recommended direction and why that next step matters when the handoff would otherwise be ambiguous.
|
|
21
23
|
|
|
22
24
|
## Anti-False-Completion Check
|
|
23
25
|
|
|
@@ -54,6 +56,30 @@ Examples:
|
|
|
54
56
|
- Active hooks or instruction files that conflict with the route.
|
|
55
57
|
- Warnings that keep obscuring real problems.
|
|
56
58
|
|
|
59
|
+
## Study Note
|
|
60
|
+
|
|
61
|
+
Use this when implementation changed code or fixed an error and the user would benefit from learning:
|
|
62
|
+
|
|
63
|
+
- What code had the issue.
|
|
64
|
+
- What role that code plays.
|
|
65
|
+
- How the issue showed up.
|
|
66
|
+
- What changed.
|
|
67
|
+
- Why the change matters.
|
|
68
|
+
|
|
69
|
+
Keep it short. If the information is not known, say so instead of inventing it.
|
|
70
|
+
|
|
71
|
+
## Handoff Direction
|
|
72
|
+
|
|
73
|
+
Use this when the next run needs a clear starting point:
|
|
74
|
+
|
|
75
|
+
- Fix-first items before planned work.
|
|
76
|
+
- Remaining tasks that still belong to the request or roadmap.
|
|
77
|
+
- Recommended direction.
|
|
78
|
+
- Why this next step matters.
|
|
79
|
+
- What is blocked, and by what.
|
|
80
|
+
|
|
81
|
+
`yam loop report` can record this as a handoff artifact with `fix_first_items`, `remaining_tasks`, `recommended_direction`, `implementation_notes`, `why_this_next`, `blocked_by`, and `owner_route`.
|
|
82
|
+
|
|
57
83
|
## Route Weight
|
|
58
84
|
|
|
59
85
|
For `$quick`, one short paragraph or a compact verification matrix is enough.
|
package/skills/deep/SKILL.md
CHANGED
|
@@ -70,8 +70,8 @@ Deep verification may include:
|
|
|
70
70
|
Include:
|
|
71
71
|
|
|
72
72
|
- What was changed or reviewed.
|
|
73
|
+
- Study Note for implementation work: what code was wrong, what role it has, how the symptom showed up, what changed, and why it matters in short non-specialist language.
|
|
73
74
|
- Evidence gathered.
|
|
74
75
|
- Truth status.
|
|
75
76
|
- Blockers or remaining risk.
|
|
76
|
-
-
|
|
77
|
-
- Fix-first items before planned tasks.
|
|
77
|
+
- Handoff: fix-first items, remaining tasks, recommended direction, and why that next step matters.
|
package/skills/mission/SKILL.md
CHANGED
|
@@ -102,8 +102,8 @@ Report:
|
|
|
102
102
|
|
|
103
103
|
- What the mission changed.
|
|
104
104
|
- Role/cross-verification summary.
|
|
105
|
+
- Study Note for implementation lanes: what code was wrong, what role it has, how the symptom showed up, what changed, and why it matters in short non-specialist language.
|
|
105
106
|
- Evidence gathered.
|
|
106
107
|
- Truth status.
|
|
107
108
|
- Cleanup status.
|
|
108
|
-
-
|
|
109
|
-
- Fix-first items before planned tasks.
|
|
109
|
+
- Handoff: fix-first items, remaining tasks, recommended direction, and why that next step matters.
|
package/skills/quick/SKILL.md
CHANGED
|
@@ -76,6 +76,7 @@ Use `references/token-budget-reporter.md` when a run needs measured budget feedb
|
|
|
76
76
|
Keep it compact:
|
|
77
77
|
|
|
78
78
|
- What changed or what the scan found.
|
|
79
|
+
- Study Note when useful: what code was wrong, what role it has, how the symptom showed up, what changed, and why it matters in short non-specialist language.
|
|
79
80
|
- What was checked.
|
|
80
81
|
- What was skipped, blocked, or still risky.
|
|
81
|
-
-
|
|
82
|
+
- Handoff when useful: fix-first items, remaining tasks, recommended direction, and why that next step matters.
|
package/skills/ueye/SKILL.md
CHANGED
|
@@ -170,5 +170,6 @@ Report:
|
|
|
170
170
|
- Review continuity/comparison result when this continues a prior Ueye run.
|
|
171
171
|
- P0-P3 issues or confirmation that no blockers were found.
|
|
172
172
|
- States/viewports checked.
|
|
173
|
+
- Study Note when UI implementation changed code: what UI code changed, what role it has, how the visible symptom appeared, and why the change matters in short non-specialist language.
|
|
173
174
|
- Truth status and visual verification cap.
|
|
174
|
-
-
|
|
175
|
+
- Handoff when useful: fix-first visual issues, remaining tasks, recommended direction, and why that next step matters.
|
package/src/bin/yam.ts
CHANGED
|
@@ -1968,16 +1968,16 @@ async function loop(args = []) {
|
|
|
1968
1968
|
function loopUsage() {
|
|
1969
1969
|
console.log(`yam loop
|
|
1970
1970
|
|
|
1971
|
-
Read-only loop artifact helpers. A loop report records intent, stages, evidence, blockers, next action, and a short study note. It does not run agents, start processes, publish packages, or write files.
|
|
1971
|
+
Read-only loop artifact helpers. A loop report records intent, stages, evidence, blockers, next action, handoff fields, and a short study note. It does not run agents, start processes, publish packages, or write files.
|
|
1972
1972
|
|
|
1973
1973
|
Usage:
|
|
1974
|
-
yam loop report [--route route] [--intent text] [--loop-kind harness|release|ueye|scout|deep|mission] [--stage id:status:note] [--evidence text] [--blocked text] [--remaining-task text] [--truth status] [--intent-label read_only|write|destructive|runtime|visual|publish] [--issue-code text] [--issue-role text] [--issue-symptom text] [--changed-code text] [--changed-role text] [--change-summary text] [--why-important text] [--learning-note text] [--json]
|
|
1974
|
+
yam loop report [--route route] [--intent text] [--loop-kind harness|release|ueye|scout|deep|mission] [--stage id:status:note] [--evidence text] [--blocked text] [--fix-first-item text] [--remaining-task text] [--recommended-direction text] [--implementation-note text] [--why-this-next text] [--blocked-by text] [--owner-route route] [--truth status] [--intent-label read_only|write|destructive|runtime|visual|publish] [--issue-code text] [--issue-role text] [--issue-symptom text] [--changed-code text] [--changed-role text] [--change-summary text] [--why-important text] [--learning-note text] [--json]
|
|
1975
1975
|
`);
|
|
1976
1976
|
}
|
|
1977
1977
|
|
|
1978
1978
|
async function loopReport(args = []) {
|
|
1979
1979
|
if (args[0] === 'help' || args[0] === '--help' || args[0] === '-h') return loopUsage();
|
|
1980
|
-
const flags = parseSimpleFlags(args, new Set(['route', 'intent', 'loop-kind', 'stage', 'evidence', 'blocked', 'blocker', 'next-action', 'remaining-task', 'truth', 'intent-label', 'tool-intent', 'issue-code', 'issue-role', 'issue-symptom', 'changed-code', 'changed-role', 'change-summary', 'why-important', 'learning-note', 'json']));
|
|
1980
|
+
const flags = parseSimpleFlags(args, new Set(['route', 'intent', 'loop-kind', 'stage', 'evidence', 'blocked', 'blocker', 'next-action', 'fix-first-item', 'remaining-task', 'recommended-direction', 'direction', 'implementation-note', 'why-this-next', 'blocked-by', 'owner-route', 'truth', 'intent-label', 'tool-intent', 'issue-code', 'issue-role', 'issue-symptom', 'changed-code', 'changed-role', 'change-summary', 'why-important', 'learning-note', 'json']));
|
|
1981
1981
|
const blockers = [...arrayFlag(flags.blocked), ...arrayFlag(flags.blocker)];
|
|
1982
1982
|
const report = buildLoopReport({
|
|
1983
1983
|
route: normalizeRoute(flags.route) || String(flags.route || ''),
|
|
@@ -1989,7 +1989,13 @@ async function loopReport(args = []) {
|
|
|
1989
1989
|
truth_status: isTruthStatus(flags.truth) ? flags.truth : undefined,
|
|
1990
1990
|
intent_label: normalizeToolIntent(flags.intent_label || flags.tool_intent || 'read_only'),
|
|
1991
1991
|
next_action: String(flags.next_action || ''),
|
|
1992
|
+
fix_first_items: arrayFlag(flags.fix_first_item),
|
|
1992
1993
|
remaining_tasks: arrayFlag(flags.remaining_task),
|
|
1994
|
+
recommended_direction: String(flags.recommended_direction || flags.direction || ''),
|
|
1995
|
+
implementation_notes: arrayFlag(flags.implementation_note),
|
|
1996
|
+
why_this_next: String(flags.why_this_next || ''),
|
|
1997
|
+
blocked_by: arrayFlag(flags.blocked_by),
|
|
1998
|
+
owner_route: String(flags.owner_route || flags.route || ''),
|
|
1993
1999
|
issue_code: String(flags.issue_code || ''),
|
|
1994
2000
|
issue_role: String(flags.issue_role || ''),
|
|
1995
2001
|
issue_symptom: String(flags.issue_symptom || ''),
|
package/src/lib/trust-kernel.ts
CHANGED
|
@@ -189,7 +189,13 @@ export interface LoopReport {
|
|
|
189
189
|
intent_label: ToolIntent;
|
|
190
190
|
tool_intent: ToolIntent;
|
|
191
191
|
next_action: string;
|
|
192
|
+
fix_first_items: string[];
|
|
192
193
|
remaining_tasks: string[];
|
|
194
|
+
recommended_direction: string;
|
|
195
|
+
implementation_notes: string[];
|
|
196
|
+
why_this_next: string;
|
|
197
|
+
blocked_by: string[];
|
|
198
|
+
owner_route: string;
|
|
193
199
|
study_note: StudyNote;
|
|
194
200
|
}
|
|
195
201
|
|
|
@@ -557,7 +563,13 @@ export function buildLoopReport(input: Partial<LoopReport> & Record<string, unkn
|
|
|
557
563
|
intent_label: intentLabel,
|
|
558
564
|
tool_intent: intentLabel,
|
|
559
565
|
next_action: shortText(input.next_action || (blockers[0] ? 'resolve the blocker before claiming this loop complete' : 'record the next smallest useful action')),
|
|
566
|
+
fix_first_items: asList(input.fix_first_items || input.fix_first_item),
|
|
560
567
|
remaining_tasks: asList(input.remaining_tasks || input.remaining_task),
|
|
568
|
+
recommended_direction: shortText(input.recommended_direction || input.direction),
|
|
569
|
+
implementation_notes: asList(input.implementation_notes || input.implementation_note),
|
|
570
|
+
why_this_next: shortText(input.why_this_next),
|
|
571
|
+
blocked_by: asList(input.blocked_by),
|
|
572
|
+
owner_route: normalizeOwnerRoute(input.owner_route || input.route),
|
|
561
573
|
study_note: studyNote
|
|
562
574
|
};
|
|
563
575
|
}
|
|
@@ -676,6 +688,12 @@ function normalizeToolIntentLabel(value: unknown = ''): ToolIntent {
|
|
|
676
688
|
return 'read_only';
|
|
677
689
|
}
|
|
678
690
|
|
|
691
|
+
function normalizeOwnerRoute(value: unknown = ''): string {
|
|
692
|
+
const text = String(value || '').trim().replace(/^\$/, '').replace(/^yam-/, '');
|
|
693
|
+
if (['quick', 'ueye', 'question', 'scout', 'deep', 'mission'].includes(text)) return `$${text}`;
|
|
694
|
+
return text ? shortText(text, 80) : '';
|
|
695
|
+
}
|
|
696
|
+
|
|
679
697
|
function shortText(value: unknown = '', limit = 240): string {
|
|
680
698
|
const text = String(value || '').trim().replace(/\s+/g, ' ');
|
|
681
699
|
if (text.length <= limit) return text;
|
package/yam.manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yam",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"principles": [
|
|
5
5
|
"Direction before execution.",
|
|
6
6
|
"Start fast.",
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"Token-aware by default.",
|
|
12
12
|
"Context-reuse first.",
|
|
13
13
|
"End with remaining tasks and fix-first items.",
|
|
14
|
-
"Explain what failed, what changed, and why it matters in short non-specialist language when useful."
|
|
14
|
+
"Explain what failed, what changed, and why it matters in short non-specialist language when useful.",
|
|
15
|
+
"Use handoff notes for fix-first items, remaining tasks, and recommended next direction when useful."
|
|
15
16
|
],
|
|
16
17
|
"defaultHooks": false,
|
|
17
18
|
"routes": [
|