qfai 1.7.13 → 1.7.15

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 (74) hide show
  1. package/README.md +35 -8
  2. package/assets/init/.qfai/assistant/agents/frontend-engineer.md +2 -2
  3. package/assets/init/.qfai/assistant/agents/product-experience-architect.md +2 -2
  4. package/assets/init/.qfai/assistant/agents/product-surface-reviewer.md +1 -1
  5. package/assets/init/.qfai/assistant/instructions/agent-selection.md +2 -0
  6. package/assets/init/.qfai/assistant/instructions/shared-skill-delegation-baseline.md +88 -0
  7. package/assets/init/.qfai/assistant/instructions/shared-skill-operating-baseline.md +49 -0
  8. package/assets/init/.qfai/assistant/skills/qfai-atdd/SKILL.md +28 -88
  9. package/assets/init/.qfai/assistant/skills/qfai-configure/SKILL.md +50 -114
  10. package/assets/init/.qfai/assistant/skills/qfai-discussion/SKILL.md +137 -208
  11. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/design-md-brand-catalog.md +90 -0
  12. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/discussion-completion-matrix.md +26 -0
  13. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/discussion-coverage-checklist.md +20 -0
  14. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/example-mapping-guide.md +18 -0
  15. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/oq-and-deferred-rules.md +41 -0
  16. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/review-cycle-playbook.md +22 -0
  17. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/ui-bearing-playbook.md +50 -0
  18. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/ui_ux/platform_baselines.md +107 -0
  19. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/ui_ux/review_audit_playbook.md +104 -0
  20. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/ui_ux/trend_scan_playbook.md +76 -0
  21. package/assets/init/.qfai/assistant/skills/qfai-discussion/references/ui_ux_best_practices.md +143 -1005
  22. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/01_Context.md +9 -0
  23. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/03_Story-Workshop.md +1 -1
  24. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/04_Sources.md +83 -32
  25. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/14_Review-Request.md +7 -7
  26. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/prototyping.yaml +12 -4
  27. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/review/Rxx_reviewer.md +2 -2
  28. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/review/review_request.md +2 -2
  29. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/10_implementation_strategy.md +31 -13
  30. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/12_design_system.md +115 -0
  31. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/21_design_eval_trend_derived.md +86 -24
  32. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/23_design_eval_aggregate.md +12 -0
  33. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/40_screen_contracts.md +1 -1
  34. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/50_review_input_bundle.md +2 -0
  35. package/assets/init/.qfai/assistant/skills/qfai-implement/SKILL.md +27 -27
  36. package/assets/init/.qfai/assistant/skills/qfai-prototyping/SKILL.md +145 -155
  37. package/assets/init/.qfai/assistant/skills/qfai-sdd/SKILL.md +118 -355
  38. package/assets/init/.qfai/assistant/skills/qfai-sdd/references/review-cycle-playbook.md +30 -0
  39. package/assets/init/.qfai/assistant/skills/qfai-sdd/references/sdd-execution-playbook.md +29 -0
  40. package/assets/init/.qfai/assistant/skills/qfai-sdd/references/sdd-phase-checklists.md +37 -0
  41. package/assets/init/.qfai/assistant/skills/qfai-sdd/references/sdd-quality-gate.md +32 -0
  42. package/assets/init/.qfai/assistant/skills/qfai-sdd/references/spec-traceability-rules.md +33 -0
  43. package/assets/init/.qfai/assistant/skills/qfai-verify/SKILL.md +50 -115
  44. package/assets/init/.qfai/assistant/steering/agent-catalog.yml +1 -1
  45. package/assets/init/.qfai/assistant/steering/agent-routing.yml +20 -8
  46. package/assets/init/.qfai/assistant/steering/manifest.md +4 -7
  47. package/assets/init/.qfai/assistant/steering/product.md +6 -6
  48. package/assets/init/.qfai/assistant/steering/review-profiles.yml +3 -0
  49. package/assets/init/.qfai/assistant/steering/ui-definition-protocol.md +7 -7
  50. package/assets/init/.qfai/contracts/README.md +15 -8
  51. package/assets/init/.qfai/contracts/ui/README.md +24 -26
  52. package/assets/init/.qfai/discussion/README.md +35 -32
  53. package/assets/init/.qfai/evidence/README.md +65 -181
  54. package/assets/init/.qfai/evidence/calibration.yaml +26 -0
  55. package/assets/init/.qfai/review/README.md +56 -11
  56. package/assets/init/.qfai/specs/README.md +2 -2
  57. package/assets/init/root/qfai.config.yaml +5 -6
  58. package/assets/scripts/capture-screenshots.js +128 -0
  59. package/assets/uix-rev/comparison-review.md +3 -15
  60. package/assets/uix-rev/contracts-review.md +5 -2
  61. package/assets/uix-rev/scoring-review.md +10 -2
  62. package/assets/uix-rev/strategy-review.md +11 -7
  63. package/dist/cli/index.cjs +8532 -4204
  64. package/dist/cli/index.cjs.map +1 -1
  65. package/dist/cli/index.mjs +8599 -4271
  66. package/dist/cli/index.mjs.map +1 -1
  67. package/dist/index.cjs +9808 -5532
  68. package/dist/index.cjs.map +1 -1
  69. package/dist/index.d.cts +467 -277
  70. package/dist/index.d.ts +467 -277
  71. package/dist/index.mjs +8909 -4647
  72. package/dist/index.mjs.map +1 -1
  73. package/package.json +1 -1
  74. package/assets/uix-rev/migration-review.md +0 -17
package/dist/index.d.ts CHANGED
@@ -14,7 +14,7 @@ type TestFileScan = {
14
14
  };
15
15
 
16
16
  type IssueSeverity = "info" | "warning" | "error";
17
- type IssueCategory = "canonical" | "compatibility" | "change";
17
+ type IssueCategory = "canonical" | "change";
18
18
  type IssueLocation = {
19
19
  line: number;
20
20
  column?: number;
@@ -142,9 +142,6 @@ type QfaiUiuxAuditConfig = {
142
142
  maxRawTokenLiteralWarnings?: number;
143
143
  maxDuplicateFindingsPerRule?: number;
144
144
  };
145
- type QfaiUiuxMigrationConfig = {
146
- strict?: boolean;
147
- };
148
145
  type QfaiUiuxConfig = {
149
146
  platform?: string;
150
147
  designTokensDir?: string;
@@ -153,20 +150,11 @@ type QfaiUiuxConfig = {
153
150
  requireResearchSummary?: boolean;
154
151
  competitive_refs_min?: number;
155
152
  warning_as_error_override?: string[];
156
- phase1ReleaseDate?: string;
157
153
  renderEvidence?: RenderEvidenceConfig;
158
154
  audit?: QfaiUiuxAuditConfig;
159
- migration?: QfaiUiuxMigrationConfig;
160
155
  };
161
156
  type QfaiPrototypingCalibrationConfig = {
162
157
  packPath?: string;
163
- thresholds?: {
164
- accept?: number;
165
- refine?: number;
166
- };
167
- maxIterations?: number;
168
- plateauDelta?: number;
169
- plateauLookback?: number;
170
158
  };
171
159
  type QfaiPrototypingConfig = {
172
160
  calibration?: QfaiPrototypingCalibrationConfig;
@@ -174,7 +162,6 @@ type QfaiPrototypingConfig = {
174
162
  targetUrl?: string | null;
175
163
  browserProvider?: string;
176
164
  renderProvider?: string;
177
- reviewer?: string;
178
165
  };
179
166
  };
180
167
  type QfaiConfig = {
@@ -322,12 +309,13 @@ declare function extractAcSpecNumber(acId: string): string | null;
322
309
  declare function extractCaseSpecNumber(caseId: string): string | null;
323
310
  declare function extractScSpecNumber(scId: string): string | null;
324
311
 
325
- type PrototypingMode = "low-cost" | "standard" | "full-harness";
312
+ declare const CANONICAL_PROTOTYPING_SURFACES: readonly ["web", "mobile", "desktop", "cli", "mixed"];
313
+ type CanonicalPrototypingSurface = (typeof CANONICAL_PROTOTYPING_SURFACES)[number];
314
+
315
+ type PrototypingMode = "full-harness";
326
316
  type ModeSelectionSource = "explicit-request" | "discussion-recommendation" | "system-default";
327
- type PrototypingSurface = "web" | "mobile" | "desktop" | "cli" | "mixed" | "non-ui";
328
- /** @deprecated Legacy surface values — use canonical PrototypingSurface instead */
329
- type LegacyPrototypingSurface = "web-ui" | "mobile-ui" | "desktop-ui";
330
- type DiscussionRecommendationSourceSchema = "canonical-namespaced" | "legacy-top-level";
317
+ type PrototypingSurface = CanonicalPrototypingSurface;
318
+ type DiscussionRecommendationSourceSchema = "canonical-namespaced";
331
319
  /**
332
320
  * Canonical validated recommendation — all 4 fields required.
333
321
  * Parser output uses this same type; fields are always populated
@@ -363,6 +351,9 @@ type PrototypingObligations = {
363
351
  requireRenderBundle: boolean;
364
352
  requireBrowserQaBundle: boolean;
365
353
  requireFullHarness: boolean;
354
+ validCombination: boolean;
355
+ invalidReasonCode?: string | undefined;
356
+ invalidReason?: string | undefined;
366
357
  };
367
358
  type ResolveModeInput = {
368
359
  requested?: PrototypingMode | undefined;
@@ -376,17 +367,22 @@ type PrototypingExecutionConfig = {
376
367
  };
377
368
  type UiFidelityStatus = {
378
369
  required: boolean;
379
- status: "completed" | "failed" | "n/a";
370
+ status: "completed" | "failed" | "insufficient-evidence" | "n/a";
380
371
  reason?: string;
381
372
  };
382
373
 
374
+ declare const FULL_HARNESS_INVALID_COMBINATION_MESSAGE = "packages/qfai v1.7.15 \u3067\u306F prototyping \u306F full-harness / UI-only \u3067\u3059\u3002";
375
+ declare const UNSUPPORTED_PROTOTYPING_MODE_REASON_CODE = "unsupported_prototyping_mode";
376
+ declare const UNSUPPORTED_PROTOTYPING_MODE_MESSAGE = "packages/qfai v1.7.15 \u3067\u306F prototyping \u306F full-harness \u306E\u307F\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002";
377
+ declare const NON_UI_PROTOTYPING_SURFACE_REASON_CODE = "unsupported_non_ui_prototyping_surface";
378
+ declare const NON_UI_PROTOTYPING_SURFACE_MESSAGE = "packages/qfai v1.7.15 \u3067\u306F prototyping \u306F UI-bearing surface \u306E\u307F\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002";
383
379
  type ParseDiscussionResult = {
384
380
  recommendation: DiscussionModeRecommendation | null;
385
381
  warnings: string[];
386
382
  };
387
383
  /**
388
384
  * Parse a prototyping.yaml file from a discussion pack.
389
- * Supports both canonical namespaced (`prototyping.*`) and legacy top-level schema.
385
+ * Supports only the canonical namespaced (`prototyping.*`) schema.
390
386
  */
391
387
  declare function parseDiscussionModeRecommendation(filePath: string): Promise<DiscussionModeRecommendation | null>;
392
388
  declare function parseDiscussionModeRecommendationWithWarnings(filePath: string): Promise<ParseDiscussionResult>;
@@ -409,18 +405,13 @@ declare function inferSurfaceFromRecommendationAndEvidence(input: {
409
405
  hasBrowserQaBundle?: boolean | undefined;
410
406
  hasUiRoutes?: boolean | undefined;
411
407
  hasRuntimeGateUi?: boolean | undefined;
412
- }): PrototypingSurface;
408
+ }): PrototypingSurface | null;
413
409
  declare function derivePrototypingObligations(input: {
414
410
  surface: PrototypingSurface;
415
- effectiveMode: PrototypingMode;
411
+ effectiveMode: string;
416
412
  }): PrototypingObligations;
417
413
  declare function isValidPrototypingMode(value: unknown): value is PrototypingMode;
418
414
  declare function isValidPrototypingSurface(value: unknown): value is PrototypingSurface;
419
- /**
420
- * Normalize a surface value: map legacy values to canonical equivalents.
421
- */
422
- declare function normalizePrototypingSurface(value: string): PrototypingSurface;
423
- declare function isUiBearingSurface(surface: PrototypingSurface): boolean;
424
415
  declare function normalizeAllowedModes(modes?: string[]): PrototypingMode[];
425
416
 
426
417
  /**
@@ -463,87 +454,47 @@ type RenderRunnerResult = {
463
454
  };
464
455
  };
465
456
 
466
- /**
467
- * Critique adapter types for external critique providers.
468
- *
469
- * Provider interface is minimal (BR-0029-0001). Each provider implements
470
- * `request()` and the adapter wraps it with fail-open semantics (NFR-0002).
471
- */
472
- type CritiqueInput = {
473
- output: string;
474
- context: string;
475
- iteration: number;
476
- };
477
- type CritiqueResponse = {
478
- scores: Record<string, number>;
479
- dimensions: string[];
480
- suggestions: string[];
481
- };
482
- type CritiqueProvider = {
483
- name: string;
484
- request: (input: CritiqueInput, signal?: AbortSignal) => Promise<CritiqueResponse>;
485
- };
486
- type CritiqueResult = {
487
- failOpen: false;
488
- response: CritiqueResponse;
489
- } | {
490
- failOpen: true;
491
- response: undefined;
492
- reason: string;
493
- };
494
-
495
- /**
496
- * Critique adapter with fail-open semantics (NFR-0002).
497
- *
498
- * Wraps external critique providers with schema validation,
499
- * timeout enforcement, and fail-open on any error.
500
- */
501
-
502
- declare class CritiqueAdapter {
503
- private provider;
504
- private timeoutMs;
505
- constructor(options?: {
506
- timeoutMs?: number;
507
- });
508
- register(provider: CritiqueProvider): void;
509
- requestCritique(input: CritiqueInput): Promise<CritiqueResult>;
510
- }
511
-
512
- type SurfaceType = "web" | "mobile" | "desktop" | "cli" | "mixed" | "non-ui";
513
- /** Surfaces that bear a user interface — canonical truth for UI-bearing detection. */
514
- declare const UI_BEARING_SURFACES: Set<SurfaceType>;
515
- /** Surfaces that do NOT bear a user interface. */
516
- declare const NON_UI_SURFACES: Set<SurfaceType>;
517
- /**
518
- * Synchronous check: given a SurfaceType value, returns true if UI-bearing.
519
- * Canonical shared helper for classification validator and prototyping mode.
520
- */
521
- declare function isUiBearingSurfaceType(surface: SurfaceType): boolean;
522
-
523
- /**
524
- * Browser QA canonical types — WS-B
525
- *
526
- * Defines the 4-phase execution model with truthful status reporting.
527
- */
457
+ type SurfaceType = CanonicalPrototypingSurface | "non-ui";
458
+ declare const DISCUSSION_UI_BEARING_SURFACES: Set<SurfaceType>;
459
+ declare const DISCUSSION_NON_UI_SURFACES: Set<SurfaceType>;
460
+ declare const VISUAL_BROWSER_SURFACES: Set<SurfaceType>;
461
+ declare function isDiscussionUiBearingSurfaceType(surface: SurfaceType): boolean;
462
+ declare function isNonUiDiscussionSurface(surface: SurfaceType): boolean;
463
+ declare function requiresVisualBrowserEvidence(surface: SurfaceType): boolean;
528
464
 
529
465
  type BrowserQaPhase = "smoke" | "interaction" | "visual" | "accessibility";
530
466
  declare const BROWSER_QA_PHASES: readonly BrowserQaPhase[];
531
- type BrowserQaPhaseStatus = "executed" | "skipped" | "failed";
532
- type BrowserQaFindingSeverity = "info" | "warning" | "error";
533
- type BrowserQaFinding = {
467
+ type BrowserQaPhaseStatus = "passed" | "executed" | "failed" | "skipped";
468
+ type BrowserQaFindingSeverity = "info" | "warn" | "warning" | "error";
469
+ interface BrowserQaFinding {
534
470
  phase: BrowserQaPhase;
535
- route?: string;
536
- selector?: string;
537
- target?: string;
538
471
  severity: BrowserQaFindingSeverity;
539
- message: string;
472
+ summary: string;
473
+ detail: string;
474
+ screen_id?: string;
475
+ selector?: string;
476
+ evidence_refs: string[];
477
+ repair_suggestions: string[];
478
+ category?: BrowserQaPhase;
479
+ message?: string;
480
+ route?: string;
540
481
  repair_hint?: string;
482
+ }
483
+ type BrowserQaScreenContractRef = {
484
+ screen_id: string;
485
+ route?: string;
486
+ primary_tasks?: string[];
541
487
  };
542
488
  type BrowserQaPhaseResult = {
543
489
  phase: BrowserQaPhase;
544
490
  status: BrowserQaPhaseStatus;
545
491
  findings: BrowserQaFinding[];
492
+ repair_suggestions: string[];
493
+ evidence_refs: string[];
494
+ checks_performed: string[];
546
495
  skippedReason?: string;
496
+ screen_id?: string;
497
+ route?: string;
547
498
  };
548
499
  type BrowserQaInput = {
549
500
  htmlContent?: string;
@@ -552,19 +503,24 @@ type BrowserQaInput = {
552
503
  surface: SurfaceType;
553
504
  required?: boolean;
554
505
  executionSource?: "html" | "url" | "none";
506
+ screenContracts?: BrowserQaScreenContractRef[];
555
507
  };
556
508
  type BrowserQaRunResult = {
557
509
  phases: BrowserQaPhaseResult[];
558
510
  provider: string;
559
511
  timestamp: string;
560
512
  };
561
- type BrowserQaSummary = {
513
+ type BrowserQaSummary$1 = {
562
514
  providerId: string;
563
515
  phases: Record<BrowserQaPhase, {
564
516
  status: BrowserQaPhaseStatus;
565
517
  findingsCount: number;
518
+ checksCount: number;
519
+ passed?: number;
520
+ failed?: number;
566
521
  }>;
567
522
  totalFindings: number;
523
+ totalRepairs: number;
568
524
  skippedReasons: string[];
569
525
  };
570
526
  interface BrowserQaProvider {
@@ -583,11 +539,11 @@ interface BrowserQaProvider {
583
539
  * absence is a valid state with fail-open semantics.
584
540
  *
585
541
  * WS-B: BrowserQaProvider is the canonical interface for 4-phase Browser QA.
586
- * BrowserProvider is the legacy render-capture provider interface.
542
+ * BrowserProvider defines the browser QA and capture provider interface.
587
543
  */
588
544
 
589
545
  type ProviderCapability = "screenshot" | "viewport" | "dom" | "interaction" | "visual" | "accessibility";
590
- /** Legacy render-capture provider. */
546
+ /** Browser QA and capture provider. */
591
547
  type BrowserProvider = {
592
548
  name: string;
593
549
  capabilities: ProviderCapability[];
@@ -637,10 +593,11 @@ type PrototypingExecutionRequest = {
637
593
  providerRegistry?: ProviderRegistry;
638
594
  renderAdapter?: RenderCaptureAdapter;
639
595
  browserQaProviderId?: string;
640
- critiqueAdapter?: CritiqueAdapter;
641
596
  renderProviderId?: string;
642
597
  targetUrl?: string;
643
598
  reviewer?: string;
599
+ changeSummary?: string[];
600
+ limitations?: string[];
644
601
  };
645
602
  type PrototypingExecutionResult = {
646
603
  mode: PrototypingMode;
@@ -890,13 +847,24 @@ type ReportPrototypingSummary = {
890
847
  };
891
848
  fullHarness?: {
892
849
  enabled: boolean;
893
- available?: boolean;
894
850
  runId?: string;
851
+ calibrationRef?: {
852
+ configPath: string;
853
+ packPath: string;
854
+ packVersion: string;
855
+ };
895
856
  iterationCount?: number;
896
857
  bestIteration?: number;
858
+ status?: string;
897
859
  terminationReason?: string;
860
+ reviewerId?: string;
898
861
  reviewerSignoffStatus?: string;
899
862
  scoringTraceCount?: number;
863
+ latestWeightedTotal?: number;
864
+ latestL1Total?: number;
865
+ latestL2Total?: number;
866
+ limitations?: string[];
867
+ reviewerLogsCount?: number;
900
868
  };
901
869
  render?: {
902
870
  status?: string;
@@ -917,8 +885,11 @@ type ReportPrototypingSummary = {
917
885
  totalFailed: number;
918
886
  };
919
887
  phaseSummary?: Record<string, {
920
- passed: number;
921
- failed: number;
888
+ status: string;
889
+ findingsCount: number;
890
+ checksCount: number;
891
+ passed?: number;
892
+ failed?: number;
922
893
  }>;
923
894
  modeMismatch?: boolean;
924
895
  };
@@ -980,25 +951,8 @@ declare function validateSpecSplitByCapability(root: string, config: QfaiConfig)
980
951
 
981
952
  declare function validateTraceability(root: string, config: QfaiConfig, phase: ValidationPhase): Promise<Issue[]>;
982
953
 
983
- /**
984
- * Browser QA runner — WS-B
985
- *
986
- * Orchestrates the canonical 4-phase Browser QA execution model.
987
- * Provider resolution → phase execution → truthful skip/fail handling.
988
- */
989
-
990
- /**
991
- * Run the canonical 4-phase Browser QA.
992
- *
993
- * - provider resolved → delegate to provider methods
994
- * - no provider → use built-in static analysis phases
995
- * - non-ui surface → all phases skipped
996
- */
997
954
  declare function runBrowserQaOrchestrated(input: BrowserQaInput, provider?: BrowserQaProvider): Promise<BrowserQaRunResult>;
998
- /**
999
- * Summarize a BrowserQaRunResult for report output.
1000
- */
1001
- declare function summarizeBrowserQaResult(result: BrowserQaRunResult): BrowserQaSummary;
955
+ declare function summarizeBrowserQaResult(result: BrowserQaRunResult): BrowserQaSummary$1;
1002
956
 
1003
957
  /**
1004
958
  * Render runner — WS-C
@@ -1018,6 +972,155 @@ declare function runRenderCapture(targets: RenderCaptureTarget[], outputDir: str
1018
972
  required?: boolean;
1019
973
  }): Promise<RenderRunnerResult>;
1020
974
 
975
+ interface FakeUiDetectionResult {
976
+ detected: boolean;
977
+ reasons: string[];
978
+ evidence_refs: string[];
979
+ confidence: "low" | "medium" | "high";
980
+ }
981
+
982
+ declare const FULL_HARNESS_EXIT_REASONS: readonly ["quality-threshold-met", "plateau", "budget-exhausted", "fake-ui-detected", "runtime-failure", "human-review-required"];
983
+ type FullHarnessExitReason = (typeof FULL_HARNESS_EXIT_REASONS)[number];
984
+
985
+ type FullHarnessHandoff = {
986
+ selected_build: string;
987
+ artifact_refs: string[];
988
+ outstanding_issues: string[];
989
+ required_human_review_points: string[];
990
+ exit_reason: FullHarnessExitReason;
991
+ next_recommended_action: string;
992
+ };
993
+
994
+ /**
995
+ * Calibration pack types for harness scoring alignment.
996
+ *
997
+ * Calibration packs are file-based YAML assets (SD-0030-003)
998
+ * containing scoring alignment examples and threshold configuration.
999
+ */
1000
+ type AlignmentExample = {
1001
+ input: string;
1002
+ expectedScore: number;
1003
+ rationale: string;
1004
+ };
1005
+ type CalibrationOverrides = {
1006
+ perAxisMinimum?: number;
1007
+ maxIterationsByMode?: Record<string, number>;
1008
+ };
1009
+ type CalibrationPack = {
1010
+ version: string;
1011
+ examples: AlignmentExample[];
1012
+ thresholds: ThresholdConfig;
1013
+ maxIterations: number;
1014
+ plateauDelta: number;
1015
+ plateauLookback: number;
1016
+ overrides?: CalibrationOverrides;
1017
+ };
1018
+ type ThresholdConfig = {
1019
+ accept: number;
1020
+ refine: number;
1021
+ };
1022
+ type Decision = "accept" | "refine" | "reject";
1023
+
1024
+ /**
1025
+ * Full-harness mode types — v1.7.15 measurement-driven model.
1026
+ *
1027
+ * Each iteration is a real observation of code state.
1028
+ * No planner/generator/evaluator loop.
1029
+ */
1030
+
1031
+ type FullHarnessPanelScore = {
1032
+ panel: "L1" | "L2";
1033
+ total: number;
1034
+ degradedScoring?: boolean;
1035
+ axes: Array<{
1036
+ axisId: string;
1037
+ score: number;
1038
+ rationale: string;
1039
+ evidenceRefs: string[];
1040
+ }>;
1041
+ };
1042
+ type FullHarnessIteration = {
1043
+ iteration: number;
1044
+ commitSha: string;
1045
+ reviewerId: string;
1046
+ timestamp: string;
1047
+ changeSummary: string[];
1048
+ limitations: string[];
1049
+ evidenceRefs: {
1050
+ render: string[];
1051
+ browserQa: string[];
1052
+ runtimeGate: string[];
1053
+ uiObservation: string[];
1054
+ specCoverage: string[];
1055
+ discussion: string[];
1056
+ screenContract: string[];
1057
+ trend: string[];
1058
+ };
1059
+ l1: FullHarnessPanelScore;
1060
+ l2: FullHarnessPanelScore;
1061
+ weightedTotal: number;
1062
+ deltaFromPrevious: number | null;
1063
+ decision: Decision;
1064
+ };
1065
+ type TerminationReason = "converged" | "max-iterations" | "plateau" | "manual-stop";
1066
+ type FinalDecision = "pending" | "accepted" | "rejected" | "abandoned";
1067
+ type ReviewerSignoffStatus = "pending" | "approved" | "rejected" | "abandoned";
1068
+ type ReviewerLogVerdict = "approve" | "revise" | "reject" | "abandon";
1069
+ type FullHarnessHistory = {
1070
+ runId: string;
1071
+ iterations: FullHarnessIteration[];
1072
+ bestIteration: number;
1073
+ terminationReason?: TerminationReason;
1074
+ scoringTrace: Array<{
1075
+ iteration: number;
1076
+ l1Total: number;
1077
+ l2Total: number;
1078
+ weightedTotal: number;
1079
+ deltaFromPrevious: number | null;
1080
+ decision: Decision;
1081
+ commitSha: string;
1082
+ }>;
1083
+ };
1084
+ type MeasurementInput = {
1085
+ root: string;
1086
+ reviewer: string;
1087
+ changeSummary: string[];
1088
+ limitations: string[];
1089
+ calibration: {
1090
+ packPath: string;
1091
+ thresholds: {
1092
+ accept: number;
1093
+ refine: number;
1094
+ };
1095
+ maxIterations: number;
1096
+ plateauDelta: number;
1097
+ plateauLookback: number;
1098
+ };
1099
+ renderRefs: string[];
1100
+ browserQaRefs: string[];
1101
+ runtimeGateRefs: string[];
1102
+ uiObservationRefs: string[];
1103
+ specCoverageRefs: string[];
1104
+ discussionRefs: string[];
1105
+ screenContractRefs: string[];
1106
+ discussionDirRelative?: string;
1107
+ trendRefs: string[];
1108
+ l1: FullHarnessPanelScore;
1109
+ l2: FullHarnessPanelScore;
1110
+ };
1111
+ type MeasurementResult = {
1112
+ iteration: FullHarnessIteration;
1113
+ history: FullHarnessHistory;
1114
+ terminationReason: TerminationReason | undefined;
1115
+ isTerminal: boolean;
1116
+ };
1117
+ type FullHarnessCalibrationRef = {
1118
+ configPath: string;
1119
+ packPath: string;
1120
+ packVersion: string;
1121
+ };
1122
+ declare const REVIEWER_PLACEHOLDERS: string[];
1123
+
1021
1124
  type PrototypingSummaryBundle = {
1022
1125
  surface: PrototypingSurface;
1023
1126
  specs: Array<{
@@ -1037,6 +1140,11 @@ type PrototypingSummaryBundle = {
1037
1140
  apiEndpoints: string[];
1038
1141
  dbObjects: string[];
1039
1142
  };
1143
+ coverageRefs?: Array<{
1144
+ route: string;
1145
+ declaredRef: string;
1146
+ observedRefs: string[];
1147
+ }>;
1040
1148
  }>;
1041
1149
  mode: {
1042
1150
  requested?: PrototypingMode;
@@ -1054,20 +1162,23 @@ type PrototypingSummaryBundle = {
1054
1162
  };
1055
1163
  uiFidelityStatus?: {
1056
1164
  required: boolean;
1057
- status: "completed" | "failed" | "n/a";
1165
+ status: "completed" | "failed" | "insufficient-evidence" | "n/a";
1058
1166
  reason?: string;
1059
1167
  };
1060
1168
  missingRequiredEvidence?: string[];
1061
1169
  runtimeGate?: {
1062
1170
  ui: Array<{
1171
+ screenId: string;
1063
1172
  route: string;
1064
- status: number;
1065
- }>;
1066
- api: Array<{
1067
- method: string;
1068
- path: string;
1069
- status: number;
1173
+ declaredRef: string;
1174
+ url?: string;
1175
+ rendered: boolean;
1176
+ browserVisited: boolean;
1177
+ httpStatus?: number;
1178
+ renderEvidenceRefs: string[];
1179
+ browserQaEvidenceRefs: string[];
1070
1180
  }>;
1181
+ evidenceRefs: string[];
1071
1182
  };
1072
1183
  uiFidelity?: {
1073
1184
  mode: "interactive" | "skeleton";
@@ -1075,21 +1186,37 @@ type PrototypingSummaryBundle = {
1075
1186
  };
1076
1187
  fullHarness?: {
1077
1188
  enabled: true;
1078
- available: boolean;
1079
1189
  runId: string;
1190
+ calibrationRef: FullHarnessCalibrationRef;
1080
1191
  iterationCount: number;
1081
1192
  bestIteration: number;
1082
- terminationReason: string;
1193
+ status: "in-progress" | "completed";
1194
+ terminationReason?: TerminationReason;
1195
+ finalDecision: FinalDecision;
1083
1196
  reviewerSignoff: {
1084
- status: string;
1085
- reviewer: string;
1086
- timestamp: string;
1197
+ reviewerId: string;
1198
+ status: ReviewerSignoffStatus;
1199
+ timestamp?: string;
1200
+ source: "cli";
1087
1201
  };
1202
+ reviewerLogs: Array<{
1203
+ iteration: number;
1204
+ reviewerId: string;
1205
+ verdict: ReviewerLogVerdict;
1206
+ summary: string;
1207
+ evidenceRefs: string[];
1208
+ }>;
1209
+ iterations: FullHarnessIteration[];
1088
1210
  scoringTrace: Array<{
1089
1211
  iteration: number;
1212
+ l1Total: number;
1213
+ l2Total: number;
1090
1214
  weightedTotal: number;
1091
- decision: string;
1215
+ deltaFromPrevious: number | null;
1216
+ decision: "accept" | "refine" | "reject";
1217
+ commitSha: string;
1092
1218
  }>;
1219
+ limitations: string[];
1093
1220
  };
1094
1221
  };
1095
1222
  declare function writeEvidenceBundles(input: {
@@ -1105,98 +1232,17 @@ declare function writeEvidenceBundles(input: {
1105
1232
  mode: PrototypingMode;
1106
1233
  };
1107
1234
  prototyping: PrototypingSummaryBundle;
1235
+ fullHarnessArtifacts?: {
1236
+ fakeUiDetection: FakeUiDetectionResult;
1237
+ handoff: FullHarnessHandoff;
1238
+ exitReason: FullHarnessExitReason;
1239
+ };
1108
1240
  }): Promise<{
1109
1241
  prototypingPath: string;
1110
1242
  renderPath: string;
1111
1243
  browserQaPath: string;
1112
1244
  }>;
1113
1245
 
1114
- type ThresholdConfig = {
1115
- accept: number;
1116
- refine: number;
1117
- };
1118
- type Decision = "accept" | "refine" | "pivot";
1119
-
1120
- /**
1121
- * Full-harness mode types.
1122
- *
1123
- * Defines the planner/generator/evaluator loop interfaces
1124
- * and evidence structures for /qfai-prototyping full-harness mode.
1125
- */
1126
-
1127
- type HarnessConfig = {
1128
- maxIterations: number;
1129
- thresholds: ThresholdConfig;
1130
- dimensionWeights?: Record<string, number> | undefined;
1131
- dimensionFloors?: Record<string, number> | undefined;
1132
- plateauDelta?: number | undefined;
1133
- plateauLookback?: number | undefined;
1134
- };
1135
- type PlannerStrategy = {
1136
- approach: string;
1137
- constraints: string[];
1138
- budgetGuidance: string;
1139
- };
1140
- type GeneratorOutput = {
1141
- content: string;
1142
- metadata?: Record<string, unknown> | undefined;
1143
- };
1144
- type DimensionScore = {
1145
- dimension: string;
1146
- score: number;
1147
- weight: number;
1148
- floor?: number | undefined;
1149
- };
1150
- type EvaluatorResult = {
1151
- decision: Decision;
1152
- weightedTotal: number;
1153
- dimensionScores: DimensionScore[];
1154
- feedback?: string | undefined;
1155
- pivotContext?: string | undefined;
1156
- };
1157
- type IterationRecord = {
1158
- iteration: number;
1159
- plannerStrategy?: PlannerStrategy | undefined;
1160
- generatorOutput: GeneratorOutput;
1161
- evaluatorResult: EvaluatorResult;
1162
- critiqueResult?: CritiqueResult | undefined;
1163
- };
1164
- type LoopStatus = "converged" | "max-iterations" | "plateau";
1165
- type LoopResult = {
1166
- status: LoopStatus;
1167
- finalOutput: GeneratorOutput;
1168
- finalScore: number;
1169
- terminationReason: LoopStatus;
1170
- iterationCount: number;
1171
- iterations: IterationRecord[];
1172
- bestIteration: number;
1173
- };
1174
- type HarnessEvidence = {
1175
- runId: string;
1176
- timestamp: string;
1177
- status: LoopStatus;
1178
- iterationCount: number;
1179
- finalScore: number;
1180
- terminationReason: LoopStatus;
1181
- iterations: IterationRecord[];
1182
- bestIteration: number;
1183
- };
1184
- type ReviewSummary = {
1185
- finalScore: number;
1186
- recommendation: string;
1187
- iterationSummary: Array<{
1188
- iteration: number;
1189
- score: number;
1190
- decision: Decision;
1191
- }>;
1192
- };
1193
- type SpecInputs = {
1194
- specId: string;
1195
- requirements: string[];
1196
- constraints?: string[] | undefined;
1197
- calibrationPackPath?: string | undefined;
1198
- };
1199
-
1200
1246
  /**
1201
1247
  * Harness adapters — WS-D
1202
1248
  *
@@ -1221,89 +1267,233 @@ type HarnessObservabilityAdapter = {
1221
1267
  };
1222
1268
  type FullHarnessAdapters = {
1223
1269
  surface: SurfaceType;
1224
- render?: HarnessRenderAdapter;
1225
- browserQa?: HarnessBrowserQaAdapter;
1270
+ render: HarnessRenderAdapter;
1271
+ browserQa: HarnessBrowserQaAdapter;
1226
1272
  observability?: HarnessObservabilityAdapter;
1227
1273
  };
1228
1274
 
1229
1275
  /**
1230
- * Harness result writerWS-D
1276
+ * Panel scoring input DTO v1.7.15
1231
1277
  *
1232
- * Writes full-harness execution results to a structured output.
1278
+ * Separates evidence collection from scoring logic.
1279
+ * Every field is required; missing evidence is a MeasurementError.
1280
+ * v1.7.15: screen-level observation, L2 evidence refs required, fail-closed.
1233
1281
  */
1234
-
1235
- type FullHarnessOutput = {
1236
- mode: "full-harness";
1237
- iterations: number;
1238
- terminationReason: string;
1239
- evaluationSummary: {
1240
- finalScore: number;
1241
- bestIteration: number;
1242
- decision: string;
1243
- };
1244
- evidenceSummary: {
1245
- renderCaptured: number;
1246
- renderSkipped: number;
1247
- renderFailed: number;
1282
+ type RuntimeGateEvidence = {
1283
+ uiRoutes: Array<{
1284
+ screenId: string;
1285
+ route: string;
1286
+ url?: string;
1287
+ rendered: boolean;
1288
+ browserVisited: boolean;
1289
+ httpStatus?: number;
1290
+ renderEvidenceRefs: string[];
1291
+ browserQaEvidenceRefs: string[];
1292
+ }>;
1293
+ evidenceRefs: string[];
1294
+ };
1295
+ type RenderEvidenceSummary = {
1296
+ totalScreens: number;
1297
+ capturedScreens: number;
1298
+ failedScreens: number;
1299
+ viewports: string[];
1300
+ evidenceRefs: string[];
1301
+ };
1302
+ type BrowserQaSummary = {
1303
+ executed: boolean;
1304
+ blockingFindings: number;
1305
+ experienceFindings: number;
1306
+ visualFindings: number;
1307
+ totalFindings: number;
1308
+ phasesExecuted: string[];
1309
+ evidenceRefs: string[];
1310
+ };
1311
+ type ScreenObservation = {
1312
+ screenId: string;
1313
+ route: string;
1314
+ htmlCaptureRef: string;
1315
+ domLabelsFound: string[];
1316
+ elementsPlaced: number;
1317
+ actionsDeclared?: number;
1318
+ actionsObserved?: number;
1319
+ actionsWired: number;
1320
+ missingActions?: string[];
1321
+ mockPathFindings: Array<{
1322
+ id: string;
1323
+ status: "fail" | "finding";
1324
+ }>;
1325
+ browserQaEvidenceRefs: string[];
1326
+ browserQaObserved: boolean;
1327
+ evidenceMissing?: boolean;
1328
+ };
1329
+ type UiObservationSummary = {
1330
+ screens: ScreenObservation[];
1331
+ evidenceRefs: string[];
1332
+ };
1333
+ type SpecCoverageSummary = {
1334
+ declared: {
1335
+ uiRoutes: number;
1248
1336
  };
1249
- browserQaSummary: {
1250
- phasesExecuted: number;
1251
- phasesFailed: number;
1252
- phasesSkipped: number;
1253
- totalFindings: number;
1337
+ checked: {
1338
+ uiOk: number;
1254
1339
  };
1255
- calibrationSummary: {
1256
- thresholds: {
1257
- accept: number;
1258
- refine: number;
1259
- };
1340
+ missing: {
1341
+ uiRoutes: string[];
1260
1342
  };
1261
- observabilityRefs: string[];
1343
+ evidenceRefs: string[];
1344
+ };
1345
+ type DiscussionAxisInputs = {
1346
+ invariantAxes: number;
1347
+ trendDerivedAxes: number;
1348
+ productSpecificAxes: number;
1349
+ aggregateScore: number;
1350
+ evidenceRefs: string[];
1351
+ degradedScoring?: boolean;
1352
+ };
1353
+ type ScreenContractInputs = {
1354
+ totalContracts: number;
1355
+ coveredContracts: number;
1356
+ fidelityScore: number;
1357
+ evidenceRefs: string[];
1358
+ degradedScoring?: boolean;
1359
+ };
1360
+ type TrendAlignmentInputs = {
1361
+ trendSourcesChecked: number;
1362
+ translationConsistency: number;
1363
+ competitiveGapsCovered: number;
1364
+ evidenceRefs: string[];
1365
+ degradedScoring?: boolean;
1366
+ };
1367
+ type FullHarnessPanelInputs = {
1368
+ runtimeGate: RuntimeGateEvidence;
1369
+ renderEvidence: RenderEvidenceSummary;
1370
+ browserQa: BrowserQaSummary;
1371
+ uiObservation: UiObservationSummary;
1372
+ specCoverage: SpecCoverageSummary;
1373
+ discussionAxes: DiscussionAxisInputs;
1374
+ screenContract: ScreenContractInputs;
1375
+ trendAlignment: TrendAlignmentInputs;
1262
1376
  };
1263
1377
 
1264
1378
  /**
1265
- * Harness evidence generator creates structured evidence and review
1266
- * summaries from loop results.
1267
- */
1268
-
1269
- declare function generateEvidence(result: LoopResult, runId?: string): HarnessEvidence;
1270
- declare function generateReviewSummary(result: LoopResult): ReviewSummary;
1271
-
1272
- /**
1273
- * Full-harness runtime — WS-D
1379
+ * Full-harness runtimev1.7.15
1380
+ *
1381
+ * Measurement-driven orchestration.
1382
+ * Does NOT contain a self-modifying loop.
1383
+ * Each CLI invocation records exactly one iteration of real observation.
1274
1384
  *
1275
- * Production-path entry point for `mode=full-harness`.
1276
- * Orchestrates the planner generator evaluator loop with
1277
- * render evidence, Browser QA, critique, and observability.
1385
+ * v1.7.15 breaking changes:
1386
+ * - Panel scores computed from real evidence (no dummy l1/l2=0)
1387
+ * - calibration pack required (no silent fallback)
1388
+ * - reviewer required (no placeholder)
1389
+ * - commitSha required (no silent failure)
1278
1390
  */
1279
1391
 
1280
1392
  type FullHarnessRequest = {
1281
- inputs: SpecInputs;
1282
- config?: Partial<HarnessConfig>;
1283
- adapters?: FullHarnessAdapters;
1284
- critiqueAdapter?: CritiqueAdapter;
1393
+ root: string;
1394
+ reviewer: string;
1395
+ changeSummary: string[];
1396
+ limitations: string[];
1397
+ discussionDirRelative?: string;
1398
+ calibrationPack: CalibrationPack;
1399
+ calibrationRef: {
1400
+ packPath: string;
1401
+ packVersion: string;
1402
+ configPath?: string;
1403
+ };
1404
+ adapters: FullHarnessAdapters;
1405
+ screenContracts: Array<{
1406
+ screenId: string;
1407
+ route: string;
1408
+ }>;
1409
+ panelInputs: FullHarnessPanelInputs;
1285
1410
  };
1286
1411
  type FullHarnessResult = {
1287
- loopResult: LoopResult;
1288
- output: FullHarnessOutput;
1289
- evidence: ReturnType<typeof generateEvidence>;
1290
- reviewSummary: ReturnType<typeof generateReviewSummary>;
1412
+ iteration: FullHarnessIteration;
1413
+ history: FullHarnessHistory;
1414
+ calibrationRef: FullHarnessCalibrationRef;
1415
+ fakeUiDetection: FakeUiDetectionResult;
1416
+ exitReason: FullHarnessExitReason;
1417
+ handoff: FullHarnessHandoff;
1418
+ terminationReason: TerminationReason | undefined;
1419
+ isTerminal: boolean;
1420
+ finalDecision: FinalDecision;
1421
+ signoffStatus: ReviewerSignoffStatus;
1422
+ logVerdict: ReviewerLogVerdict;
1291
1423
  };
1292
1424
  /**
1293
- * Run the full-harness mode.
1425
+ * Run a single full-harness measurement iteration.
1294
1426
  *
1295
- * Termination policy:
1296
- * - `accept` reached → exit
1297
- * - `max_iterations` reached exit
1298
- * - plateau detected exit
1299
- * - hard execution failure → throw
1427
+ * This does NOT loop. Each invocation:
1428
+ * 1. Captures render/browserQa evidence
1429
+ * 2. Scores panels from real evidence inputs
1430
+ * 3. Appends iteration to history
1431
+ * 4. Computes termination
1300
1432
  */
1301
1433
  declare function runFullHarness(request: FullHarnessRequest): Promise<FullHarnessResult>;
1302
1434
 
1435
+ /**
1436
+ * Panel scoring — v1.7.15
1437
+ *
1438
+ * L1 = implementation fidelity panel (runtime gate, render, browser QA blocking, screen contract, spec coverage)
1439
+ * L2 = product experience panel (discussion axes, screen contract fidelity, trend, visual, browser QA experience)
1440
+ * weightedTotal = min(L1.total, L2.total)
1441
+ *
1442
+ * Scores are computed from real evidence inputs only.
1443
+ * Pre-scored metadata.dimensionScores flow-through is prohibited.
1444
+ */
1445
+
1446
+ declare function computeWeightedTotal(l1: FullHarnessPanelScore, l2: FullHarnessPanelScore): number;
1447
+ declare function determineDecision(weightedTotal: number, thresholds: {
1448
+ accept: number;
1449
+ refine: number;
1450
+ }): Decision;
1451
+
1452
+ /**
1453
+ * Iteration history management — v1.7.15
1454
+ *
1455
+ * Reads previous iterations from prototyping.json,
1456
+ * appends new iteration, recomputes bestIteration/scoringTrace/terminationReason.
1457
+ */
1458
+
1459
+ declare function loadHistory(root: string): Promise<FullHarnessHistory | null>;
1460
+ declare function appendIteration(history: FullHarnessHistory | null, iteration: FullHarnessIteration): FullHarnessHistory;
1461
+ declare function computeTerminationReason(history: FullHarnessHistory, calibration: {
1462
+ maxIterations: number;
1463
+ plateauDelta: number;
1464
+ plateauLookback: number;
1465
+ thresholds: {
1466
+ accept: number;
1467
+ };
1468
+ }): TerminationReason | undefined;
1469
+
1470
+ /**
1471
+ * Reviewer identity validation — v1.7.15
1472
+ *
1473
+ * CLI --reviewer is mandatory for full-harness.
1474
+ * Placeholders are rejected.
1475
+ */
1476
+ declare function validateReviewer(reviewer: string | undefined): string;
1477
+
1478
+ /**
1479
+ * Git revision resolution — v1.7.15
1480
+ *
1481
+ * Resolves current commit SHA from `.git/HEAD`, with support for:
1482
+ * - Standard `.git/` directory layouts
1483
+ * - Linked worktrees (where `.git` is a file containing `gitdir: <path>`
1484
+ * and the worktree gitdir has a `commondir` file pointing at the main
1485
+ * repository's `.git` directory; `refs/heads/*` and `packed-refs` live
1486
+ * in that common gitdir, not the worktree-local gitdir)
1487
+ * - `packed-refs` fallback when the loose ref file is absent
1488
+ *
1489
+ * Full-harness requires commitSha on every iteration.
1490
+ */
1491
+ declare function resolveCommitSha(root: string): Promise<string>;
1492
+
1303
1493
  declare function createPlaywrightRenderAdapter(input: {
1304
1494
  targetUrl?: string;
1305
1495
  }): RenderCaptureAdapter;
1306
1496
 
1307
1497
  declare function createPlaywrightBrowserQaProvider(): BrowserQaProvider;
1308
1498
 
1309
- export { type AtddCodeTraceabilityResult, type AtddForbiddenRef, type AtddSpecRefs, type AtddTestKind, type AtddTraceabilityMissing, type AtddTraceabilityScan, type AtddUnknownRef, type AtddUnknownRefKind, BROWSER_QA_PHASES, type ConfigLoadResult, type ConfigPathKey, type ConfigSearchResult, type DecisionGuardrail, type DecisionGuardrailEntry, type DiscussionModeRecommendation, type DiscussionRecommendationSourceSchema, type FailOn, type FullHarnessRequest, type FullHarnessResult, type GuardrailCheckResult, type GuardrailIssue, type GuardrailIssueSeverity, type GuardrailLoadError, type GuardrailLoadResult, type GuardrailType, ID_PREFIXES, type IdFormatPrefix, type IdPrefix, type Issue, type IssueCategory, type IssueLocation, type IssueSeverity, type LegacyPrototypingSurface, type ModeResolutionInput, type ModeResolutionResult, type ModeSelectionSource, NON_UI_SURFACES, type OrphanContractsPolicy, type OutputFormat, type ParseDiscussionResult, type PrototypingExecutionConfig, type PrototypingExecutionRequest, type PrototypingExecutionResult, type PrototypingMode, type PrototypingObligations, type PrototypingSurface, type QfaiConfig, type QfaiOutputConfig, type QfaiPaths, type QfaiPrototypingCalibrationConfig, type QfaiPrototypingConfig, type QfaiUiuxAuditConfig, type QfaiUiuxConfig, type QfaiUiuxMigrationConfig, type QfaiValidationConfig, type ReportChangeType, type ReportChangeTypeSummary, type ReportChangeTypeWarning, type ReportContractCoverage, type ReportData, type ReportDeltaCoverage, type ReportFullHarnessExecution, type ReportGuardrailItem, type ReportGuardrails, type ReportIds, type ReportPrototypingSummary, type ReportRuleFinding, type ReportSpecContractRefs, type ReportSpecCoverage, type ReportSummary, type ReportSurfaceClassification, type ReportTddCoverage, type ReportTddCoverageSpec, type ReportTestStrategy, type ReportTraceability, type ReportWaivers, type ResolveModeInput, type ResolvedModeSummary, type RunSddPreflightOptions, type SddPreflightResult, type SddPreflightSource, type SddPreflightStatus, type TraceabilitySeverity, UI_BEARING_SURFACES, type UiFidelityStatus, type ValidationCounts, type ValidationOptions, type ValidationPhase, type ValidationResult, type ValidationTraceability, type ValidationWaiverAction, type ValidationWaiverDowngradeTo, type ValidationWaiverEntry, type ValidationWaiverMatch, type ValidationWaiverScope, type ValidationWaiverSeverity, type ValidationWaiverSuppressed, type ValidationWaivers, checkDecisionGuardrails, createPlaywrightBrowserQaProvider, createPlaywrightRenderAdapter, createReportData, defaultConfig, derivePrototypingObligations, evaluateAtddCodeTraceability, extractAcSpecNumber, extractAllIds, extractBrSpecNumber, extractCapSpecNumber, extractCaseSpecNumber, extractDecisionGuardrailsFromMarkdown, extractIds, extractInvalidIds, extractScSpecNumber, extractSpecNumber, extractUsSpecNumber, filterDecisionGuardrailsByKeyword, findConfigRoot, formatGuardrailsForLlm, formatReportJson, formatReportMarkdown, getConfigPath, inferSurfaceFromRecommendationAndEvidence, isUiBearingSurface, isUiBearingSurfaceType, isValidPrototypingMode, isValidPrototypingSurface, lintSql, loadConfig, loadDecisionGuardrails, normalizeAllowedModes, normalizeDecisionGuardrails, normalizePrototypingSurface, normalizeSurface, parseDiscussionFromObject, parseDiscussionModeRecommendation, parseDiscussionModeRecommendationWithWarnings, resolvePath, resolvePrototypingMode, resolvePrototypingModeFromInput, resolveToolVersion, runBrowserQaOrchestrated, runFullHarness, runPrototypingExecution, runRenderCapture, runSddPreflight, sortDecisionGuardrails, summarizeBrowserQaResult, summarizeResolvedMode, validateAtddCodeTraceability, validateContracts, validateDefinedIds, validateLayeredTraceability, validateOrphanProhibition, validateProject, validateSpecSplitByCapability, validateTraceability, writeEvidenceBundles };
1499
+ export { type AtddCodeTraceabilityResult, type AtddForbiddenRef, type AtddSpecRefs, type AtddTestKind, type AtddTraceabilityMissing, type AtddTraceabilityScan, type AtddUnknownRef, type AtddUnknownRefKind, BROWSER_QA_PHASES, type ConfigLoadResult, type ConfigPathKey, type ConfigSearchResult, DISCUSSION_NON_UI_SURFACES, DISCUSSION_UI_BEARING_SURFACES, type DecisionGuardrail, type DecisionGuardrailEntry, type DiscussionModeRecommendation, type DiscussionRecommendationSourceSchema, FULL_HARNESS_INVALID_COMBINATION_MESSAGE, type FailOn, type FullHarnessCalibrationRef, type FullHarnessHistory, type FullHarnessIteration, type FullHarnessPanelScore, type FullHarnessRequest, type FullHarnessResult, type GuardrailCheckResult, type GuardrailIssue, type GuardrailIssueSeverity, type GuardrailLoadError, type GuardrailLoadResult, type GuardrailType, ID_PREFIXES, type IdFormatPrefix, type IdPrefix, type Issue, type IssueCategory, type IssueLocation, type IssueSeverity, type MeasurementInput, type MeasurementResult, type ModeResolutionInput, type ModeResolutionResult, type ModeSelectionSource, NON_UI_PROTOTYPING_SURFACE_MESSAGE, NON_UI_PROTOTYPING_SURFACE_REASON_CODE, type OrphanContractsPolicy, type OutputFormat, type ParseDiscussionResult, type PrototypingExecutionConfig, type PrototypingExecutionRequest, type PrototypingExecutionResult, type PrototypingMode, type PrototypingObligations, type PrototypingSurface, type QfaiConfig, type QfaiOutputConfig, type QfaiPaths, type QfaiPrototypingCalibrationConfig, type QfaiPrototypingConfig, type QfaiUiuxAuditConfig, type QfaiUiuxConfig, type QfaiValidationConfig, REVIEWER_PLACEHOLDERS, type ReportChangeType, type ReportChangeTypeSummary, type ReportChangeTypeWarning, type ReportContractCoverage, type ReportData, type ReportDeltaCoverage, type ReportFullHarnessExecution, type ReportGuardrailItem, type ReportGuardrails, type ReportIds, type ReportPrototypingSummary, type ReportRuleFinding, type ReportSpecContractRefs, type ReportSpecCoverage, type ReportSummary, type ReportSurfaceClassification, type ReportTddCoverage, type ReportTddCoverageSpec, type ReportTestStrategy, type ReportTraceability, type ReportWaivers, type ResolveModeInput, type ResolvedModeSummary, type RunSddPreflightOptions, type SddPreflightResult, type SddPreflightSource, type SddPreflightStatus, type TerminationReason, type TraceabilitySeverity, UNSUPPORTED_PROTOTYPING_MODE_MESSAGE, UNSUPPORTED_PROTOTYPING_MODE_REASON_CODE, type UiFidelityStatus, VISUAL_BROWSER_SURFACES, type ValidationCounts, type ValidationOptions, type ValidationPhase, type ValidationResult, type ValidationTraceability, type ValidationWaiverAction, type ValidationWaiverDowngradeTo, type ValidationWaiverEntry, type ValidationWaiverMatch, type ValidationWaiverScope, type ValidationWaiverSeverity, type ValidationWaiverSuppressed, type ValidationWaivers, appendIteration, checkDecisionGuardrails, computeTerminationReason, computeWeightedTotal, createPlaywrightBrowserQaProvider, createPlaywrightRenderAdapter, createReportData, defaultConfig, derivePrototypingObligations, determineDecision, evaluateAtddCodeTraceability, extractAcSpecNumber, extractAllIds, extractBrSpecNumber, extractCapSpecNumber, extractCaseSpecNumber, extractDecisionGuardrailsFromMarkdown, extractIds, extractInvalidIds, extractScSpecNumber, extractSpecNumber, extractUsSpecNumber, filterDecisionGuardrailsByKeyword, findConfigRoot, formatGuardrailsForLlm, formatReportJson, formatReportMarkdown, getConfigPath, inferSurfaceFromRecommendationAndEvidence, isDiscussionUiBearingSurfaceType, isNonUiDiscussionSurface, isValidPrototypingMode, isValidPrototypingSurface, lintSql, loadConfig, loadDecisionGuardrails, loadHistory, normalizeAllowedModes, normalizeDecisionGuardrails, normalizeSurface, parseDiscussionFromObject, parseDiscussionModeRecommendation, parseDiscussionModeRecommendationWithWarnings, requiresVisualBrowserEvidence, resolveCommitSha, resolvePath, resolvePrototypingMode, resolvePrototypingModeFromInput, resolveToolVersion, runBrowserQaOrchestrated, runFullHarness, runPrototypingExecution, runRenderCapture, runSddPreflight, sortDecisionGuardrails, summarizeBrowserQaResult, summarizeResolvedMode, validateAtddCodeTraceability, validateContracts, validateDefinedIds, validateLayeredTraceability, validateOrphanProhibition, validateProject, validateReviewer, validateSpecSplitByCapability, validateTraceability, writeEvidenceBundles };