@codyswann/lisa 4.27.8 → 4.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +36 -2
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +5 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-validate-tracker-mapping/SKILL.md +134 -3
- package/plugins/lisa/scripts/repo-scope-vocabulary-audit.mjs +458 -0
- package/plugins/lisa/skills/lisa-validate-tracker-mapping/SKILL.md +135 -4
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/scripts/repo-scope-vocabulary-audit.mjs +458 -0
- package/plugins/lisa-agy/skills/lisa-validate-tracker-mapping/SKILL.md +135 -4
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/scripts/repo-scope-vocabulary-audit.mjs +458 -0
- package/plugins/lisa-copilot/skills/lisa-validate-tracker-mapping/SKILL.md +135 -4
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/scripts/repo-scope-vocabulary-audit.mjs +458 -0
- package/plugins/lisa-cursor/skills/lisa-validate-tracker-mapping/SKILL.md +135 -4
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/scripts/repo-scope-vocabulary-audit.mjs +458 -0
- package/plugins/src/base/skills/lisa-validate-tracker-mapping/SKILL.md +135 -4
- package/scripts/lib/mutation-performance-reporter.mjs +135 -0
- package/scripts/mutation-performance-measure.mjs +1794 -0
- package/scripts/mutation-performance.schema.json +103 -0
- package/typescript/create-only/.github/workflows/review-evidence.yml +18 -10
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/CodySwannGT/lisa/schemas/mutation-performance-v1.json",
|
|
4
|
+
"title": "Lisa mutation measurement evidence",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schema_version", "conclusion", "identity", "protocol", "selection", "phases_ms", "resources", "results", "cache", "cleanup", "digests"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schema_version": { "const": "lisa.mutation-measurement/v1" },
|
|
10
|
+
"conclusion": { "const": "measurement-only" },
|
|
11
|
+
"identity": { "$ref": "#/$defs/identity" },
|
|
12
|
+
"protocol": { "$ref": "#/$defs/protocol" },
|
|
13
|
+
"selection": { "$ref": "#/$defs/selection" },
|
|
14
|
+
"phases_ms": { "$ref": "#/$defs/phases" },
|
|
15
|
+
"resources": { "$ref": "#/$defs/resources" },
|
|
16
|
+
"results": { "$ref": "#/$defs/results" },
|
|
17
|
+
"cache": { "$ref": "#/$defs/cache" },
|
|
18
|
+
"cleanup": { "$ref": "#/$defs/cleanup" },
|
|
19
|
+
"digests": { "$ref": "#/$defs/digests" }
|
|
20
|
+
},
|
|
21
|
+
"$defs": {
|
|
22
|
+
"sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
|
|
23
|
+
"sha40": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
|
|
24
|
+
"nonnegative": { "type": "number", "minimum": 0, "maximum": 9007199254740991 },
|
|
25
|
+
"positiveInteger": { "type": "integer", "minimum": 1, "maximum": 10000000 },
|
|
26
|
+
"stringArray": { "type": "array", "maxItems": 10000, "items": { "type": "string", "minLength": 1, "maxLength": 4096 } },
|
|
27
|
+
"identity": {
|
|
28
|
+
"type": "object", "additionalProperties": false,
|
|
29
|
+
"required": ["subject_sha", "tree_sha", "package_sha256", "package_version", "stack", "runner_family", "fixture_schema", "fixture_sha256", "host_base_sha", "host_head_sha", "run_id", "job_id", "run_attempt", "ubuntu_image", "node_version", "bun_version", "npm_version", "stryker_version", "runner_version", "lock_sha256", "package_json_sha256", "runner_sha256", "raw_config_sha256", "effective_config_sha256", "gate_sha256", "workflow_sha256", "source_sha256", "test_sha256"],
|
|
30
|
+
"properties": {
|
|
31
|
+
"subject_sha": { "$ref": "#/$defs/sha40" }, "tree_sha": { "$ref": "#/$defs/sha40" },
|
|
32
|
+
"package_sha256": { "$ref": "#/$defs/sha256" }, "package_version": { "type": "string", "minLength": 1, "maxLength": 100 },
|
|
33
|
+
"stack": { "enum": ["vitest", "jest"] }, "runner_family": { "enum": ["vitest", "jest"] },
|
|
34
|
+
"fixture_schema": { "const": "fixture/v1" }, "fixture_sha256": { "$ref": "#/$defs/sha256" },
|
|
35
|
+
"host_base_sha": { "$ref": "#/$defs/sha40" }, "host_head_sha": { "$ref": "#/$defs/sha40" },
|
|
36
|
+
"run_id": { "type": "string", "pattern": "^[0-9]+$" }, "job_id": { "type": "string", "minLength": 1, "maxLength": 200 },
|
|
37
|
+
"run_attempt": { "$ref": "#/$defs/positiveInteger" }, "ubuntu_image": { "type": "string", "minLength": 1, "maxLength": 200 },
|
|
38
|
+
"node_version": { "type": "string", "minLength": 1, "maxLength": 100 }, "bun_version": { "type": "string", "minLength": 1, "maxLength": 100 },
|
|
39
|
+
"npm_version": { "type": "string", "minLength": 1, "maxLength": 100 }, "stryker_version": { "type": "string", "minLength": 1, "maxLength": 100 },
|
|
40
|
+
"runner_version": { "type": "string", "minLength": 1, "maxLength": 100 },
|
|
41
|
+
"lock_sha256": { "$ref": "#/$defs/sha256" }, "package_json_sha256": { "$ref": "#/$defs/sha256" },
|
|
42
|
+
"runner_sha256": { "$ref": "#/$defs/sha256" }, "raw_config_sha256": { "$ref": "#/$defs/sha256" },
|
|
43
|
+
"effective_config_sha256": { "$ref": "#/$defs/sha256" }, "gate_sha256": { "$ref": "#/$defs/sha256" },
|
|
44
|
+
"workflow_sha256": { "$ref": "#/$defs/sha256" }, "source_sha256": { "$ref": "#/$defs/sha256" }, "test_sha256": { "$ref": "#/$defs/sha256" }
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"protocol": {
|
|
48
|
+
"type": "object", "additionalProperties": false,
|
|
49
|
+
"required": ["role", "draw", "mode", "started_at", "finished_at", "invalid_reasons", "cold_parent_summary_sha256", "cold_parent_incremental_sha256"],
|
|
50
|
+
"properties": {
|
|
51
|
+
"role": { "enum": ["baseline", "candidate"] }, "draw": { "type": "integer", "minimum": 1, "maximum": 3 },
|
|
52
|
+
"mode": { "enum": ["cold", "warm-local"] }, "started_at": { "type": "string", "format": "date-time" },
|
|
53
|
+
"finished_at": { "type": "string", "format": "date-time" }, "invalid_reasons": { "$ref": "#/$defs/stringArray" },
|
|
54
|
+
"cold_parent_summary_sha256": { "oneOf": [{ "$ref": "#/$defs/sha256" }, { "type": "null" }] },
|
|
55
|
+
"cold_parent_incremental_sha256": { "oneOf": [{ "$ref": "#/$defs/sha256" }, { "type": "null" }] }
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"testIdentity": {
|
|
59
|
+
"type": "object", "additionalProperties": false, "required": ["file", "name", "location"],
|
|
60
|
+
"properties": { "file": { "type": "string", "minLength": 1, "maxLength": 4096 }, "name": { "type": "string", "minLength": 1, "maxLength": 4096 }, "location": { "type": "string", "pattern": "^[0-9]+:[0-9]+$" } }
|
|
61
|
+
},
|
|
62
|
+
"mutantIdentity": {
|
|
63
|
+
"type": "object", "additionalProperties": false, "required": ["file", "mutator", "start", "end", "replacement_sha256"],
|
|
64
|
+
"properties": { "file": { "type": "string", "minLength": 1, "maxLength": 4096 }, "mutator": { "type": "string", "minLength": 1, "maxLength": 300 }, "start": { "type": "string", "pattern": "^[0-9]+:[0-9]+$" }, "end": { "type": "string", "pattern": "^[0-9]+:[0-9]+$" }, "replacement_sha256": { "$ref": "#/$defs/sha256" } }
|
|
65
|
+
},
|
|
66
|
+
"selection": {
|
|
67
|
+
"type": "object", "additionalProperties": false, "required": ["merge_base", "head", "changed_paths", "mutate_files", "tests", "mutants"],
|
|
68
|
+
"properties": { "merge_base": { "$ref": "#/$defs/sha40" }, "head": { "$ref": "#/$defs/sha40" }, "changed_paths": { "$ref": "#/$defs/stringArray" }, "mutate_files": { "$ref": "#/$defs/stringArray" }, "tests": { "type": "array", "minItems": 1, "maxItems": 100000, "items": { "$ref": "#/$defs/testIdentity" } }, "mutants": { "type": "array", "minItems": 1, "maxItems": 1000000, "items": { "$ref": "#/$defs/mutantIdentity" } } }
|
|
69
|
+
},
|
|
70
|
+
"phases": {
|
|
71
|
+
"type": "object", "additionalProperties": false, "required": ["install", "runner_setup", "instrumentation", "dry_run", "plan", "mutation", "reporting", "teardown", "end_to_end", "clock_tolerance"],
|
|
72
|
+
"properties": { "install": { "$ref": "#/$defs/nonnegative" }, "runner_setup": { "$ref": "#/$defs/nonnegative" }, "instrumentation": { "$ref": "#/$defs/nonnegative" }, "dry_run": { "$ref": "#/$defs/nonnegative" }, "plan": { "$ref": "#/$defs/nonnegative" }, "mutation": { "$ref": "#/$defs/nonnegative" }, "reporting": { "$ref": "#/$defs/nonnegative" }, "teardown": { "$ref": "#/$defs/nonnegative" }, "end_to_end": { "$ref": "#/$defs/nonnegative" }, "clock_tolerance": { "$ref": "#/$defs/nonnegative" } }
|
|
73
|
+
},
|
|
74
|
+
"resources": {
|
|
75
|
+
"type": "object", "additionalProperties": false, "required": ["detected_cpus", "peak_cpu_pct", "median_cpu_pct", "peak_rss_bytes", "peak_process_count", "sample_count"],
|
|
76
|
+
"properties": { "detected_cpus": { "$ref": "#/$defs/positiveInteger" }, "peak_cpu_pct": { "$ref": "#/$defs/nonnegative" }, "median_cpu_pct": { "$ref": "#/$defs/nonnegative" }, "peak_rss_bytes": { "$ref": "#/$defs/nonnegative" }, "peak_process_count": { "$ref": "#/$defs/positiveInteger" }, "sample_count": { "type": "integer", "minimum": 2, "maximum": 100000 } }
|
|
77
|
+
},
|
|
78
|
+
"statuses": {
|
|
79
|
+
"type": "object", "additionalProperties": false, "required": ["Killed", "Survived", "NoCoverage", "Timeout", "Ignored", "CompileError", "RuntimeError", "Pending"],
|
|
80
|
+
"properties": { "Killed": { "$ref": "#/$defs/nonnegative" }, "Survived": { "$ref": "#/$defs/nonnegative" }, "NoCoverage": { "$ref": "#/$defs/nonnegative" }, "Timeout": { "$ref": "#/$defs/nonnegative" }, "Ignored": { "$ref": "#/$defs/nonnegative" }, "CompileError": { "$ref": "#/$defs/nonnegative" }, "RuntimeError": { "$ref": "#/$defs/nonnegative" }, "Pending": { "$ref": "#/$defs/nonnegative" } }
|
|
81
|
+
},
|
|
82
|
+
"thresholds": {
|
|
83
|
+
"type": "object", "additionalProperties": false, "required": ["high", "low", "break"],
|
|
84
|
+
"properties": { "high": { "type": "number", "minimum": 0, "maximum": 100 }, "low": { "type": "number", "minimum": 0, "maximum": 100 }, "break": { "type": "number", "minimum": 0, "maximum": 100 } }
|
|
85
|
+
},
|
|
86
|
+
"results": {
|
|
87
|
+
"type": "object", "additionalProperties": false, "required": ["statuses", "expected_total", "observed_total", "thresholds", "reported_score", "timeout_recomputed_score", "exit_code", "signal", "verdict", "named_survivors"],
|
|
88
|
+
"properties": { "statuses": { "$ref": "#/$defs/statuses" }, "expected_total": { "$ref": "#/$defs/positiveInteger" }, "observed_total": { "$ref": "#/$defs/positiveInteger" }, "thresholds": { "$ref": "#/$defs/thresholds" }, "reported_score": { "type": "number", "minimum": 0, "maximum": 100 }, "timeout_recomputed_score": { "type": "number", "minimum": 0, "maximum": 100 }, "exit_code": { "type": ["integer", "null"] }, "signal": { "type": ["string", "null"] }, "verdict": { "enum": ["passed", "threshold-red"] }, "named_survivors": { "$ref": "#/$defs/stringArray" } }
|
|
89
|
+
},
|
|
90
|
+
"cache": {
|
|
91
|
+
"type": "object", "additionalProperties": false, "required": ["incremental_configured", "before_exists", "before_sha256", "after_exists", "after_sha256", "cold_parent_identity", "disposition", "remote_read", "remote_write"],
|
|
92
|
+
"properties": { "incremental_configured": { "type": "boolean" }, "before_exists": { "type": "boolean" }, "before_sha256": { "oneOf": [{ "$ref": "#/$defs/sha256" }, { "type": "null" }] }, "after_exists": { "type": "boolean" }, "after_sha256": { "oneOf": [{ "$ref": "#/$defs/sha256" }, { "type": "null" }] }, "cold_parent_identity": { "oneOf": [{ "$ref": "#/$defs/sha256" }, { "type": "null" }] }, "disposition": { "enum": ["cold-empty", "diagnostic-local-reuse"] }, "remote_read": { "const": false }, "remote_write": { "const": false } }
|
|
93
|
+
},
|
|
94
|
+
"cleanup": {
|
|
95
|
+
"type": "object", "additionalProperties": false, "required": ["root_pid", "root_birth_tick", "signal_forwarded", "kill_reason", "descendant_survivors", "sandbox_entries_before", "sandbox_entries_after", "sampler_healthy"],
|
|
96
|
+
"properties": { "root_pid": { "$ref": "#/$defs/positiveInteger" }, "root_birth_tick": { "type": "string", "minLength": 1, "maxLength": 100 }, "signal_forwarded": { "type": ["string", "null"] }, "kill_reason": { "type": ["string", "null"] }, "descendant_survivors": { "const": 0 }, "sandbox_entries_before": { "$ref": "#/$defs/nonnegative" }, "sandbox_entries_after": { "const": 0 }, "sampler_healthy": { "const": true } }
|
|
97
|
+
},
|
|
98
|
+
"digests": {
|
|
99
|
+
"type": "object", "additionalProperties": false, "required": ["phase_events_sha256", "process_samples_sha256", "selection_sha256", "stryker_report_sha256", "runner_log_sha256", "host_manifest_sha256"],
|
|
100
|
+
"properties": { "phase_events_sha256": { "$ref": "#/$defs/sha256" }, "process_samples_sha256": { "$ref": "#/$defs/sha256" }, "selection_sha256": { "$ref": "#/$defs/sha256" }, "stryker_report_sha256": { "$ref": "#/$defs/sha256" }, "runner_log_sha256": { "$ref": "#/$defs/sha256" }, "host_manifest_sha256": { "$ref": "#/$defs/sha256" } }
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -24,14 +24,22 @@
|
|
|
24
24
|
# the entire run (#2049). A standalone workflow declares its own permissions and
|
|
25
25
|
# constrains nothing else.
|
|
26
26
|
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
33
|
-
#
|
|
34
|
-
#
|
|
27
|
+
# ENFORCING. `--require-review-evidence` requires the declared review check to
|
|
28
|
+
# account for its verdict. A review that RAN AND OBJECTED blocks. These two
|
|
29
|
+
# vendor-owned outcomes remain explicit waivers: `Review rate limited` and
|
|
30
|
+
# `Review skipped: manual review required for this OSS repository`. They stay
|
|
31
|
+
# loud and nonblocking because a pull request author cannot fix the entitlement.
|
|
32
|
+
#
|
|
33
|
+
# A rate-limit queue may be roughly hour-long. Agentic delivery retries through
|
|
34
|
+
# it, with an auditable admin-merge only at the exterior governance gate after
|
|
35
|
+
# every other required check and independent review has passed.
|
|
36
|
+
#
|
|
37
|
+
# `--fail-on-vacuous` is a DIFFERENT switch and is not passed here. It governs
|
|
38
|
+
# other vacuity findings; named review waivers remain nonblocking under it.
|
|
39
|
+
# `--require-review-evidence` alone controls review-gate blocking.
|
|
40
|
+
#
|
|
41
|
+
# THREE STATES, NEVER TWO. `absent` is not `waived`: no review result means
|
|
42
|
+
# nothing accounts for the silence and the gate must refuse it.
|
|
35
43
|
#
|
|
36
44
|
# It CAN still go red, for one reason that is not a finding: the arm inspected
|
|
37
45
|
# NOTHING. An unresolvable pull request, a `gh` it could not read, an empty
|
|
@@ -116,7 +124,7 @@ jobs:
|
|
|
116
124
|
exit 1
|
|
117
125
|
fi
|
|
118
126
|
if [ -n "${VACUITY_PR:-}" ]; then
|
|
119
|
-
node scripts/check-skipped-required-checks.mjs --vacuity --pr="$VACUITY_PR"
|
|
127
|
+
node scripts/check-skipped-required-checks.mjs --vacuity --require-review-evidence --pr="$VACUITY_PR"
|
|
120
128
|
else
|
|
121
|
-
node scripts/check-skipped-required-checks.mjs --vacuity
|
|
129
|
+
node scripts/check-skipped-required-checks.mjs --vacuity --require-review-evidence
|
|
122
130
|
fi
|