qfai 1.8.0 → 1.8.2

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 (60) hide show
  1. package/README.md +1 -1
  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/skills/qfai-atdd/SKILL.md +4 -0
  5. package/assets/init/.qfai/assistant/skills/qfai-configure/SKILL.md +2 -1
  6. package/assets/init/.qfai/assistant/skills/qfai-discussion/SKILL.md +60 -330
  7. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/14_Review-Request.md +15 -16
  8. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/00_index.md +13 -21
  9. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/30_exploration_brief.md +29 -0
  10. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/31_reference_pool.md +13 -0
  11. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/32_design_anti_goals.md +10 -0
  12. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/33_exploration_rubric.md +27 -0
  13. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/34_evaluator_calibration.md +17 -0
  14. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/50_review_input_bundle.md +16 -22
  15. package/assets/init/.qfai/assistant/skills/qfai-implement/SKILL.md +7 -5
  16. package/assets/init/.qfai/assistant/skills/qfai-prototyping/SKILL.md +187 -132
  17. package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/design-system-compliance.md +22 -0
  18. package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/evidence-requirements.md +31 -0
  19. package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/iteration-cycle.md +25 -0
  20. package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/l1-review-guide.md +36 -0
  21. package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/l2-review-guide.md +39 -0
  22. package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/reviewer-gate.md +24 -0
  23. package/assets/init/.qfai/assistant/skills/qfai-sdd/SKILL.md +18 -9
  24. package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/contracts/design-system.sample.yaml +22 -0
  25. package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/contracts/evaluation-rubric.sample.yaml +16 -0
  26. package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/contracts/evaluator-calibration.sample.yaml +9 -0
  27. package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/contracts/exploration-brief.sample.yaml +10 -0
  28. package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/contracts/selected-direction.sample.yaml +7 -0
  29. package/assets/init/.qfai/assistant/skills/qfai-verify/SKILL.md +3 -0
  30. package/assets/init/.qfai/assistant/steering/agent-catalog.yml +1 -1
  31. package/assets/init/.qfai/assistant/steering/ui-definition-protocol.md +6 -6
  32. package/assets/init/.qfai/contracts/README.md +17 -10
  33. package/assets/init/.qfai/contracts/design/README.md +23 -15
  34. package/assets/init/.qfai/contracts/ui/README.md +9 -8
  35. package/assets/init/.qfai/discussion/README.md +18 -18
  36. package/assets/uix-rev/comparison-review.md +8 -10
  37. package/assets/uix-rev/contracts-review.md +1 -1
  38. package/assets/uix-rev/scoring-review.md +20 -46
  39. package/assets/uix-rev/strategy-review.md +11 -16
  40. package/dist/cli/index.cjs +7709 -16321
  41. package/dist/cli/index.cjs.map +1 -1
  42. package/dist/cli/index.mjs +7776 -16388
  43. package/dist/cli/index.mjs.map +1 -1
  44. package/dist/index.cjs +13589 -20963
  45. package/dist/index.cjs.map +1 -1
  46. package/dist/index.d.cts +196 -589
  47. package/dist/index.d.ts +196 -589
  48. package/dist/index.mjs +10289 -17651
  49. package/dist/index.mjs.map +1 -1
  50. package/package.json +1 -1
  51. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/10_implementation_strategy.md +0 -38
  52. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/11_design_taste_interview.md +0 -45
  53. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/12_design_system.md +0 -115
  54. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/20_design_eval_invariant.md +0 -68
  55. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/21_design_eval_trend_derived.md +0 -130
  56. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/22_design_eval_product_specific.md +0 -68
  57. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/23_design_eval_aggregate.md +0 -53
  58. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/24_design_eval_dynamic_overrides.md +0 -28
  59. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/30_option_comparison.md +0 -56
  60. package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/31_selected_anchor_screen.md +0 -42
package/dist/index.d.cts CHANGED
@@ -312,304 +312,46 @@ declare function extractScSpecNumber(scId: string): string | null;
312
312
  declare const CANONICAL_PROTOTYPING_SURFACES: readonly ["web", "mobile", "desktop", "cli", "mixed"];
313
313
  type CanonicalPrototypingSurface = (typeof CANONICAL_PROTOTYPING_SURFACES)[number];
314
314
 
315
- type PrototypingMode = "full-harness";
316
- type ModeSelectionSource = "explicit-request" | "discussion-recommendation" | "system-default";
315
+ declare const PROTOTYPING_MODES: readonly ["low-cost", "standard", "full-harness"];
316
+ declare const DEFAULT_PROTOTYPING_MODE: "standard";
317
+ declare const PROTOTYPING_MAX_ITERATIONS: {
318
+ readonly "low-cost": 1;
319
+ readonly standard: 3;
320
+ readonly "full-harness": 20;
321
+ };
322
+ declare const PROTOTYPING_SUPPORTED_SURFACES: readonly ["web", "mobile", "desktop", "mixed"];
323
+ type PrototypingMode = (typeof PROTOTYPING_MODES)[number];
324
+ type ModeSelectionSource = "explicit-request" | "system-default";
317
325
  type PrototypingSurface = CanonicalPrototypingSurface;
318
- type DiscussionRecommendationSourceSchema = "canonical-namespaced";
319
- /**
320
- * Canonical validated recommendation — all 4 fields required.
321
- * Parser output uses this same type; fields are always populated
322
- * because extractRecommendation returns null when any field is missing.
323
- */
324
- type DiscussionModeRecommendation = {
325
- recommendedMode: PrototypingMode;
326
- rationale: string;
327
- allowedModes: PrototypingMode[];
328
- surface: PrototypingSurface;
329
- updatedAt?: string | undefined;
330
- sourceSchema?: DiscussionRecommendationSourceSchema | undefined;
331
- };
332
- type ModeResolutionInput = {
333
- explicitMode?: PrototypingMode | undefined;
334
- discussionRecommendation?: DiscussionModeRecommendation | null | undefined;
335
- defaultMode?: PrototypingMode | undefined;
336
- };
337
326
  type ModeResolutionResult = {
338
- requested?: PrototypingMode | undefined;
327
+ requested?: PrototypingMode;
339
328
  effective: PrototypingMode;
340
329
  source: ModeSelectionSource;
341
330
  rationale: string;
342
331
  };
343
- type ResolvedModeSummary = ModeResolutionResult & {
344
- discussionRecommendation?: DiscussionModeRecommendation | undefined;
345
- surface?: PrototypingSurface | undefined;
346
- warnings: string[];
347
- };
348
332
  type PrototypingObligations = {
349
333
  requireRuntimeGate: boolean;
350
334
  requireUiFidelity: boolean;
351
335
  requireRenderBundle: boolean;
352
336
  requireBrowserQaBundle: boolean;
353
- requireFullHarness: boolean;
337
+ requireIterations: boolean;
338
+ maxIterations: number;
354
339
  validCombination: boolean;
355
- invalidReasonCode?: string | undefined;
356
- invalidReason?: string | undefined;
357
- };
358
- type ResolveModeInput = {
359
- requested?: PrototypingMode | undefined;
360
- discussionArtifact?: unknown;
361
- defaultMode?: PrototypingMode | undefined;
362
- };
363
- type PrototypingExecutionConfig = {
364
- targetUrl?: string | null;
365
- browserProvider?: string;
366
- renderProvider?: string;
340
+ invalidReason?: string;
367
341
  };
368
342
  type UiFidelityStatus = {
369
343
  required: boolean;
370
344
  status: "completed" | "failed" | "insufficient-evidence" | "n/a";
371
345
  reason?: string;
372
346
  };
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";
379
- type ParseDiscussionResult = {
380
- recommendation: DiscussionModeRecommendation | null;
381
- warnings: string[];
382
- };
383
- /**
384
- * Parse a prototyping.yaml file from a discussion pack.
385
- * Supports only the canonical namespaced (`prototyping.*`) schema.
386
- */
387
- declare function parseDiscussionModeRecommendation(filePath: string): Promise<DiscussionModeRecommendation | null>;
388
- declare function parseDiscussionModeRecommendationWithWarnings(filePath: string): Promise<ParseDiscussionResult>;
389
- declare function parseDiscussionFromObject(parsed: Record<string, unknown>): ParseDiscussionResult;
390
- declare function resolvePrototypingMode(input: ModeResolutionInput): ModeResolutionResult;
391
- /**
392
- * Full resolved mode summary with discussion recommendation context and warnings.
393
- */
394
- declare function summarizeResolvedMode(input: ModeResolutionInput): ResolvedModeSummary;
395
- /**
396
- * Resolve mode from raw input (ResolveModeInput) — includes discussion artifact parsing.
397
- */
398
- declare function resolvePrototypingModeFromInput(input: ResolveModeInput): ResolvedModeSummary;
399
- declare function normalizeSurface(input: unknown): PrototypingSurface | null;
400
- declare function inferSurfaceFromRecommendationAndEvidence(input: {
401
- recommendationSurface?: PrototypingSurface | undefined;
402
- evidenceSurface?: PrototypingSurface | undefined;
403
- hasUiFidelity?: boolean | undefined;
404
- hasRenderBundle?: boolean | undefined;
405
- hasBrowserQaBundle?: boolean | undefined;
406
- hasUiRoutes?: boolean | undefined;
407
- hasRuntimeGateUi?: boolean | undefined;
408
- }): PrototypingSurface | null;
409
- declare function derivePrototypingObligations(input: {
410
- surface: PrototypingSurface;
411
- effectiveMode: string;
412
- }): PrototypingObligations;
413
347
  declare function isValidPrototypingMode(value: unknown): value is PrototypingMode;
414
348
  declare function isValidPrototypingSurface(value: unknown): value is PrototypingSurface;
415
- declare function normalizeAllowedModes(modes?: string[]): PrototypingMode[];
416
-
417
- /**
418
- * Render evidence types — WS-C
419
- *
420
- * Canonical types for the render evidence capture pipeline.
421
- */
422
- type RenderCaptureTarget = {
423
- targetId: string;
424
- route?: string;
425
- descriptor?: string;
426
- viewport: string;
427
- width?: number;
428
- height?: number;
429
- };
430
- type RenderCaptureAdapter = {
431
- captureScreenshot(target: RenderCaptureTarget, outputDir: string): Promise<string>;
432
- captureHtml?(target: RenderCaptureTarget, outputDir: string): Promise<string>;
433
- };
434
- type RenderEvidenceEntryResult = {
435
- capture_id: string;
436
- target: string;
437
- status: "captured" | "skipped" | "failed";
438
- screenshot_path?: string;
439
- html_path?: string;
440
- viewport: string;
441
- reason?: string;
442
- };
443
- type RenderRunnerResult = {
444
- entries: RenderEvidenceEntryResult[];
445
- filesWritten: string[];
446
- surface?: string;
447
- mode?: string;
448
- generatedAt?: string;
449
- coverageSummary?: {
450
- total: number;
451
- captured: number;
452
- failed: number;
453
- skipped: number;
454
- };
455
- };
456
-
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;
464
-
465
- type BrowserQaPhase = "smoke" | "interaction" | "visual" | "accessibility";
466
- declare const BROWSER_QA_PHASES: readonly BrowserQaPhase[];
467
- type BrowserQaPhaseStatus = "passed" | "executed" | "failed" | "skipped";
468
- type BrowserQaFindingSeverity = "info" | "warn" | "warning" | "error";
469
- interface BrowserQaFinding {
470
- phase: BrowserQaPhase;
471
- severity: BrowserQaFindingSeverity;
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;
481
- repair_hint?: string;
482
- }
483
- type BrowserQaScreenContractRef = {
484
- screen_id: string;
485
- route?: string;
486
- primary_tasks?: string[];
487
- };
488
- type BrowserQaPhaseResult = {
489
- phase: BrowserQaPhase;
490
- status: BrowserQaPhaseStatus;
491
- findings: BrowserQaFinding[];
492
- repair_suggestions: string[];
493
- evidence_refs: string[];
494
- checks_performed: string[];
495
- skippedReason?: string;
496
- screen_id?: string;
497
- route?: string;
498
- };
499
- type BrowserQaInput = {
500
- htmlContent?: string;
501
- targetUrl?: string;
502
- routes?: string[];
503
- surface: SurfaceType;
504
- required?: boolean;
505
- executionSource?: "html" | "url" | "none";
506
- screenContracts?: BrowserQaScreenContractRef[];
507
- };
508
- type BrowserQaRunResult = {
509
- phases: BrowserQaPhaseResult[];
510
- provider: string;
511
- timestamp: string;
512
- };
513
- type BrowserQaSummary$1 = {
514
- providerId: string;
515
- phases: Record<BrowserQaPhase, {
516
- status: BrowserQaPhaseStatus;
517
- findingsCount: number;
518
- checksCount: number;
519
- passed?: number;
520
- failed?: number;
521
- }>;
522
- totalFindings: number;
523
- totalRepairs: number;
524
- skippedReasons: string[];
525
- };
526
- interface BrowserQaProvider {
527
- providerId: string;
528
- canRun(surface: SurfaceType): boolean;
529
- runSmoke(input: BrowserQaInput): Promise<BrowserQaPhaseResult>;
530
- runInteraction(input: BrowserQaInput): Promise<BrowserQaPhaseResult>;
531
- runVisual(input: BrowserQaInput): Promise<BrowserQaPhaseResult>;
532
- runAccessibility(input: BrowserQaInput): Promise<BrowserQaPhaseResult>;
533
- }
534
-
535
- /**
536
- * Browser provider types.
537
- *
538
- * Provider interface is minimal (DEC-0003). Registration is optional;
539
- * absence is a valid state with fail-open semantics.
540
- *
541
- * WS-B: BrowserQaProvider is the canonical interface for 4-phase Browser QA.
542
- * BrowserProvider defines the browser QA and capture provider interface.
543
- */
544
-
545
- type ProviderCapability = "screenshot" | "viewport" | "dom" | "interaction" | "visual" | "accessibility";
546
- /** Browser QA and capture provider. */
547
- type BrowserProvider = {
548
- name: string;
549
- capabilities: ProviderCapability[];
550
- captureScreenshot?: () => Promise<string>;
551
- captureViewport?: () => Promise<{
552
- width: number;
553
- height: number;
554
- }>;
555
- captureDom?: () => Promise<string>;
556
- runInteraction?: () => Promise<void>;
557
- runVisual?: () => Promise<void>;
558
- runAccessibility?: () => Promise<void>;
559
- };
560
-
561
- type ProviderLookupResult = {
562
- status: "available";
563
- provider: BrowserProvider;
564
- } | {
565
- status: "skipped";
566
- provider: undefined;
567
- };
568
-
569
- /**
570
- * Provider registry with optional registration and fail-open semantics.
571
- *
572
- * Registration is synchronous. Lookup returns a discriminated union
573
- * so callers can handle absence without try/catch.
574
- */
575
-
576
- declare class ProviderRegistry {
577
- private providers;
578
- register(provider: BrowserProvider): void;
579
- /** Atomically replace an existing provider registration. */
580
- replace(provider: BrowserProvider): void;
581
- get(name: string): BrowserProvider | undefined;
582
- has(name: string): boolean;
583
- getOrSkip(name: string): ProviderLookupResult;
584
- private qaProviders;
585
- registerQaProvider(provider: BrowserQaProvider): void;
586
- getQaProvider(name: string): BrowserQaProvider | undefined;
587
- getFirstQaProvider(): BrowserQaProvider | undefined;
588
- }
589
-
590
- type PrototypingExecutionRequest = {
591
- root: string;
592
- requestedMode?: PrototypingMode;
593
- providerRegistry?: ProviderRegistry;
594
- renderAdapter?: RenderCaptureAdapter;
595
- browserQaProviderId?: string;
596
- renderProviderId?: string;
597
- targetUrl?: string;
598
- reviewer?: string;
599
- changeSummary?: string[];
600
- limitations?: string[];
601
- };
602
- type PrototypingExecutionResult = {
603
- mode: PrototypingMode;
349
+ declare function isSupportedPrototypingSurface(surface: string): surface is PrototypingSurface;
350
+ declare function resolvePrototypingMode(requested?: PrototypingMode): ModeResolutionResult;
351
+ declare function derivePrototypingObligations(input: {
604
352
  surface: PrototypingSurface;
605
- evidencePaths: {
606
- prototyping: string;
607
- render: string;
608
- browserQa: string;
609
- };
610
- generatedAt: string;
611
- };
612
- declare function runPrototypingExecution(request: PrototypingExecutionRequest): Promise<PrototypingExecutionResult>;
353
+ effectiveMode: PrototypingMode;
354
+ }): PrototypingObligations;
613
355
 
614
356
  type SddPreflightSource = "discussion-pack";
615
357
  type SddPreflightStatus = "ready" | "blocked";
@@ -805,19 +547,12 @@ type ReportFullHarnessExecution = {
805
547
  type ReportPrototypingSummary = {
806
548
  surfaceClassification?: ReportSurfaceClassification;
807
549
  fullHarnessExecution?: ReportFullHarnessExecution;
808
- recommendationArtifact?: {
809
- status: "valid" | "missing" | "invalid" | "no-pack";
810
- path?: string;
811
- };
812
550
  mode: {
813
551
  requested?: string;
814
552
  effective: string;
815
553
  source: string;
816
554
  rationale: string;
817
- discussionRecommendation?: string;
818
- allowedModes?: string[];
819
555
  surface: string;
820
- sourceSchema?: string;
821
556
  };
822
557
  evidence: {
823
558
  specsCoverageStatus: "complete" | "incomplete";
@@ -860,9 +595,7 @@ type ReportPrototypingSummary = {
860
595
  reviewerId?: string;
861
596
  reviewerSignoffStatus?: string;
862
597
  scoringTraceCount?: number;
863
- latestWeightedTotal?: number;
864
- latestL1Total?: number;
865
- latestL2Total?: number;
598
+ latestScoredIteration?: number;
866
599
  limitations?: string[];
867
600
  reviewerLogsCount?: number;
868
601
  };
@@ -951,8 +684,126 @@ declare function validateSpecSplitByCapability(root: string, config: QfaiConfig)
951
684
 
952
685
  declare function validateTraceability(root: string, config: QfaiConfig, phase: ValidationPhase): Promise<Issue[]>;
953
686
 
687
+ type SurfaceType = CanonicalPrototypingSurface | "non-ui";
688
+ declare const DISCUSSION_UI_BEARING_SURFACES: Set<SurfaceType>;
689
+ declare const DISCUSSION_NON_UI_SURFACES: Set<SurfaceType>;
690
+ declare const VISUAL_BROWSER_SURFACES: Set<SurfaceType>;
691
+ declare function isDiscussionUiBearingSurfaceType(surface: SurfaceType): boolean;
692
+ declare function isNonUiDiscussionSurface(surface: SurfaceType): boolean;
693
+ declare function requiresVisualBrowserEvidence(surface: SurfaceType): boolean;
694
+
695
+ type BrowserQaPhase = "smoke" | "interaction" | "visual" | "accessibility";
696
+ declare const BROWSER_QA_PHASES: readonly BrowserQaPhase[];
697
+ type BrowserQaPhaseStatus = "passed" | "executed" | "failed" | "skipped";
698
+ type BrowserQaFindingSeverity = "info" | "warn" | "warning" | "error";
699
+ interface BrowserQaFinding {
700
+ phase: BrowserQaPhase;
701
+ severity: BrowserQaFindingSeverity;
702
+ summary: string;
703
+ detail: string;
704
+ screen_id?: string;
705
+ selector?: string;
706
+ evidence_refs: string[];
707
+ repair_suggestions: string[];
708
+ category?: BrowserQaPhase;
709
+ message?: string;
710
+ route?: string;
711
+ repair_hint?: string;
712
+ }
713
+ type BrowserQaScreenContractRef = {
714
+ screen_id: string;
715
+ route?: string;
716
+ primary_tasks?: string[];
717
+ };
718
+ type BrowserQaPhaseResult = {
719
+ phase: BrowserQaPhase;
720
+ status: BrowserQaPhaseStatus;
721
+ findings: BrowserQaFinding[];
722
+ repair_suggestions: string[];
723
+ evidence_refs: string[];
724
+ checks_performed: string[];
725
+ skippedReason?: string;
726
+ screen_id?: string;
727
+ route?: string;
728
+ };
729
+ type BrowserQaInput = {
730
+ htmlContent?: string;
731
+ targetUrl?: string;
732
+ routes?: string[];
733
+ surface: SurfaceType;
734
+ required?: boolean;
735
+ executionSource?: "html" | "url" | "none";
736
+ screenContracts?: BrowserQaScreenContractRef[];
737
+ };
738
+ type BrowserQaRunResult = {
739
+ phases: BrowserQaPhaseResult[];
740
+ provider: string;
741
+ timestamp: string;
742
+ };
743
+ type BrowserQaSummary = {
744
+ providerId: string;
745
+ phases: Record<BrowserQaPhase, {
746
+ status: BrowserQaPhaseStatus;
747
+ findingsCount: number;
748
+ checksCount: number;
749
+ passed?: number;
750
+ failed?: number;
751
+ }>;
752
+ totalFindings: number;
753
+ totalRepairs: number;
754
+ skippedReasons: string[];
755
+ };
756
+ interface BrowserQaProvider {
757
+ providerId: string;
758
+ canRun(surface: SurfaceType): boolean;
759
+ runSmoke(input: BrowserQaInput): Promise<BrowserQaPhaseResult>;
760
+ runInteraction(input: BrowserQaInput): Promise<BrowserQaPhaseResult>;
761
+ runVisual(input: BrowserQaInput): Promise<BrowserQaPhaseResult>;
762
+ runAccessibility(input: BrowserQaInput): Promise<BrowserQaPhaseResult>;
763
+ }
764
+
954
765
  declare function runBrowserQaOrchestrated(input: BrowserQaInput, provider?: BrowserQaProvider): Promise<BrowserQaRunResult>;
955
- declare function summarizeBrowserQaResult(result: BrowserQaRunResult): BrowserQaSummary$1;
766
+ declare function summarizeBrowserQaResult(result: BrowserQaRunResult): BrowserQaSummary;
767
+
768
+ /**
769
+ * Render evidence types — WS-C
770
+ *
771
+ * Canonical types for the render evidence capture pipeline.
772
+ */
773
+ type RenderCaptureTarget = {
774
+ targetId: string;
775
+ route?: string;
776
+ descriptor?: string;
777
+ viewport: string;
778
+ width?: number;
779
+ height?: number;
780
+ };
781
+ type RenderCaptureAdapter = {
782
+ captureScreenshot(target: RenderCaptureTarget, outputDir: string): Promise<string>;
783
+ captureHtml?(target: RenderCaptureTarget, outputDir: string): Promise<string>;
784
+ };
785
+ type RenderEvidenceEntryResult = {
786
+ capture_id: string;
787
+ target: string;
788
+ status: "captured" | "skipped" | "failed";
789
+ screenshot_path?: string;
790
+ html_path?: string;
791
+ viewport: string;
792
+ reason?: string;
793
+ };
794
+ type RenderRunnerResult = {
795
+ entries: RenderEvidenceEntryResult[];
796
+ filesWritten: string[];
797
+ surface?: string;
798
+ mode?: string;
799
+ generatedAt?: string;
800
+ coverageSummary?: {
801
+ total: number;
802
+ captured: number;
803
+ failed: number;
804
+ skipped: number;
805
+ };
806
+ };
956
807
 
957
808
  /**
958
809
  * Render runner — WS-C
@@ -992,109 +843,70 @@ type FullHarnessHandoff = {
992
843
  };
993
844
 
994
845
  /**
995
- * Calibration pack types for harness scoring alignment.
846
+ * Full-harness mode types.
996
847
  *
997
- * Calibration packs are file-based YAML assets (SD-0030-003)
998
- * containing scoring alignment examples and threshold configuration.
848
+ * Full-harness now follows the reviewerScores/allItemsPass95 evidence schema
849
+ * used by prototyping.json. Legacy weighted totals are intentionally excluded.
999
850
  */
1000
- type AlignmentExample = {
1001
- input: string;
1002
- expectedScore: number;
851
+ type FullHarnessAxisScore = {
852
+ axisId: string;
853
+ score: number;
1003
854
  rationale: string;
855
+ evidenceRefs: string[];
1004
856
  };
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
- }>;
857
+ type FullHarnessReviewerScore = {
858
+ reviewerId: string;
859
+ role?: string;
860
+ scores: FullHarnessAxisScore[];
861
+ };
862
+ type FullHarnessEvidenceRefs = {
863
+ render: string[];
864
+ browserQa: string[];
865
+ runtimeGate: string[];
866
+ uiObservation: string[];
867
+ specCoverage: string[];
868
+ discussion: string[];
869
+ screenContract: string[];
870
+ trend: string[];
1041
871
  };
1042
872
  type FullHarnessIteration = {
1043
873
  iteration: number;
1044
874
  commitSha: string;
1045
- reviewerId: string;
1046
875
  timestamp: string;
1047
876
  changeSummary: string[];
1048
877
  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;
878
+ evidenceRefs: FullHarnessEvidenceRefs;
879
+ reviewerScores: FullHarnessReviewerScore[];
880
+ allItemsPass95: boolean;
881
+ stopReason?: string;
1064
882
  };
1065
883
  type TerminationReason = "converged" | "max-iterations" | "plateau" | "manual-stop";
1066
884
  type FinalDecision = "pending" | "accepted" | "rejected" | "abandoned";
1067
885
  type ReviewerSignoffStatus = "pending" | "approved" | "rejected" | "abandoned";
1068
886
  type ReviewerLogVerdict = "approve" | "revise" | "reject" | "abandon";
887
+ type FullHarnessScoreSnapshot = {
888
+ iteration: number;
889
+ reviewerCount: number;
890
+ axisCount: number;
891
+ minScore: number | null;
892
+ averageScore: number | null;
893
+ allItemsPass95: boolean;
894
+ commitSha: string;
895
+ };
1069
896
  type FullHarnessHistory = {
1070
897
  runId: string;
1071
898
  iterations: FullHarnessIteration[];
1072
899
  bestIteration: number;
1073
900
  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
- }>;
901
+ scoringTrace: FullHarnessScoreSnapshot[];
1083
902
  };
1084
903
  type MeasurementInput = {
1085
904
  root: string;
1086
905
  reviewer: string;
1087
906
  changeSummary: string[];
1088
907
  limitations: string[];
1089
- calibration: {
1090
- packPath: string;
1091
- thresholds: {
1092
- accept: number;
1093
- refine: number;
1094
- };
908
+ iterationPolicy: {
1095
909
  maxIterations: number;
1096
- plateauDelta: number;
1097
- plateauLookback: number;
1098
910
  };
1099
911
  renderRefs: string[];
1100
912
  browserQaRefs: string[];
@@ -1105,8 +917,9 @@ type MeasurementInput = {
1105
917
  screenContractRefs: string[];
1106
918
  discussionDirRelative?: string;
1107
919
  trendRefs: string[];
1108
- l1: FullHarnessPanelScore;
1109
- l2: FullHarnessPanelScore;
920
+ reviewerScores: FullHarnessReviewerScore[];
921
+ allItemsPass95: boolean;
922
+ stopReason?: string;
1110
923
  };
1111
924
  type MeasurementResult = {
1112
925
  iteration: FullHarnessIteration;
@@ -1207,17 +1020,21 @@ type PrototypingSummaryBundle = {
1207
1020
  evidenceRefs: string[];
1208
1021
  }>;
1209
1022
  iterations: FullHarnessIteration[];
1210
- scoringTrace: Array<{
1211
- iteration: number;
1212
- l1Total: number;
1213
- l2Total: number;
1214
- weightedTotal: number;
1215
- deltaFromPrevious: number | null;
1216
- decision: "accept" | "refine" | "reject";
1217
- commitSha: string;
1218
- }>;
1023
+ scoringTrace: FullHarnessScoreSnapshot[];
1219
1024
  limitations: string[];
1220
1025
  };
1026
+ breakthrough: {
1027
+ latestIteration: number;
1028
+ triggerResult: boolean;
1029
+ triggerReasons: string[];
1030
+ scoreDeltaWindow: number;
1031
+ avgScoreDeltas: number[];
1032
+ minScoreDeltas: number[];
1033
+ diffLines: number;
1034
+ branchCount: number;
1035
+ incumbentRef?: string;
1036
+ branchRefs?: string[];
1037
+ };
1221
1038
  };
1222
1039
  declare function writeEvidenceBundles(input: {
1223
1040
  root: string;
@@ -1244,227 +1061,17 @@ declare function writeEvidenceBundles(input: {
1244
1061
  }>;
1245
1062
 
1246
1063
  /**
1247
- * Harness adapters — WS-D
1248
- *
1249
- * Adapter interfaces for connecting the full-harness runtime to
1250
- * render evidence, Browser QA, critique, and observability subsystems.
1251
- */
1252
-
1253
- type HarnessRenderAdapter = {
1254
- captureEvidence(iteration: number): Promise<RenderRunnerResult>;
1255
- };
1256
- type HarnessBrowserQaAdapter = {
1257
- runQa(iteration: number): Promise<BrowserQaRunResult>;
1258
- };
1259
- type HarnessObservabilityAdapter = {
1260
- recordIteration(data: {
1261
- iteration: number;
1262
- score: number;
1263
- decision: string;
1264
- terminationReason?: string;
1265
- }): void;
1266
- flush(): Promise<void>;
1267
- };
1268
- type FullHarnessAdapters = {
1269
- surface: SurfaceType;
1270
- render: HarnessRenderAdapter;
1271
- browserQa: HarnessBrowserQaAdapter;
1272
- observability?: HarnessObservabilityAdapter;
1273
- };
1274
-
1275
- /**
1276
- * Panel scoring input DTO — v1.7.15
1277
- *
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.
1281
- */
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;
1336
- };
1337
- checked: {
1338
- uiOk: number;
1339
- };
1340
- missing: {
1341
- uiRoutes: string[];
1342
- };
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;
1376
- };
1377
-
1378
- /**
1379
- * Full-harness runtime — v1.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.
1384
- *
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)
1390
- */
1391
-
1392
- type FullHarnessRequest = {
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;
1410
- };
1411
- type FullHarnessResult = {
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;
1423
- };
1424
- /**
1425
- * Run a single full-harness measurement iteration.
1426
- *
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
1432
- */
1433
- declare function runFullHarness(request: FullHarnessRequest): Promise<FullHarnessResult>;
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
1064
+ * Iteration history management.
1454
1065
  *
1455
1066
  * Reads previous iterations from prototyping.json,
1456
- * appends new iteration, recomputes bestIteration/scoringTrace/terminationReason.
1067
+ * appends new iteration, and recomputes bestIteration/scoringTrace from
1068
+ * reviewerScores/allItemsPass95 evidence.
1457
1069
  */
1458
1070
 
1459
1071
  declare function loadHistory(root: string): Promise<FullHarnessHistory | null>;
1460
1072
  declare function appendIteration(history: FullHarnessHistory | null, iteration: FullHarnessIteration): FullHarnessHistory;
1461
- declare function computeTerminationReason(history: FullHarnessHistory, calibration: {
1073
+ declare function computeTerminationReason(history: FullHarnessHistory, iterationPolicy: {
1462
1074
  maxIterations: number;
1463
- plateauDelta: number;
1464
- plateauLookback: number;
1465
- thresholds: {
1466
- accept: number;
1467
- };
1468
1075
  }): TerminationReason | undefined;
1469
1076
 
1470
1077
  /**
@@ -1496,4 +1103,4 @@ declare function createPlaywrightRenderAdapter(input: {
1496
1103
 
1497
1104
  declare function createPlaywrightBrowserQaProvider(): BrowserQaProvider;
1498
1105
 
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 };
1106
+ 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, DEFAULT_PROTOTYPING_MODE, DISCUSSION_NON_UI_SURFACES, DISCUSSION_UI_BEARING_SURFACES, type DecisionGuardrail, type DecisionGuardrailEntry, type FailOn, type FinalDecision, type FullHarnessAxisScore, type FullHarnessCalibrationRef, type FullHarnessEvidenceRefs, type FullHarnessHistory, type FullHarnessIteration, type FullHarnessReviewerScore, type FullHarnessScoreSnapshot, 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 ModeResolutionResult, type ModeSelectionSource, type OrphanContractsPolicy, type OutputFormat, PROTOTYPING_MAX_ITERATIONS, PROTOTYPING_MODES, PROTOTYPING_SUPPORTED_SURFACES, 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 ReviewerLogVerdict, type ReviewerSignoffStatus, type RunSddPreflightOptions, type SddPreflightResult, type SddPreflightSource, type SddPreflightStatus, type TerminationReason, type TraceabilitySeverity, 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, createPlaywrightBrowserQaProvider, createPlaywrightRenderAdapter, createReportData, defaultConfig, derivePrototypingObligations, evaluateAtddCodeTraceability, extractAcSpecNumber, extractAllIds, extractBrSpecNumber, extractCapSpecNumber, extractCaseSpecNumber, extractDecisionGuardrailsFromMarkdown, extractIds, extractInvalidIds, extractScSpecNumber, extractSpecNumber, extractUsSpecNumber, filterDecisionGuardrailsByKeyword, findConfigRoot, formatGuardrailsForLlm, formatReportJson, formatReportMarkdown, getConfigPath, isDiscussionUiBearingSurfaceType, isNonUiDiscussionSurface, isSupportedPrototypingSurface, isValidPrototypingMode, isValidPrototypingSurface, lintSql, loadConfig, loadDecisionGuardrails, loadHistory, normalizeDecisionGuardrails, requiresVisualBrowserEvidence, resolveCommitSha, resolvePath, resolvePrototypingMode, resolveToolVersion, runBrowserQaOrchestrated, runRenderCapture, runSddPreflight, sortDecisionGuardrails, summarizeBrowserQaResult, validateAtddCodeTraceability, validateContracts, validateDefinedIds, validateLayeredTraceability, validateOrphanProhibition, validateProject, validateReviewer, validateSpecSplitByCapability, validateTraceability, writeEvidenceBundles };