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.
- package/README.md +1 -1
- package/assets/init/.qfai/assistant/agents/frontend-engineer.md +2 -2
- package/assets/init/.qfai/assistant/agents/product-experience-architect.md +2 -2
- package/assets/init/.qfai/assistant/skills/qfai-atdd/SKILL.md +4 -0
- package/assets/init/.qfai/assistant/skills/qfai-configure/SKILL.md +2 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/SKILL.md +60 -330
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/14_Review-Request.md +15 -16
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/00_index.md +13 -21
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/30_exploration_brief.md +29 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/31_reference_pool.md +13 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/32_design_anti_goals.md +10 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/33_exploration_rubric.md +27 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/34_evaluator_calibration.md +17 -0
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/50_review_input_bundle.md +16 -22
- package/assets/init/.qfai/assistant/skills/qfai-implement/SKILL.md +7 -5
- package/assets/init/.qfai/assistant/skills/qfai-prototyping/SKILL.md +187 -132
- package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/design-system-compliance.md +22 -0
- package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/evidence-requirements.md +31 -0
- package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/iteration-cycle.md +25 -0
- package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/l1-review-guide.md +36 -0
- package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/l2-review-guide.md +39 -0
- package/assets/init/.qfai/assistant/skills/qfai-prototyping/references/reviewer-gate.md +24 -0
- package/assets/init/.qfai/assistant/skills/qfai-sdd/SKILL.md +18 -9
- package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/contracts/design-system.sample.yaml +22 -0
- package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/contracts/evaluation-rubric.sample.yaml +16 -0
- package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/contracts/evaluator-calibration.sample.yaml +9 -0
- package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/contracts/exploration-brief.sample.yaml +10 -0
- package/assets/init/.qfai/assistant/skills/qfai-sdd/templates/contracts/selected-direction.sample.yaml +7 -0
- package/assets/init/.qfai/assistant/skills/qfai-verify/SKILL.md +3 -0
- package/assets/init/.qfai/assistant/steering/agent-catalog.yml +1 -1
- package/assets/init/.qfai/assistant/steering/ui-definition-protocol.md +6 -6
- package/assets/init/.qfai/contracts/README.md +17 -10
- package/assets/init/.qfai/contracts/design/README.md +23 -15
- package/assets/init/.qfai/contracts/ui/README.md +9 -8
- package/assets/init/.qfai/discussion/README.md +18 -18
- package/assets/uix-rev/comparison-review.md +8 -10
- package/assets/uix-rev/contracts-review.md +1 -1
- package/assets/uix-rev/scoring-review.md +20 -46
- package/assets/uix-rev/strategy-review.md +11 -16
- package/dist/cli/index.cjs +7709 -16321
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.mjs +7776 -16388
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.cjs +13589 -20963
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +196 -589
- package/dist/index.d.ts +196 -589
- package/dist/index.mjs +10289 -17651
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/10_implementation_strategy.md +0 -38
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/11_design_taste_interview.md +0 -45
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/12_design_system.md +0 -115
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/20_design_eval_invariant.md +0 -68
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/21_design_eval_trend_derived.md +0 -130
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/22_design_eval_product_specific.md +0 -68
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/23_design_eval_aggregate.md +0 -53
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/24_design_eval_dynamic_overrides.md +0 -28
- package/assets/init/.qfai/assistant/skills/qfai-discussion/templates/uiux/30_option_comparison.md +0 -56
- 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
|
-
|
|
316
|
-
|
|
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
|
|
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
|
-
|
|
337
|
+
requireIterations: boolean;
|
|
338
|
+
maxIterations: number;
|
|
354
339
|
validCombination: boolean;
|
|
355
|
-
|
|
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
|
|
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
|
-
|
|
606
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
*
|
|
846
|
+
* Full-harness mode types.
|
|
996
847
|
*
|
|
997
|
-
*
|
|
998
|
-
*
|
|
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
|
|
1001
|
-
|
|
1002
|
-
|
|
851
|
+
type FullHarnessAxisScore = {
|
|
852
|
+
axisId: string;
|
|
853
|
+
score: number;
|
|
1003
854
|
rationale: string;
|
|
855
|
+
evidenceRefs: string[];
|
|
1004
856
|
};
|
|
1005
|
-
type
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
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
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
1109
|
-
|
|
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:
|
|
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
|
-
*
|
|
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
|
|
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,
|
|
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
|
|
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 };
|