yam-flow 2.6.0 → 2.8.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.
Files changed (46) hide show
  1. package/AGENTS.md +1 -0
  2. package/CHANGELOG.md +51 -0
  3. package/COMMANDS.md +72 -5
  4. package/README.md +49 -9
  5. package/ROADMAP.md +20 -7
  6. package/dist/bin/yam.js +616 -68
  7. package/dist/lib/external-updates.d.ts +9 -0
  8. package/dist/lib/external-updates.js +232 -4
  9. package/dist/lib/media-provider-receipt.d.ts +79 -0
  10. package/dist/lib/media-provider-receipt.js +498 -0
  11. package/dist/lib/next-step.d.ts +61 -0
  12. package/dist/lib/next-step.js +340 -0
  13. package/dist/lib/release-auth-readiness.d.ts +81 -0
  14. package/dist/lib/release-auth-readiness.js +106 -0
  15. package/dist/lib/release-registry-status.d.ts +18 -0
  16. package/dist/lib/release-registry-status.js +37 -0
  17. package/dist/lib/scout-receipt.d.ts +89 -0
  18. package/dist/lib/scout-receipt.js +542 -0
  19. package/dist/lib/skill-installation.d.ts +30 -0
  20. package/dist/lib/skill-installation.js +738 -110
  21. package/dist/lib/trust-kernel.d.ts +2 -0
  22. package/dist/lib/trust-kernel.js +21 -2
  23. package/dist/lib/verification-closure.d.ts +97 -0
  24. package/dist/lib/verification-closure.js +728 -0
  25. package/package.json +23 -3
  26. package/references/final-report.md +15 -1
  27. package/references/next-step.md +67 -0
  28. package/references/scout-wide-scan.md +16 -0
  29. package/references/study-note.md +4 -2
  30. package/references/tool-trust-layer.md +2 -0
  31. package/skills/deep/SKILL.md +2 -0
  32. package/skills/mission/SKILL.md +2 -0
  33. package/skills/quick/SKILL.md +1 -0
  34. package/skills/scout/SKILL.md +19 -9
  35. package/skills/ueye/SKILL.md +1 -0
  36. package/src/bin/yam.ts +615 -64
  37. package/src/lib/external-updates.ts +262 -4
  38. package/src/lib/media-provider-receipt.ts +548 -0
  39. package/src/lib/next-step.ts +397 -0
  40. package/src/lib/release-auth-readiness.ts +148 -0
  41. package/src/lib/release-registry-status.ts +55 -0
  42. package/src/lib/scout-receipt.ts +593 -0
  43. package/src/lib/skill-installation.ts +930 -108
  44. package/src/lib/trust-kernel.ts +25 -2
  45. package/src/lib/verification-closure.ts +738 -0
  46. package/yam.manifest.json +4 -3
@@ -1,4 +1,6 @@
1
1
  import { verifyStrictGateResult } from './gate-result.js';
2
+ import { buildNextStep } from './next-step.js';
3
+ import type { NextStepInput, NextStepReceipt } from './next-step.js';
2
4
 
3
5
  export const TRUTH_STATUSES = Object.freeze([
4
6
  'verified',
@@ -273,6 +275,7 @@ export interface LoopReport {
273
275
  side_effects: string[];
274
276
  avoidance_note: string;
275
277
  study_note: StudyNote;
278
+ next_step: NextStepReceipt | null;
276
279
  }
277
280
 
278
281
  export interface UeyeRunReport {
@@ -784,13 +787,32 @@ export function buildLoopReport(input: Partial<LoopReport> & Record<string, unkn
784
787
  const uncoveredRequirements = asList(input.uncovered_requirements || input.uncovered_requirement);
785
788
  const blockers = asList(input.blockers || input.blocked);
786
789
  const blockedBy = asList(input.blocked_by);
787
- const blockedKind = shortText(input.blocked_kind || (readinessState === 'blocked' ? 'readiness_blocked' : uncoveredRequirements.length ? 'requirement_uncovered' : blockers.length || blockedBy.length ? 'evidence_missing' : ''));
790
+ const requestedBlockedKind = shortText(input.blocked_kind);
788
791
  const failureCause = shortText(input.failure_cause);
789
792
  const recoveryHint = shortText(input.recovery_hint);
790
793
  const avoidanceNote = shortText(input.avoidance_note);
791
794
  const evidenceStamp = shortText(input.evidence_stamp || input.source_digest, 320);
792
795
  const sourceDigest = shortText(input.source_digest || input.evidence_stamp, 320);
793
796
  const hasBlockedStage = stages.some((stage) => stage.status === 'blocked' || stage.status === 'failed');
797
+ const nextStepSupplied = input.next_step !== undefined && input.next_step !== null;
798
+ const nextStep = nextStepSupplied ? buildNextStep(input.next_step as unknown as NextStepInput) : null;
799
+ const nextStepRequired = touchedFiles.length > 0;
800
+ const nextStepBlocked = (nextStepRequired && !nextStep)
801
+ || Boolean(nextStep && (!nextStep.contract_valid || nextStep.truth_status === 'blocked'));
802
+ if (nextStepBlocked) {
803
+ blockers.push(!nextStep
804
+ ? 'next_step_missing_for_changed_artifacts'
805
+ : `next_step_contract_blocked: ${nextStep.contract_errors[0] || nextStep.truth_status}`);
806
+ }
807
+ const blockedKind = shortText(requestedBlockedKind || (
808
+ readinessState === 'blocked'
809
+ ? 'readiness_blocked'
810
+ : uncoveredRequirements.length
811
+ ? 'requirement_uncovered'
812
+ : blockers.length || blockedBy.length
813
+ ? 'evidence_missing'
814
+ : ''
815
+ ));
794
816
  const hasBlockerSignal = Boolean(blockers.length || blockedBy.length || blockedKind || uncoveredRequirements.length || readinessState === 'blocked');
795
817
  const requestedTruth = isTruthStatus(input.truth_status) ? input.truth_status : '';
796
818
  const derivedTruth: TruthStatus = hasBlockerSignal || hasBlockedStage ? 'blocked'
@@ -844,7 +866,8 @@ export function buildLoopReport(input: Partial<LoopReport> & Record<string, unkn
844
866
  scope_owner: normalizeOwnerRoute(input.scope_owner || input.owner),
845
867
  side_effects: asList(input.side_effects || input.side_effect),
846
868
  avoidance_note: avoidanceNote,
847
- study_note: studyNote
869
+ study_note: studyNote,
870
+ next_step: nextStep
848
871
  };
849
872
  }
850
873