sela-core 0.1.0-alpha.44 → 0.1.0-alpha.46

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 (52) hide show
  1. package/dist/cli/commands/merge.d.ts.map +1 -1
  2. package/dist/cli/commands/merge.js +3 -1
  3. package/dist/cli/commands/pr.d.ts +18 -8
  4. package/dist/cli/commands/pr.d.ts.map +1 -1
  5. package/dist/cli/commands/pr.js +68 -42
  6. package/dist/cli/commands/report.d.ts +23 -0
  7. package/dist/cli/commands/report.d.ts.map +1 -0
  8. package/dist/cli/commands/report.js +132 -0
  9. package/dist/cli/index.js +4 -1
  10. package/dist/cli/ui/ConventionsTable.d.ts.map +1 -1
  11. package/dist/cli/ui/ConventionsTable.js +1 -1
  12. package/dist/config/ConfigLoader.d.ts.map +1 -1
  13. package/dist/config/ConfigLoader.js +1 -0
  14. package/dist/config/SelaConfig.d.ts +82 -0
  15. package/dist/config/SelaConfig.d.ts.map +1 -1
  16. package/dist/config/SelaConfig.js +42 -0
  17. package/dist/engine/SelaEngine.d.ts +8 -0
  18. package/dist/engine/SelaEngine.d.ts.map +1 -1
  19. package/dist/engine/SelaEngine.js +55 -0
  20. package/dist/errors/FailureClassifier.d.ts +20 -0
  21. package/dist/errors/FailureClassifier.d.ts.map +1 -1
  22. package/dist/errors/FailureClassifier.js +31 -2
  23. package/dist/fixtures/index.d.ts +26 -1
  24. package/dist/fixtures/index.d.ts.map +1 -1
  25. package/dist/fixtures/index.js +316 -86
  26. package/dist/fixtures/proxyTag.d.ts +1 -1
  27. package/dist/fixtures/proxyTag.d.ts.map +1 -1
  28. package/dist/fixtures/proxyTag.js +2 -0
  29. package/dist/reporter/SelaReporter.d.ts +23 -0
  30. package/dist/reporter/SelaReporter.d.ts.map +1 -1
  31. package/dist/reporter/SelaReporter.js +118 -31
  32. package/dist/services/ArtifactAggregator.d.ts +72 -0
  33. package/dist/services/ArtifactAggregator.d.ts.map +1 -0
  34. package/dist/services/ArtifactAggregator.js +222 -0
  35. package/dist/services/ArtifactNaming.d.ts +84 -0
  36. package/dist/services/ArtifactNaming.d.ts.map +1 -0
  37. package/dist/services/ArtifactNaming.js +231 -0
  38. package/dist/services/HealReportService.d.ts +35 -9
  39. package/dist/services/HealReportService.d.ts.map +1 -1
  40. package/dist/services/HealReportService.js +52 -14
  41. package/dist/services/PRAutomationService.d.ts +7 -0
  42. package/dist/services/PRAutomationService.d.ts.map +1 -1
  43. package/dist/services/PRAutomationService.js +9 -2
  44. package/dist/services/PendingPromptLedger.d.ts +33 -4
  45. package/dist/services/PendingPromptLedger.d.ts.map +1 -1
  46. package/dist/services/PendingPromptLedger.js +92 -18
  47. package/dist/services/TestDeadline.d.ts +59 -0
  48. package/dist/services/TestDeadline.d.ts.map +1 -0
  49. package/dist/services/TestDeadline.js +103 -0
  50. package/dist/utils/DOMUtils.d.ts.map +1 -1
  51. package/dist/utils/DOMUtils.js +13 -0
  52. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsGpD"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0GpD"}
@@ -52,13 +52,15 @@ function registerMerge(program) {
52
52
  .command("merge")
53
53
  .argument("[files...]", "Explicit shard report JSON files (sela-report.json shape). " +
54
54
  "When omitted, --shard-dir is scanned with --shard-glob.")
55
- .description("Merge sharded Sela reports into a single history + HTML report (CI fan-in)")
55
+ .description("[deprecated — use 'sela report generate'] Merge sharded Sela reports into a single history + HTML report (CI fan-in)")
56
56
  .option("--dir <path>", "Output dir for the merged report + rolling history (and where the prior .sela-history.json lives)", process.cwd())
57
57
  .option("--shard-dir <path>", "Directory to scan for shard reports when no explicit files are given", process.cwd())
58
58
  .option("--shard-glob <pattern>", "Filename glob (single * wildcard) used when scanning --shard-dir", "sela-shard-*.json")
59
59
  .option("--run-id <id>", "Single dedup id for the merged history row (defaults to GITHUB_RUN_ID / CI_PIPELINE_ID)")
60
60
  .option("--expected-shards <n>", "Number of shards launched; a smaller readable count flags a partial merge")
61
61
  .action(async (files, opts) => {
62
+ process.stderr.write("[sela] 'sela merge' is deprecated — use 'sela report generate' " +
63
+ "(scans .sela/artifacts, auto-computes --expected-shards).\n");
62
64
  const targetDir = path.resolve(opts.dir ?? process.cwd());
63
65
  const shardDir = path.resolve(opts.shardDir ?? process.cwd());
64
66
  const shardFiles = files && files.length > 0
@@ -1,16 +1,26 @@
1
1
  import type { Command } from "commander";
2
2
  /**
3
- * `sela pr aggregate --ledger-dir <path>`
3
+ * `sela pr generate --artifacts-dir <path>`
4
4
  *
5
- * CI fan-in: after all sharded Playwright runners complete and upload their
6
- * `.sela/pending-prompts` artifacts, the downstream merge job downloads
7
- * everything into one directory and calls this command to open a single
8
- * unified PR for the entire test suite.
5
+ * Phase 2 of the two-phase pipeline (RFC: docs/rfc-two-phase-reporting.md).
6
+ * After all sharded Playwright runners complete and upload their
7
+ * `.sela/artifacts` (v3 PR-intent artifacts; v2 pending-prompts ledgers are
8
+ * still accepted), the fan-in job downloads everything into one directory
9
+ * and calls this command to open a single unified PR for the entire suite.
10
+ *
11
+ * Dedup layers (RFC §5):
12
+ * 1. Intent identity — same stableId across shards collapses; divergent
13
+ * heals resolve to the highest (auditor, AI) confidence winner, with
14
+ * every rejected candidate disclosed in the PR body.
15
+ * 2. Patch merge — the winner's granular patch is preferred when shards
16
+ * disagree; identical duplicate patches are explicit no-ops.
17
+ * 3. Git idempotency — deterministic fingerprint branch + open-PR upsert
18
+ * gate live in PRAutomationService (P0-2).
9
19
  *
10
20
  * Typical GHA usage:
11
- * - Upload: actions/upload-artifact@v4 path: .sela/pending-prompts/
12
- * - Download: actions/download-artifact@v4 merge-multiple: true path: sela-ledgers/
13
- * - Run: npx sela pr aggregate --ledger-dir ./sela-ledgers
21
+ * - Upload: actions/upload-artifact@v4 path: .sela/artifacts/
22
+ * - Download: actions/download-artifact@v4 merge-multiple: true path: .sela/artifacts/
23
+ * - Run: npx sela pr generate
14
24
  */
15
25
  export declare function registerPr(parent: Command): void;
16
26
  //# sourceMappingURL=pr.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAsEhD"}
1
+ {"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAkDhD"}
@@ -36,61 +36,87 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.registerPr = registerPr;
37
37
  const path = __importStar(require("path"));
38
38
  const PendingPromptLedger_js_1 = require("../../services/PendingPromptLedger.js");
39
- const SelaReporter_js_1 = require("../../reporter/SelaReporter.js");
39
+ const ArtifactAggregator_js_1 = require("../../services/ArtifactAggregator.js");
40
40
  const PRAutomationService_js_1 = require("../../services/PRAutomationService.js");
41
41
  /**
42
- * `sela pr aggregate --ledger-dir <path>`
42
+ * `sela pr generate --artifacts-dir <path>`
43
43
  *
44
- * CI fan-in: after all sharded Playwright runners complete and upload their
45
- * `.sela/pending-prompts` artifacts, the downstream merge job downloads
46
- * everything into one directory and calls this command to open a single
47
- * unified PR for the entire test suite.
44
+ * Phase 2 of the two-phase pipeline (RFC: docs/rfc-two-phase-reporting.md).
45
+ * After all sharded Playwright runners complete and upload their
46
+ * `.sela/artifacts` (v3 PR-intent artifacts; v2 pending-prompts ledgers are
47
+ * still accepted), the fan-in job downloads everything into one directory
48
+ * and calls this command to open a single unified PR for the entire suite.
49
+ *
50
+ * Dedup layers (RFC §5):
51
+ * 1. Intent identity — same stableId across shards collapses; divergent
52
+ * heals resolve to the highest (auditor, AI) confidence winner, with
53
+ * every rejected candidate disclosed in the PR body.
54
+ * 2. Patch merge — the winner's granular patch is preferred when shards
55
+ * disagree; identical duplicate patches are explicit no-ops.
56
+ * 3. Git idempotency — deterministic fingerprint branch + open-PR upsert
57
+ * gate live in PRAutomationService (P0-2).
48
58
  *
49
59
  * Typical GHA usage:
50
- * - Upload: actions/upload-artifact@v4 path: .sela/pending-prompts/
51
- * - Download: actions/download-artifact@v4 merge-multiple: true path: sela-ledgers/
52
- * - Run: npx sela pr aggregate --ledger-dir ./sela-ledgers
60
+ * - Upload: actions/upload-artifact@v4 path: .sela/artifacts/
61
+ * - Download: actions/download-artifact@v4 merge-multiple: true path: .sela/artifacts/
62
+ * - Run: npx sela pr generate
53
63
  */
54
64
  function registerPr(parent) {
55
65
  const pr = parent
56
66
  .command("pr")
57
67
  .description("Pull-request automation commands");
68
+ pr.command("generate")
69
+ .description("Aggregate shard PR-intent artifacts and open a single unified PR (CI fan-in)")
70
+ .option("--artifacts-dir <path>", "Directory containing all downloaded shard artifact JSON files", path.join(".sela", "artifacts"))
71
+ .option("--cwd <path>", "Repository root used for git operations (defaults to process.cwd())", process.cwd())
72
+ .action(async (opts) => {
73
+ await runPrFanIn(path.resolve(opts.cwd, opts.artifactsDir ?? path.join(".sela", "artifacts")), opts.cwd, "pr generate");
74
+ });
58
75
  pr.command("aggregate")
59
- .description("Aggregate sharded ledger files and open a single unified PR (CI fan-in)")
76
+ .description("[deprecated — use 'sela pr generate'] Aggregate sharded ledger files and open a single unified PR")
60
77
  .requiredOption("--ledger-dir <path>", "Directory containing all downloaded shard ledger JSON files")
61
78
  .option("--cwd <path>", "Repository root used for git operations (defaults to process.cwd())", process.cwd())
62
79
  .action(async (opts) => {
63
- const resolvedLedgerDir = path.resolve(opts.cwd, opts.ledgerDir);
64
- const payloads = (0, PendingPromptLedger_js_1.readGitPayloadsFromDir)(resolvedLedgerDir);
65
- if (payloads.length === 0) {
66
- console.error(`[sela pr aggregate] No ledger payloads found in ${resolvedLedgerDir} — nothing to do.`);
67
- return;
68
- }
69
- const healedEvents = (0, SelaReporter_js_1.deduplicateByStableId)(payloads.flatMap((p) => p.healedEvents));
70
- if (healedEvents.length === 0) {
71
- console.error("[sela pr aggregate] No healed events after deduplication — nothing to do.");
72
- return;
73
- }
74
- // Re-apply AST heals to disk before the git flow runs a diff.
75
- // The aggregator machine checked out the original (broken) source files
76
- // and never ran tests itself, so we must physically write the patched
77
- // code here — otherwise git sees 0 mutations and skips the PR entirely.
78
- //
79
- // mergeLedgerEntriesByFile applies each shard's granular patches
80
- // sequentially against the shared baseline so ALL shards' fixes are
81
- // preserved (no last-write-wins clobber). Falls back to contentAfter
82
- // blob for legacy ledgers that predate the patches field.
83
- const patchedCount = await (0, PendingPromptLedger_js_1.mergeLedgerEntriesByFile)(resolvedLedgerDir, opts.cwd);
84
- if (patchedCount === 0) {
85
- console.error("[sela pr aggregate] No source patches could be applied to disk — skipping PR.");
86
- return;
87
- }
88
- console.log(`[sela pr aggregate] Applied ${patchedCount} source patch(es) to disk.`);
89
- const protectedEvents = payloads.flatMap((p) => p.protectedEvents);
90
- await (0, PRAutomationService_js_1.runCentralizedGitFlow)({
91
- cwd: opts.cwd,
92
- healedEvents,
93
- protectedEvents,
94
- });
80
+ console.error("[sela] 'sela pr aggregate' is deprecated — use 'sela pr generate --artifacts-dir <path>'.");
81
+ await runPrFanIn(path.resolve(opts.cwd, opts.ledgerDir), opts.cwd, "pr aggregate");
82
+ });
83
+ }
84
+ async function runPrFanIn(resolvedDir, cwd, label) {
85
+ const aggregation = (0, ArtifactAggregator_js_1.aggregateIntents)(resolvedDir);
86
+ if (aggregation.artifactsRead === 0) {
87
+ console.error(`[sela ${label}] No intent/ledger payloads found in ${resolvedDir} — nothing to do.`);
88
+ return;
89
+ }
90
+ if (aggregation.healedEvents.length === 0) {
91
+ console.error(`[sela ${label}] No healed events after deduplication nothing to do.`);
92
+ return;
93
+ }
94
+ if (aggregation.advisories.length > 0) {
95
+ console.error(`[sela ${label}] ${aggregation.advisories.length} divergent heal(s) across shards — ` +
96
+ `highest-confidence candidates applied; all alternatives disclosed in the PR body.`);
97
+ }
98
+ // Re-apply AST heals to disk before the git flow runs a diff.
99
+ // The aggregator machine checked out the original (broken) source files
100
+ // and never ran tests itself, so we must physically write the patched
101
+ // code here — otherwise git sees 0 mutations and skips the PR entirely.
102
+ //
103
+ // mergeLedgerEntriesByFile applies each shard's granular patches
104
+ // sequentially against the shared baseline so ALL shards' fixes are
105
+ // preserved (no last-write-wins clobber); the preference map keeps the
106
+ // patch merge consistent with the intent winners above. Falls back to
107
+ // the contentAfter blob for legacy ledgers that predate the patches field.
108
+ const patchedCount = await (0, PendingPromptLedger_js_1.mergeLedgerEntriesByFile)(resolvedDir, cwd, {
109
+ preferredSourceByStableId: aggregation.preferredSourceByStableId,
110
+ });
111
+ if (patchedCount === 0) {
112
+ console.error(`[sela ${label}] No source patches could be applied to disk — skipping PR.`);
113
+ return;
114
+ }
115
+ console.log(`[sela ${label}] Applied ${patchedCount} source patch(es) to disk.`);
116
+ await (0, PRAutomationService_js_1.runCentralizedGitFlow)({
117
+ cwd,
118
+ healedEvents: aggregation.healedEvents,
119
+ protectedEvents: aggregation.protectedEvents,
120
+ bodyAppendix: (0, ArtifactAggregator_js_1.renderDivergenceAdvisories)(aggregation.advisories) || undefined,
95
121
  });
96
122
  }
@@ -0,0 +1,23 @@
1
+ import type { Command } from "commander";
2
+ /**
3
+ * `sela report generate [files...]`
4
+ *
5
+ * Phase 2 of the two-phase pipeline (RFC: docs/rfc-two-phase-reporting.md).
6
+ * Reads every raw report artifact the shards emitted
7
+ * (`sela-report-{shardId}-{workerId}-…​.json`, plus legacy `sela-shard-*.json`)
8
+ * from ONE directory and compiles them into the single unified
9
+ * `sela-report.html` / `sela-report.json` / `.sela-history.json` — the
10
+ * one-and-only writer of those files in a distributed CI run.
11
+ *
12
+ * `expectedShards` is auto-derived from the `sela-run-meta-*.json` fragments
13
+ * each shard's reporter emitted; `--expected-shards` overrides. Stateless and
14
+ * idempotent: re-running against the same directory reproduces the same
15
+ * output.
16
+ *
17
+ * Typical GHA usage:
18
+ * - Per shard: actions/upload-artifact@v4 path: .sela/artifacts/
19
+ * - Fan-in: actions/download-artifact@v4 merge-multiple: true path: .sela/artifacts/
20
+ * - Run: npx sela report generate
21
+ */
22
+ export declare function registerReport(program: Command): void;
23
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqGrD"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerReport = registerReport;
37
+ const path = __importStar(require("path"));
38
+ const ReportMergeService_js_1 = require("../../services/ReportMergeService.js");
39
+ const ArtifactAggregator_js_1 = require("../../services/ArtifactAggregator.js");
40
+ const SelaError_js_1 = require("../../errors/SelaError.js");
41
+ /**
42
+ * `sela report generate [files...]`
43
+ *
44
+ * Phase 2 of the two-phase pipeline (RFC: docs/rfc-two-phase-reporting.md).
45
+ * Reads every raw report artifact the shards emitted
46
+ * (`sela-report-{shardId}-{workerId}-…​.json`, plus legacy `sela-shard-*.json`)
47
+ * from ONE directory and compiles them into the single unified
48
+ * `sela-report.html` / `sela-report.json` / `.sela-history.json` — the
49
+ * one-and-only writer of those files in a distributed CI run.
50
+ *
51
+ * `expectedShards` is auto-derived from the `sela-run-meta-*.json` fragments
52
+ * each shard's reporter emitted; `--expected-shards` overrides. Stateless and
53
+ * idempotent: re-running against the same directory reproduces the same
54
+ * output.
55
+ *
56
+ * Typical GHA usage:
57
+ * - Per shard: actions/upload-artifact@v4 path: .sela/artifacts/
58
+ * - Fan-in: actions/download-artifact@v4 merge-multiple: true path: .sela/artifacts/
59
+ * - Run: npx sela report generate
60
+ */
61
+ function registerReport(program) {
62
+ const report = program
63
+ .command("report")
64
+ .description("Two-phase report commands (CI fan-in)");
65
+ report
66
+ .command("generate")
67
+ .argument("[files...]", "Explicit raw report artifact files. When omitted, --artifacts-dir is scanned.")
68
+ .description("Compile all raw shard report artifacts into one unified sela-report.html (CI fan-in)")
69
+ .option("--artifacts-dir <path>", "Directory containing the downloaded shard artifacts", path.join(".sela", "artifacts"))
70
+ .option("--dir <path>", "Output dir for the merged report + rolling history", process.cwd())
71
+ .option("--run-id <id>", "Single dedup id for the merged history row (defaults to GITHUB_RUN_ID / CI_PIPELINE_ID)")
72
+ .option("--expected-shards <n>", "Override the auto-computed shard expectation (from sela-run-meta-*.json)")
73
+ .action(async (files, opts) => {
74
+ const targetDir = path.resolve(opts.dir ?? process.cwd());
75
+ const artifactsDir = path.resolve(targetDir, opts.artifactsDir ?? path.join(".sela", "artifacts"));
76
+ const shardFiles = files && files.length > 0
77
+ ? files.map((f) => path.resolve(f))
78
+ : (0, ArtifactAggregator_js_1.discoverReportArtifacts)(artifactsDir);
79
+ if (shardFiles.length === 0) {
80
+ process.stderr.write(`[sela] No report artifacts found in ${artifactsDir}.\n` +
81
+ ` A merged report with a healed:0 history row will still be written ` +
82
+ `to keep the trend cadence intact.\n`);
83
+ }
84
+ const expectedShards = parsePositiveInt(opts.expectedShards) ??
85
+ (0, ArtifactAggregator_js_1.discoverExpectedShards)(artifactsDir);
86
+ let result;
87
+ try {
88
+ result = ReportMergeService_js_1.ReportMergeService.merge({
89
+ shardFiles,
90
+ targetDir,
91
+ runId: opts.runId,
92
+ expectedShards,
93
+ });
94
+ }
95
+ catch (err) {
96
+ // A corrupt prior history (HISTORY_CORRUPT) is the one hard-fail: we
97
+ // must not silently overwrite a durable rolling window.
98
+ if ((0, SelaError_js_1.isSelaError)(err)) {
99
+ process.stderr.write(`[sela] report generate aborted: ${err.message}\n`);
100
+ }
101
+ else {
102
+ const msg = err instanceof Error ? err.message : String(err);
103
+ process.stderr.write(`[sela] report generate failed: ${msg}\n`);
104
+ }
105
+ process.exit(1);
106
+ return;
107
+ }
108
+ process.stdout.write(`[sela] Unified report written: ${result.htmlPath}\n` +
109
+ ` shards: ${result.shardsRead}` +
110
+ (result.shardsExpected != null ? `/${result.shardsExpected}` : "") +
111
+ ` events: ${result.uniqueEvents}` +
112
+ (result.duplicatesDropped > 0
113
+ ? ` (${result.duplicatesDropped} dup dropped)`
114
+ : "") +
115
+ ` history: ${result.data.historical_runs.length} run(s)\n`);
116
+ if (result.manifestPath) {
117
+ process.stdout.write(`[sela] Unified regression manifest: ${result.manifestPath} ` +
118
+ `(${result.manifestRecords} bypass record(s))\n` +
119
+ ` Verify with: npx sela shadow-regression\n`);
120
+ }
121
+ // Partial merges are surfaced but DO NOT fail the job (aggregate-and-flag).
122
+ if (result.partial) {
123
+ process.exitCode = 0;
124
+ }
125
+ });
126
+ }
127
+ function parsePositiveInt(raw) {
128
+ if (raw == null)
129
+ return undefined;
130
+ const n = Number.parseInt(raw, 10);
131
+ return Number.isFinite(n) && n > 0 ? n : undefined;
132
+ }
package/dist/cli/index.js CHANGED
@@ -54,6 +54,7 @@ const bulk_js_1 = require("./commands/bulk.js");
54
54
  const sync_js_1 = require("./commands/sync.js");
55
55
  const dnaSync_js_1 = require("./commands/dnaSync.js");
56
56
  const showReport_js_1 = require("./commands/showReport.js");
57
+ const report_js_1 = require("./commands/report.js");
57
58
  const merge_js_1 = require("./commands/merge.js");
58
59
  const shadowRegression_js_1 = require("./commands/shadowRegression.js");
59
60
  const pr_js_1 = require("./commands/pr.js");
@@ -78,7 +79,9 @@ program
78
79
  (0, list_js_1.registerList)(program);
79
80
  // ── sela show-report - open Sela Insights HTML ───────────────────────────────
80
81
  (0, showReport_js_1.registerShowReport)(program);
81
- // ── sela merge - CI fan-in: aggregate sharded reports into one ────────────────
82
+ // ── sela report generate - two-phase CI fan-in (RFC) ──────────────────────────
83
+ (0, report_js_1.registerReport)(program);
84
+ // ── sela merge - [deprecated] CI fan-in: aggregate sharded reports into one ───
82
85
  (0, merge_js_1.registerMerge)(program);
83
86
  // ── sela shadow-regression - Job 2: verify bypassed shared-locator heals ──────
84
87
  (0, shadowRegression_js_1.registerShadowRegression)(program);
@@ -1 +1 @@
1
- {"version":3,"file":"ConventionsTable.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/ConventionsTable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CA8B7D"}
1
+ {"version":3,"file":"ConventionsTable.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/ConventionsTable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CA6B7D"}
@@ -19,7 +19,7 @@ function renderConventionsTable(c) {
19
19
  });
20
20
  const conf = c._meta.confidence;
21
21
  const confColor = conf >= 0.8 ? chalk_1.default.green : conf >= 0.6 ? chalk_1.default.yellow : chalk_1.default.red;
22
- table.push([chalk_1.default.cyan("Strategy"), c.strategies.preferred.join(chalk_1.default.dim(" › "))], [chalk_1.default.cyan("Test-id attr"), c.strategies.testIdAttribute], [
22
+ table.push([chalk_1.default.cyan("Strategy"), c.strategies.preferred.join(chalk_1.default.dim(" › "))], [
23
23
  chalk_1.default.cyan("Architecture"),
24
24
  c.architecture.selectorSource
25
25
  ? `${c.architecture.mode} ${chalk_1.default.dim(`(${c.architecture.selectorSource})`)}`
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAgSzE,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA+B;IACtD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAuB;IAK5C,OAAO,CAAC,MAAM,CAAC,aAAa,CAA2B;IAEvD;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc;IAqCpC;;;;OAIG;IACH,MAAM,CAAC,YAAY,IAAI,UAAU;IAKjC,OAAO,CAAC,MAAM,CAAC,aAAa;IAsB5B,yEAAyE;IACzE,MAAM,CAAC,SAAS,IAAI,MAAM,GAAG,IAAI;IAKjC,uDAAuD;IACvD,MAAM,CAAC,KAAK,IAAI,IAAI;CAKrB"}
1
+ {"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAiSzE,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA+B;IACtD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAuB;IAK5C,OAAO,CAAC,MAAM,CAAC,aAAa,CAA2B;IAEvD;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc;IAqCpC;;;;OAIG;IACH,MAAM,CAAC,YAAY,IAAI,UAAU;IAKjC,OAAO,CAAC,MAAM,CAAC,aAAa;IAsB5B,yEAAyE;IACzE,MAAM,CAAC,SAAS,IAAI,MAAM,GAAG,IAAI;IAKjC,uDAAuD;IACvD,MAAM,CAAC,KAAK,IAAI,IAAI;CAKrB"}
@@ -63,6 +63,7 @@ const KNOWN_CONFIG_KEYS = new Set([
63
63
  "branchOverrides",
64
64
  "llm",
65
65
  "healing",
66
+ "reporting",
66
67
  ]);
67
68
  // ─────────────────────────────────────────────────────────────────
68
69
  // FILE DISCOVERY
@@ -1,3 +1,4 @@
1
+ import { type ReportMode } from "../services/ArtifactNaming";
1
2
  export type PRStrategy = "directCommit" | "pr" | "draftPR" | "readOnly";
2
3
  export type BugAction = "failCI" | "createIssue" | "labelOnly";
3
4
  export interface SelaPRAutomationConfig {
@@ -154,9 +155,27 @@ export interface SelaHealingConfig {
154
155
  /** Honor `@sela-no-heal` tags / `{ type:'sela' }` annotations. Default true. */
155
156
  annotations?: boolean;
156
157
  }
158
+ /**
159
+ * Two-Phase Reporting (RFC: docs/rfc-two-phase-reporting.md).
160
+ * Controls WHEN the HTML report + git/PR flow execute.
161
+ */
162
+ export interface SelaReportingConfig {
163
+ /**
164
+ * - 'auto' (default): local runs and single-machine CI stay eager
165
+ * (report + PR flow in the reporter's onEnd); CI runs with a shard
166
+ * signal (`--shard=N/M` or `SELA_SHARD_ID`) defer to the fan-in job.
167
+ * - 'eager': always finalize in onEnd (legacy behavior).
168
+ * - 'deferred': onEnd only emits raw JSON artifacts under `.sela/artifacts/`;
169
+ * `sela report generate` + `sela pr generate` own the fan-in.
170
+ * Env `SELA_REPORT_MODE` overrides this value.
171
+ */
172
+ mode?: ReportMode;
173
+ }
157
174
  export interface SelaConfig {
158
175
  /** Shorthand preset that expands to concrete threshold values. */
159
176
  healingPolicy?: "conservative" | "balanced" | "aggressive";
177
+ /** Two-phase reporting mode (Allure pattern). Default: { mode: 'auto' }. */
178
+ reporting?: SelaReportingConfig;
160
179
  /** Fine-grained threshold overrides. Explicit values always win over preset expansion. */
161
180
  thresholds?: {
162
181
  /** Minimum AI confidence to attempt a heal. Default: 85. Maps to CONFIDENCE_HARD_STOP. */
@@ -277,6 +296,40 @@ export interface SelaConfig {
277
296
  * env vars (backward-compatible with all existing setups).
278
297
  */
279
298
  llm?: LLMConfig;
299
+ /**
300
+ * Deadline-aware healing timing (RFC timing-interception). Controls the
301
+ * first-attempt budget tightening near the test deadline (Mechanism A) and
302
+ * the anti-guillotine test-timeout extension that buys healing runway
303
+ * (Mechanism B). Omit for the defaults; all fields are individually
304
+ * overridable and the whole feature is kill-switchable via SELA_TIMING_DISABLE.
305
+ */
306
+ timing?: SelaTimingConfig;
307
+ }
308
+ /** Deadline-aware healing timing (RFC timing-interception §8). */
309
+ export interface SelaTimingConfig {
310
+ /**
311
+ * Extend the running test's total timeout when a heal begins, so DOM
312
+ * extraction + LLM + verified retry complete before the native guillotine.
313
+ * Default: true.
314
+ */
315
+ extendTestTimeout?: boolean;
316
+ /**
317
+ * Safety margin (ms) subtracted from the remaining test time when Sela
318
+ * tightens the first-attempt budget, guaranteeing the action fails — handing
319
+ * control to the heal pipeline — strictly BEFORE the page is torn down.
320
+ * Default: 2000.
321
+ */
322
+ deadlineBufferMs?: number;
323
+ /** Milliseconds of fresh runway added to the test timeout per heal. Default: 30000. */
324
+ healRunwayMs?: number;
325
+ /**
326
+ * Floor (ms) below which the first-attempt budget is never tightened — keeps
327
+ * auto-wait able to distinguish "slow to appear" from "genuinely gone".
328
+ * Default: 1000.
329
+ */
330
+ minActionFloorMs?: number;
331
+ /** Max test-timeout extensions per test (bounds a multi-heal test). Default: 3. */
332
+ maxExtensionsPerTest?: number;
280
333
  }
281
334
  export interface ResolvedVectorThresholds {
282
335
  /** Minimum DNA Architectural Match score (0–100). null = disabled. */
@@ -349,8 +402,17 @@ export interface ResolvedPlaywrightRules {
349
402
  testIdAttribute: string;
350
403
  preferGetByRoleOverCss: boolean;
351
404
  }
405
+ export interface ResolvedReporting {
406
+ /**
407
+ * The CONFIGURED mode after the `SELA_REPORT_MODE` env override. `auto` is
408
+ * collapsed into eager/deferred at the reporter layer, where the Playwright
409
+ * shard signal is known (see ArtifactNaming.resolveEffectiveReportMode).
410
+ */
411
+ mode: ReportMode;
412
+ }
352
413
  export interface ResolvedConfig {
353
414
  thresholds: ResolvedThresholds;
415
+ reporting: ResolvedReporting;
354
416
  updateStrategy: "inPlace" | "commentOnly" | "branch";
355
417
  autoCommit: boolean;
356
418
  dnaStoragePath: string;
@@ -420,6 +482,18 @@ export interface ResolvedConfig {
420
482
  * `undefined` when not set.
421
483
  */
422
484
  regressionManifestPath: string | undefined;
485
+ /** Resolved deadline-aware healing timing (always defaulted). */
486
+ timing: ResolvedTiming;
487
+ }
488
+ /** Resolved deadline-aware healing timing (RFC timing-interception §8). */
489
+ export interface ResolvedTiming {
490
+ /** Master switch. `false` (via SELA_TIMING_DISABLE) ⇒ pure legacy pass-through. */
491
+ enabled: boolean;
492
+ extendTestTimeout: boolean;
493
+ deadlineBufferMs: number;
494
+ healRunwayMs: number;
495
+ minActionFloorMs: number;
496
+ maxExtensionsPerTest: number;
423
497
  }
424
498
  export declare function resolveThresholds(config: SelaConfig): ResolvedThresholds;
425
499
  export declare function parseEnvBoolean(varName: string, rawValue: string | undefined): boolean;
@@ -442,6 +516,14 @@ export declare function resolveSmartPrune(configValue: boolean | undefined, envV
442
516
  * Trust-Engine refusal semantics. undefined => 5000.
443
517
  */
444
518
  export declare function resolveLargeDomNodeThreshold(value: number | undefined): number;
519
+ /**
520
+ * Resolves deadline-aware healing timing. Env wins over config. A positive-
521
+ * integer env override is required for the numeric knobs (fail-fast on
522
+ * garbage, mirroring resolveLargeDomNodeThreshold). Master kill switch:
523
+ * SELA_TIMING_DISABLE=true ⇒ enabled:false ⇒ the proxy stays pure legacy
524
+ * pass-through (no injection, no extension).
525
+ */
526
+ export declare function resolveTiming(config: SelaConfig, env?: NodeJS.ProcessEnv): ResolvedTiming;
445
527
  export interface ResolvedHealingConfig {
446
528
  enabled: boolean;
447
529
  exclude: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"SelaConfig.d.ts","sourceRoot":"","sources":["../../src/config/SelaConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelaConfig.d.ts","sourceRoot":"","sources":["../../src/config/SelaConfig.ts"],"names":[],"mappings":"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"}