@dailephd/my-dev-kit-lab 0.4.4 → 0.4.5
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/CHANGELOG.md +468 -0
- package/README.md +3 -1
- package/dist/scripts/report-context-integrity-smoke.js +70 -0
- package/dist/src/evaluation/ecosystemFixtures/index.js +3 -0
- package/dist/src/evaluation/ecosystemFixtures/loadContextIntegrityFixture.js +102 -0
- package/dist/src/evaluation/ecosystemFixtures/manifestTypes.js +1 -0
- package/dist/src/evaluation/ecosystemFixtures/validateManifest.js +82 -0
- package/dist/src/evaluation/ecosystemFixtures/verifyFixtureHashes.js +45 -0
- package/dist/src/evaluation/stageContextMetrics/calculateAllocationMetrics.js +169 -0
- package/dist/src/evaluation/stageContextMetrics/calculateConditionCoverageMetrics.js +74 -0
- package/dist/src/evaluation/stageContextMetrics/calculateProducerConditionAgreement.js +113 -0
- package/dist/src/evaluation/stageContextMetrics/calculateReadinessAgreement.js +60 -0
- package/dist/src/evaluation/stageContextMetrics/calculateRunIntegrityAgreement.js +309 -0
- package/dist/src/evaluation/stageContextMetrics/calculateSupplementalRawAgreement.js +12 -2
- package/dist/src/evaluation/stageContextMetrics/calculateTruncationClassification.js +100 -0
- package/dist/src/evaluation/stageContextMetrics/evaluateProducerReadinessBridge.js +76 -5
- package/dist/src/evaluation/stageContextMetrics/index.js +4 -0
- package/dist/src/evaluation/stageContextMetrics/runIntegrityAgreementTypes.js +1 -0
- package/dist/src/evaluation/stageContextSelectors/contextArtifactConsistency.js +7 -0
- package/dist/src/evaluation/stageContextSelectors/index.js +1 -0
- package/dist/src/evaluation/stageContextSelectors/orchestratorRunIntegritySelectors.js +64 -0
- package/dist/src/evaluation/upstreamArtifacts/index.js +2 -0
- package/dist/src/evaluation/upstreamArtifacts/orchestratorRunIntegrityV1.js +33 -0
- package/dist/src/evaluation/upstreamArtifacts/readOrchestratorRunIntegrityV1.js +9 -0
- package/dist/src/evaluation/upstreamArtifacts/validateMyDevKitContextCapsuleV1.js +59 -2
- package/dist/src/evaluation/upstreamArtifacts/validateMyDevKitRetrievalAuditRecordV1.js +6 -1
- package/dist/src/evaluation/upstreamArtifacts/validateOrchestratorRunIntegrityV1.js +177 -0
- package/dist/src/report/experiments/buildContextIntegrityReport.js +204 -0
- package/dist/src/report/experiments/contextIntegrityReportModel.js +1 -0
- package/dist/src/report/experiments/index.js +5 -0
- package/dist/src/report/experiments/renderContextIntegrityHtml.js +98 -0
- package/dist/src/report/experiments/renderContextIntegrityJsonReport.js +3 -0
- package/dist/src/report/experiments/renderContextIntegrityText.js +111 -0
- package/dist/src/securityValidation/packageChecks/requiredPackageContents.js +33 -0
- package/dist/src/securityValidation/packageChecks/runPackageChecks.js +11 -5
- package/docs/METRICS.md +83 -0
- package/package.json +4 -2
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/corrected-replay/derived/run-integrity-evidence.json +99 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/corrected-replay/producer/implementation-audit.json +1585 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/corrected-replay/producer/implementation-capsule.json +11455 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/00-request.txt +1 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/architecture-context-packet.txt +82 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/behavior-model.txt +104 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/final-report.txt +41 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/implementation-context-packet.txt +114 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/implementation-report.txt +92 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/judge-report.txt +34 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/pseudocode-packet.txt +244 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/request-brief.txt +40 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/test-context-packet.txt +93 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/test-implementation-report.txt +69 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/test-strategy-packet.txt +354 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/verification-report.txt +85 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/derived/run-integrity-evidence.json +98 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/architecture-audit.json +1169 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/architecture-request.json +29 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/implementation-audit.json +1494 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/implementation-capsule.json +11364 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/implementation-request.json +33 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/test-request.json +74 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/reports/architecture-context-retrieval-report.txt +58 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/reports/implementation-context-retrieval-report.txt +75 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/reports/test-context-retrieval-report.txt +84 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/run.json +62 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/tool-versions/my-dev-kit-version.txt +1 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/tool-versions/orchestrator-version.txt +1 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/manifests/corrected-replay-manifest.json +19 -0
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/manifests/failed-run-manifest.json +56 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.4/PROVENANCE.txt +18 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.4/context-capsule/complete-v1.0.0.json +556 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.4/retrieval-audit-record/complete-v1.0.0.json +238 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit-orchestrator/1.2.3/run-integrity/PROVENANCE.txt +31 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit-orchestrator/1.2.3/run-integrity/ready-pass-final-pass.json +132 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit-orchestrator/1.2.3/run-integrity/refresh-required-need-context.json +146 -0
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
Artifact: TestStrategyPacket
|
|
2
|
+
Workflow mode: feature
|
|
3
|
+
Inputs used:
|
|
4
|
+
- Z:\Users\newuser\Projects\my-dev-kit-v1\.my-dev-kit-orchestrator\runs\20260730T113740-implement-my-dev-kit-v1-11-0-b/artifacts/request-brief.txt
|
|
5
|
+
- Z:\Users\newuser\Projects\my-dev-kit-v1\.my-dev-kit-orchestrator\runs\20260730T113740-implement-my-dev-kit-v1-11-0-b/artifacts/architecture-context-packet.txt
|
|
6
|
+
- Z:\Users\newuser\Projects\my-dev-kit-v1\.my-dev-kit-orchestrator\runs\20260730T113740-implement-my-dev-kit-v1-11-0-b/artifacts/behavior-model.txt
|
|
7
|
+
- Z:\Users\newuser\Projects\my-dev-kit-v1\.my-dev-kit-orchestrator\runs\20260730T113740-implement-my-dev-kit-v1-11-0-b/artifacts/pseudocode-packet.txt
|
|
8
|
+
- Direct repository inspection: tests/android/composeNavigationRoutes.spec.ts (205 lines, read for pattern), tests/index/androidNavigationIncremental.spec.ts (234 lines, listed), tests/android/androidNavigationProject.spec.ts (85 lines, listed), full `tests/` directory listing for android/compose-related file inventory, package.json scripts (test, typecheck, build, verify)
|
|
9
|
+
|
|
10
|
+
Existing tests (closest owners, confirmed present in the repository):
|
|
11
|
+
- tests/android/composeNavigationRoutes.spec.ts — closest unit-test-owner pattern: builds an in-memory temp fixture app (mkdtempSync + writeFileSync), runs buildIndex + detectAndroidProject, then calls the analyzer function directly and asserts on its return value. This exact pattern (not vi mocks, not CLI invocation) is the pattern for the new src/android/buildAndroidComposeSemanticProject.ts unit/component tests.
|
|
12
|
+
- tests/android/androidNavigationProject.spec.ts — closest orchestration-level unit-test owner (tests buildAndroidNavigationProject's artifact-assembly behavior, not just the Compose-route sub-scanner) — pattern for artifact-shape/detected-gating tests.
|
|
13
|
+
- tests/index/androidNavigationIncremental.spec.ts — closest incremental-regression test owner (--incremental add/change/remove-evidence scenarios against runIndexCommand). Pattern for the new incremental-regression tests (PSE-029).
|
|
14
|
+
- tests/integration/androidV110Artifacts.spec.ts, tests/integration/androidV110Incremental.spec.ts — closest full-pipeline integration-test owners (multiple Android artifacts asserted together via a single index run). Pattern for artifact-presence/absence + manifest-registration integration tests (PSE-026).
|
|
15
|
+
- tests/graph-diff/androidGraphDiffCompatibility.spec.ts — confirms the existing convention for asserting an Android artifact does NOT participate in graph-diff; NOT extended in Batch 1 (graph-diff integration is out of scope), but its existence is evidence that "compatibility" tests for new Android artifacts follow a known, low-effort pattern if ever needed later.
|
|
16
|
+
- No existing test file targets Compose *declaration* extraction (only Compose *route* extraction exists today) — a new focused test file is required per external contract Section 16 ("a new focused Compose analyzer test file only if no existing test owner is appropriate"), justified: declaration-level extraction is a materially different responsibility (annotations/scope/body-range/child-calls vs. route-string extraction) with no existing exact owner.
|
|
17
|
+
|
|
18
|
+
Test matrix / test responsibilities:
|
|
19
|
+
|
|
20
|
+
test responsibility ID: TST-001
|
|
21
|
+
description: extracts a simple public top-level @Composable declaration
|
|
22
|
+
criticality: critical
|
|
23
|
+
traces to: BEH-001, BEH-002, BEH-008, PSE-012, PSE-013, PSE-017
|
|
24
|
+
setup: temp Android+Kotlin fixture app (writeAppScaffold pattern) with one Kotlin file containing `@Composable fun SimpleScreen() { Text("hi") }`
|
|
25
|
+
action or trigger: call buildAndroidComposeSemanticProject() directly with the built symbolIndex/androidProject
|
|
26
|
+
expected result: artifact.detected === true; declarations has exactly one entry with scope 'top-level', visibility 'public', isPreview false, name 'SimpleScreen'
|
|
27
|
+
test level: unit
|
|
28
|
+
behavior under test: BEH-001/BEH-008 (exact-annotation-gated extraction)
|
|
29
|
+
|
|
30
|
+
test responsibility ID: TST-002
|
|
31
|
+
description: extracts a top-level composable with parameters and records statically available parameter summaries
|
|
32
|
+
criticality: noncritical
|
|
33
|
+
traces to: PSE-004, PSE-017 (parseParameterList)
|
|
34
|
+
setup: `@Composable fun Greeting(name: String, modifier: Modifier = Modifier)`
|
|
35
|
+
action or trigger: run analyzer
|
|
36
|
+
expected result: declaration.parameters has two entries with name/typeText populated for the statically simple case
|
|
37
|
+
test level: unit
|
|
38
|
+
behavior under test: derived value (ComposeParameterSummary)
|
|
39
|
+
|
|
40
|
+
test responsibility ID: TST-003
|
|
41
|
+
description: distinguishes a private top-level composable from a public one
|
|
42
|
+
criticality: critical
|
|
43
|
+
traces to: INV-002, BEH-008
|
|
44
|
+
setup: `private @Composable fun InternalPiece()` alongside a public one in the same file
|
|
45
|
+
action or trigger: run analyzer
|
|
46
|
+
expected result: the private declaration's visibility === 'private', scope still 'top-level' (not 'function-local')
|
|
47
|
+
test level: unit
|
|
48
|
+
invariant under test: INV-002
|
|
49
|
+
|
|
50
|
+
test responsibility ID: TST-004
|
|
51
|
+
description: extracts a named function-local composable and sets its enclosingDeclarationId
|
|
52
|
+
criticality: critical
|
|
53
|
+
traces to: INV-002, BEH-008, PSE-013 (declarationStack)
|
|
54
|
+
setup: a non-Composable enclosing `fun Screen() { @Composable fun InnerPiece() { ... }; InnerPiece() }`
|
|
55
|
+
action or trigger: run analyzer
|
|
56
|
+
expected result: two extraction outcomes depending on pseudocode's exact contract — assert only the function-local composable is extracted (scope: 'function-local', enclosingDeclarationId references the enclosing frame's tracked id even though the enclosing plain `fun Screen()` is itself not a declarations[] entry, since it's not Compose-annotated) and a childCall from... N/A here since child-call resolution requires the enclosing function itself be a tracked composable; this case exercises enclosingDeclarationId population against a non-Compose enclosing frame specifically, per pseudocode-packet PSE-013's explicit "enclosing frame's OWN id is only referenced, never itself added to declarations unless separately Compose-annotated"
|
|
57
|
+
test level: unit
|
|
58
|
+
invariant under test: INV-002, PSE-013 enclosing-frame tracking
|
|
59
|
+
|
|
60
|
+
test responsibility ID: TST-005
|
|
61
|
+
description: distinguishes a private top-level composable from a function-local composable (both are "not public top-level API" in casual terms, but structurally different)
|
|
62
|
+
criticality: critical
|
|
63
|
+
traces to: INV-002 (explicit non-conflation requirement)
|
|
64
|
+
setup: one file containing both a `private fun` top-level composable and a same-named-pattern function-local composable in different enclosing functions
|
|
65
|
+
action or trigger: run analyzer
|
|
66
|
+
expected result: the two are never conflated: scope fields differ ('top-level' vs 'function-local'), and visibility/enclosingDeclarationId differ accordingly
|
|
67
|
+
test level: unit
|
|
68
|
+
invariant under test: INV-002
|
|
69
|
+
|
|
70
|
+
test responsibility ID: TST-006
|
|
71
|
+
description: identifies @Preview + @Composable declarations
|
|
72
|
+
criticality: critical
|
|
73
|
+
traces to: BEH-009
|
|
74
|
+
setup: `@Preview\n@Composable\nfun ScreenPreview()`
|
|
75
|
+
action or trigger: run analyzer
|
|
76
|
+
expected result: isPreview === true; a same-file non-preview composable has isPreview === false
|
|
77
|
+
test level: unit
|
|
78
|
+
behavior under test: BEH-009
|
|
79
|
+
|
|
80
|
+
test responsibility ID: TST-007
|
|
81
|
+
description: extracts a direct, exactly-resolved parent-to-child composable call
|
|
82
|
+
criticality: critical
|
|
83
|
+
traces to: BEH-010, INV-003, PSE-016, PSE-018
|
|
84
|
+
setup: `@Composable fun Parent() { Child() }` and `@Composable fun Child() {}` in the same file
|
|
85
|
+
action or trigger: run analyzer
|
|
86
|
+
expected result: Parent's declaration.childCalls has exactly one entry with calleeDeclarationId === Child's id
|
|
87
|
+
test level: unit
|
|
88
|
+
behavior/invariant under test: BEH-010, INV-003
|
|
89
|
+
|
|
90
|
+
test responsibility ID: TST-008
|
|
91
|
+
description: does not record a child-call for an unresolved/ambiguous callee
|
|
92
|
+
criticality: critical
|
|
93
|
+
traces to: INV-003, PSE-018 (0-match and >1-match branches)
|
|
94
|
+
setup: (a) `Parent()` calls `SomeUnknownCall()` with no matching same-file declaration; (b) two function-local composables both named `Item` in different enclosing functions, both called from a third composable
|
|
95
|
+
action or trigger: run analyzer
|
|
96
|
+
expected result: (a) no childCalls entry and no warning (silent omission per BEH-010); (b) no childCalls entry recorded for the ambiguous name AND a warning string is present in artifact.warnings
|
|
97
|
+
test level: unit
|
|
98
|
+
invariant under test: INV-003
|
|
99
|
+
|
|
100
|
+
test responsibility ID: TST-009
|
|
101
|
+
description: does not infer a child-call from capitalization/naming similarity alone
|
|
102
|
+
criticality: critical
|
|
103
|
+
traces to: 14.6 (external contract), INV-003
|
|
104
|
+
setup: `Parent()` calls `Row(...)` (a structural region, uppercase, but not itself a declared composable in this file)
|
|
105
|
+
action or trigger: run analyzer
|
|
106
|
+
expected result: Row is recorded only in structuralRegions, never in childCalls (since it does not exactly match a same-file Compose-declaration name)
|
|
107
|
+
test level: unit
|
|
108
|
+
boundary under test: structural-region vs. child-call disambiguation
|
|
109
|
+
|
|
110
|
+
test responsibility ID: TST-010
|
|
111
|
+
description: extracts each of the seven fixed structural UI-region calls without overclaiming route/runtime facts
|
|
112
|
+
criticality: critical
|
|
113
|
+
traces to: BEH-011
|
|
114
|
+
setup: one composable body containing Scaffold, LazyColumn, LazyRow, Column, Row, Box, and NavHost calls (NavHost included specifically to prove no route is extracted from it in this artifact)
|
|
115
|
+
action or trigger: run analyzer
|
|
116
|
+
expected result: structuralRegions has exactly 7 entries, one per kind, in body order; no route/destination fields anywhere on the entry (type-level check plus a runtime assertion the object has no such keys)
|
|
117
|
+
test level: unit
|
|
118
|
+
behavior under test: BEH-011
|
|
119
|
+
|
|
120
|
+
test responsibility ID: TST-011
|
|
121
|
+
description: rejects a false-positive @Composable-looking annotation inside a line comment
|
|
122
|
+
criticality: critical
|
|
123
|
+
traces to: BEH-012, "Conservative parsing" (external contract 14.5), negative fixture requirement
|
|
124
|
+
setup: `// @Composable fun Fake() {}` followed by real unrelated code
|
|
125
|
+
action or trigger: run analyzer
|
|
126
|
+
expected result: no declaration extracted for "Fake"; no false warning
|
|
127
|
+
test level: unit
|
|
128
|
+
failure mode under test: comment-text false positive
|
|
129
|
+
|
|
130
|
+
test responsibility ID: TST-012
|
|
131
|
+
description: rejects a false-positive @Composable-looking text inside a string literal
|
|
132
|
+
criticality: critical
|
|
133
|
+
traces to: BEH-012, external contract 14.5
|
|
134
|
+
setup: `val s = "@Composable fun NotReal() {}"`
|
|
135
|
+
action or trigger: run analyzer
|
|
136
|
+
expected result: no declaration extracted for "NotReal"
|
|
137
|
+
test level: unit
|
|
138
|
+
failure mode under test: string-literal false positive
|
|
139
|
+
|
|
140
|
+
test responsibility ID: TST-013
|
|
141
|
+
description: does not classify an anonymous composable lambda or a higher-order-function-returned composable as a named declaration
|
|
142
|
+
criticality: critical
|
|
143
|
+
traces to: external contract Section 2.3 "must not claim support", BEH-012
|
|
144
|
+
setup: `val lambda: @Composable () -> Unit = { Text("x") }` and `fun rememberScreen(): @Composable () -> Unit = { ... }`
|
|
145
|
+
action or trigger: run analyzer
|
|
146
|
+
expected result: no declaration entries produced for either pattern; declarations array unaffected by their presence in the file
|
|
147
|
+
test level: unit
|
|
148
|
+
boundary under test: named-function requirement (FUNCTION_PATTERN match required, not just annotation presence)
|
|
149
|
+
|
|
150
|
+
test responsibility ID: TST-014
|
|
151
|
+
description: does not extract an unsupported member composable inside a class/object body (records a warning if the pattern is annotation-recognizable)
|
|
152
|
+
criticality: noncritical
|
|
153
|
+
traces to: external contract Section 2.3/2.5, BEH-012
|
|
154
|
+
setup: `class ScreenHost { @Composable fun Render() {} }`
|
|
155
|
+
action or trigger: run analyzer
|
|
156
|
+
expected result: no declaration entry for Render(); a stable warning string referencing the unsupported nesting context is present in artifact.warnings
|
|
157
|
+
test level: unit
|
|
158
|
+
failure mode under test: unsupported-nesting-context degrade-to-warning path (PSE-013 scope === null branch)
|
|
159
|
+
|
|
160
|
+
test responsibility ID: TST-015
|
|
161
|
+
description: captures complete deterministic source ranges across multiline annotations and multiline signatures
|
|
162
|
+
criticality: critical
|
|
163
|
+
traces to: BEH-007, BEH-013, "Source ranges" (external contract 14.4)
|
|
164
|
+
setup: an annotation split across two lines is not realistic in Kotlin (annotations are single-token) — instead: a multiline function signature (`@Composable\nfun LongSignature(\n a: String,\n b: Int\n) {\n ...\n}`)
|
|
165
|
+
action or trigger: run analyzer
|
|
166
|
+
expected result: sourceRange.startLine === the @Composable annotation's line; sourceRange.endLine === the closing brace's line; range fully contains the signature and body
|
|
167
|
+
test level: unit
|
|
168
|
+
behavior under test: BEH-013, PSE-014
|
|
169
|
+
|
|
170
|
+
test responsibility ID: TST-016
|
|
171
|
+
description: captures a complete source range for an expression-body declaration
|
|
172
|
+
criticality: noncritical
|
|
173
|
+
traces to: PSE-014 expression-body branch, "expression-body functions where safely supported" (external contract fixture requirement)
|
|
174
|
+
setup: `@Composable fun Label(text: String) = Text(text)`
|
|
175
|
+
action or trigger: run analyzer
|
|
176
|
+
expected result: sourceRange spans exactly the single logical statement; declaration is still extracted with a valid, non-degenerate range
|
|
177
|
+
test level: unit
|
|
178
|
+
behavior under test: PSE-014 expression-body rule
|
|
179
|
+
|
|
180
|
+
test responsibility ID: TST-017
|
|
181
|
+
description: captures correct adjacent-declaration boundaries (no bleed between two back-to-back composables)
|
|
182
|
+
criticality: critical
|
|
183
|
+
traces to: BEH-013, "adjacent declarations" (external contract fixture requirement)
|
|
184
|
+
setup: two `@Composable fun` declarations directly adjacent with no blank line between them
|
|
185
|
+
action or trigger: run analyzer
|
|
186
|
+
expected result: each declaration's sourceRange.endLine is strictly less than the next declaration's sourceRange.startLine (or annotation-inclusive start line); no overlap
|
|
187
|
+
test level: unit
|
|
188
|
+
invariant under test: "a declaration record whose sourceRange does not fully contain its own annotations+signature+body" (behavior-model.txt Invalid states)
|
|
189
|
+
|
|
190
|
+
test responsibility ID: TST-018
|
|
191
|
+
description: deterministic IDs and ordering across two runs of byte-identical input
|
|
192
|
+
criticality: critical
|
|
193
|
+
traces to: INV-005, PSE-020, PSE-028
|
|
194
|
+
setup: run buildAndroidComposeSemanticProject() twice over the same fixture without any filesystem mutation between runs
|
|
195
|
+
action or trigger: compare both results
|
|
196
|
+
expected result: declarations arrays are deeply equal except createdAt/any explicitly-timestamped field; IDs identical; array order identical
|
|
197
|
+
test level: unit
|
|
198
|
+
invariant under test: INV-005
|
|
199
|
+
|
|
200
|
+
test responsibility ID: TST-019
|
|
201
|
+
description: deterministic tie-breaking for duplicate declaration keys within one file
|
|
202
|
+
criticality: noncritical
|
|
203
|
+
traces to: PSE-020 ordinal-suffix rule
|
|
204
|
+
setup: a malformed/contrived fixture with two identically-named top-level composables in one file (not valid idiomatic Kotlin, but the scanner must not crash or produce colliding IDs)
|
|
205
|
+
action or trigger: run analyzer
|
|
206
|
+
expected result: first occurrence gets the unsuffixed id, second gets an ordinal-suffixed id; no ID collision; no crash
|
|
207
|
+
test level: unit
|
|
208
|
+
invariant under test: "two declaration records sharing the same id" (Invalid states)
|
|
209
|
+
|
|
210
|
+
test responsibility ID: TST-020
|
|
211
|
+
description: gates entirely on androidProject.detected (Compose scanning does not run for a non-Android Kotlin project)
|
|
212
|
+
criticality: critical
|
|
213
|
+
traces to: BEH-001 gate, behavior-model.txt "Unresolved design questions" resolution
|
|
214
|
+
setup: a plain Kotlin project fixture (no AndroidManifest.xml/Gradle Android evidence) containing a valid `@Composable fun Screen()`
|
|
215
|
+
action or trigger: detectAndroidProject() returns detected:false; run buildAndroidComposeSemanticProject() with that result
|
|
216
|
+
expected result: artifact.detected === false, declarations === [], no analyzer work performed beyond the immediate early return
|
|
217
|
+
test level: unit
|
|
218
|
+
behavior under test: BEH-001 gate
|
|
219
|
+
|
|
220
|
+
test responsibility ID: TST-021
|
|
221
|
+
description: artifact absent when Android project detected but zero supported Compose declarations exist
|
|
222
|
+
criticality: critical
|
|
223
|
+
traces to: BEH-003, "Empty states" (behavior-model.txt)
|
|
224
|
+
setup: Android+Kotlin fixture app with only non-Compose Kotlin code
|
|
225
|
+
action or trigger: run full runIndexCommand() against the fixture
|
|
226
|
+
expected result: no android-compose-semantic.json written to the output directory; manifest.analyzers has an 'android-compose-semantic' entry with status 'skipped', summary.detected === false
|
|
227
|
+
test level: integration (full index pipeline)
|
|
228
|
+
behavior under test: BEH-003
|
|
229
|
+
|
|
230
|
+
test responsibility ID: TST-022
|
|
231
|
+
description: artifact present with correct manifest registration when supported Compose declarations exist
|
|
232
|
+
criticality: critical
|
|
233
|
+
traces to: BEH-002, BEH-014, PSE-021..PSE-024
|
|
234
|
+
setup: Android+Kotlin fixture app with 2+ supported Compose declarations across 2 files
|
|
235
|
+
action or trigger: run full runIndexCommand()
|
|
236
|
+
expected result: android-compose-semantic.json exists at the expected output path and parses as valid JSON matching AndroidComposeSemanticArtifact's shape; manifest.analyzers has an 'android-compose-semantic' entry with status 'complete' (or 'partial' if warnings exist) and artifacts[0].path === 'android-compose-semantic.json'; RunIndexCommandIndexResult.androidComposeSemanticPath is a non-null path
|
|
237
|
+
test level: integration
|
|
238
|
+
behavior under test: BEH-002, BEH-014
|
|
239
|
+
|
|
240
|
+
test responsibility ID: TST-023
|
|
241
|
+
description: existing android-navigation.json shape and content are byte-for-byte unaffected by this batch
|
|
242
|
+
criticality: critical
|
|
243
|
+
traces to: BEH-005, INV-006
|
|
244
|
+
setup: the same fixture app used for an existing android-navigation test (androidNavigationProject.spec.ts's fixtures, reused verbatim, not modified), run before and after this batch's code exists is not directly testable in one commit — instead: assert the post-Batch-1 output's android-navigation.json against the pre-existing test's already-asserted expected shape (i.e. re-run the EXISTING androidNavigationProject.spec.ts test file unmodified and confirm it still passes)
|
|
245
|
+
action or trigger: `vitest run tests/android/androidNavigationProject.spec.ts tests/android/composeNavigationRoutes.spec.ts` (existing, unmodified files)
|
|
246
|
+
expected result: all existing assertions pass unchanged
|
|
247
|
+
test level: regression (existing suite, unmodified)
|
|
248
|
+
behavior under test: BEH-005, INV-006
|
|
249
|
+
|
|
250
|
+
test responsibility ID: TST-024
|
|
251
|
+
description: existing Kotlin adapter tests unchanged
|
|
252
|
+
criticality: critical
|
|
253
|
+
traces to: INV-007, "Kotlin indexing behavior" preserved (external contract Section 7)
|
|
254
|
+
setup: n/a (existing test file, not modified)
|
|
255
|
+
action or trigger: run the existing Kotlin-adapter test file(s) unmodified
|
|
256
|
+
expected result: all pass unchanged, proving src/languages/kotlin/adapter.ts was not touched
|
|
257
|
+
test level: regression
|
|
258
|
+
|
|
259
|
+
test responsibility ID: TST-025
|
|
260
|
+
description: --incremental adds a supported Compose declaration -> artifact appears on next incremental run
|
|
261
|
+
criticality: critical
|
|
262
|
+
traces to: BEH-015, TRN-001, PSE-029
|
|
263
|
+
setup: index a fixture app with no Compose declarations under --incremental, then add a Kotlin file with a supported composable and re-run --incremental
|
|
264
|
+
action or trigger: two sequential `runIndexCommand({incremental:true})` calls (or CLI invocations) with a file added between them
|
|
265
|
+
expected result: after run 1, android-compose-semantic.json absent; after run 2, present with the new declaration; cache mode reflects the existing changed-file classification (incremental-partial or incremental-change-detected-full-rebuild, whichever the existing eligibility logic selects — this test asserts artifact correctness, not which specific cache mode was chosen, since that choice is pre-existing, unmodified behavior)
|
|
266
|
+
test level: integration
|
|
267
|
+
behavior/transition under test: BEH-015, TRN-001
|
|
268
|
+
|
|
269
|
+
test responsibility ID: TST-026
|
|
270
|
+
description: --incremental changes a supported Compose declaration's body -> artifact content refreshes with a new/changed declaration entry
|
|
271
|
+
criticality: critical
|
|
272
|
+
traces to: BEH-015, PSE-029
|
|
273
|
+
setup: index a fixture with one composable, then modify its body (add a child call) and re-run --incremental
|
|
274
|
+
action or trigger: two sequential incremental runs with an edit between them
|
|
275
|
+
expected result: the declaration's childCalls (or sourceRange) reflects the edit after run 2; no stale cached content
|
|
276
|
+
test level: integration
|
|
277
|
+
behavior under test: BEH-015
|
|
278
|
+
|
|
279
|
+
test responsibility ID: TST-027
|
|
280
|
+
description: --incremental removes the last supported Compose declaration -> artifact is removed on the next refresh-reaching run
|
|
281
|
+
criticality: critical
|
|
282
|
+
traces to: BEH-003, TRN-002, PSE-029
|
|
283
|
+
setup: index a fixture with one composable, delete the file (or the declaration) and re-run --incremental
|
|
284
|
+
action or trigger: two sequential incremental runs with a deletion between them
|
|
285
|
+
expected result: android-compose-semantic.json is absent after run 2 (removed by refreshIndexOutput's blanket-cleanup-then-conditional-rewrite, since the second run's writeIndexArtifacts call omits androidComposeSemantic)
|
|
286
|
+
test level: integration
|
|
287
|
+
transition under test: TRN-002
|
|
288
|
+
|
|
289
|
+
test responsibility ID: TST-028
|
|
290
|
+
description: --incremental with only unrelated (non-Kotlin) file changes produces a byte-identical Compose artifact
|
|
291
|
+
criticality: noncritical
|
|
292
|
+
traces to: TRN-003, INV-005
|
|
293
|
+
setup: index a fixture with a Compose declaration, then change an unrelated file (e.g. a resource XML) and re-run --incremental
|
|
294
|
+
action or trigger: two sequential incremental runs with only a non-Kotlin change between them
|
|
295
|
+
expected result: android-compose-semantic.json content is unchanged (modulo createdAt) between run 1 and run 2
|
|
296
|
+
test level: integration
|
|
297
|
+
invariant under test: INV-005, no separate cache introduced
|
|
298
|
+
|
|
299
|
+
test responsibility ID: TST-029
|
|
300
|
+
description: old manifest.json without an 'android-compose-semantic' analyzer entry remains readable and does not break existing manifest-compatibility handling
|
|
301
|
+
criticality: critical
|
|
302
|
+
traces to: "Old indexes" (external contract Section 7/10), PSE-025
|
|
303
|
+
setup: a manifest.json fixture from before this batch (or a hand-constructed one lacking the new analyzer entry) fed through any existing manifest-reading code path exercised by the incremental no-op fast path (tryReadExistingManifest / resolveAnalyzerArtifactPathFromManifest)
|
|
304
|
+
action or trigger: run the incremental no-op fast path against such a manifest
|
|
305
|
+
expected result: no exception; resolveAnalyzerArtifactPathFromManifest for 'android-compose-semantic' returns null gracefully (mirrors the existing optional-chaining pattern already used for every other analyzer id)
|
|
306
|
+
test level: integration
|
|
307
|
+
external contract under test: manifest backward compatibility
|
|
308
|
+
|
|
309
|
+
test responsibility ID: TST-030
|
|
310
|
+
description: non-Android project behavior (existing TypeScript/Python/Java-only fixtures) is unaffected
|
|
311
|
+
criticality: critical
|
|
312
|
+
traces to: "Non-Android behavior remains unchanged" (external contract Section 7/21)
|
|
313
|
+
setup: n/a (existing non-Android test fixtures/suites, unmodified)
|
|
314
|
+
action or trigger: run the existing non-Android integration/unit suites unmodified
|
|
315
|
+
expected result: all pass unchanged; no android-compose-semantic.json artifact appears anywhere in their output
|
|
316
|
+
test level: regression
|
|
317
|
+
|
|
318
|
+
test responsibility ID: TST-031
|
|
319
|
+
description: existing command output (search/lookup/slice/source/view/context/graph-diff) is byte-for-byte unaffected
|
|
320
|
+
criticality: critical
|
|
321
|
+
traces to: BEH-004, forbidden-edit-area constraint verification
|
|
322
|
+
setup: n/a (existing command test suites under tests/cli, tests/graph-diff, tests/context, unmodified)
|
|
323
|
+
action or trigger: run existing command test suites unmodified
|
|
324
|
+
expected result: all pass unchanged
|
|
325
|
+
test level: regression
|
|
326
|
+
|
|
327
|
+
test responsibility ID: TST-032
|
|
328
|
+
description: typecheck/build/verify succeed with the new files and modified integration points
|
|
329
|
+
criticality: critical
|
|
330
|
+
traces to: external contract Section 20/21
|
|
331
|
+
setup: n/a
|
|
332
|
+
action or trigger: `npm run typecheck`, `npm run build`, `npm run verify`
|
|
333
|
+
expected result: exit code 0 for each
|
|
334
|
+
test level: build/static-analysis
|
|
335
|
+
|
|
336
|
+
Test level assignment summary:
|
|
337
|
+
- unit: TST-001..TST-020 (src/android/buildAndroidComposeSemanticProject.ts direct function calls, new test file tests/android/composeSemanticDeclarations.spec.ts)
|
|
338
|
+
- integration: TST-021, TST-022, TST-025..TST-029 (full runIndexCommand() pipeline, new/extended tests under tests/index/ and tests/integration/)
|
|
339
|
+
- regression (existing, unmodified): TST-023, TST-024, TST-030, TST-031
|
|
340
|
+
- build/static-analysis: TST-032
|
|
341
|
+
|
|
342
|
+
Required verification commands (grounded in package.json, confirmed present):
|
|
343
|
+
- Focused: `npx vitest run tests/android/composeSemanticDeclarations.spec.ts` (new file, exact name TBD at implementation)
|
|
344
|
+
- Focused: `npx vitest run tests/android tests/index/androidComposeSemanticIncremental.spec.ts tests/integration` (new + closest existing Android suites)
|
|
345
|
+
- Full: `npm test` (vitest run, whole suite)
|
|
346
|
+
- Static: `npm run typecheck`, `npm run build`, `npm run verify`
|
|
347
|
+
- Explicitly NOT run: `npm run benchmark:retrieval` (retrieval behavior unchanged, external contract Section 16/20 exclusion)
|
|
348
|
+
|
|
349
|
+
Coverage gaps / risks not covered and why:
|
|
350
|
+
- Compose Multiplatform (non-Android) Compose usage is not covered — explicitly out of scope per the behavior-model.txt gate resolution (Compose scanning only runs when androidProject.detected); if this gate resolution is later found wrong, this entire test surface would need to expand, but that is a product-scope question, not a Batch 1 test gap.
|
|
351
|
+
- Cross-file child-call resolution is not covered by any positive test (only same-file, per pseudocode-packet's PSE-018 same-file-only assumption-guard) — TST-008(a) proves the negative (unresolved, not guessed) but there is no test proving cross-file calls are *correctly* left unresolved with a *specific* warning, since PSE-018 specifies silent omission (not a warning) for the plain 0-match case, which already includes cross-file calls; this is intentional and consistent with BEH-010, not a gap.
|
|
352
|
+
- Extremely large Kotlin files (near/at MAX_SCAN_LINES) are not covered by a dedicated performance/truncation test in this packet; the existing buildComposeNavigationRoutes.ts precedent's own truncation-warning behavior is trusted by analogy but not independently re-verified for the new analyzer. Flagged as a noncritical gap; may be added opportunistically during implementation if low-cost, not required for PASS.
|
|
353
|
+
|
|
354
|
+
Status: complete
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
Artifact: VerificationReport
|
|
2
|
+
Workflow mode: feature
|
|
3
|
+
|
|
4
|
+
Context-gate override notice: This stage's own generated prompt states "Required context is not ready: do not claim the work is verified. Do not run normal behavioral verification commands," driven by the same two context-gate false negatives already fully documented in implementation-context-packet.txt and test-context-packet.txt's "## Override authorization" sections (fixed evidence-group/responsibility-mapping budgets smaller than this batch's actual scope, independently verified as non-blocking). Per the user's explicit authorization ("The automated inadequacy result alone must not cause the implementation, judge, or final verdict to fail after this authorization"), verification proceeded, and every command below was genuinely executed with real, unmodified command output — this override authorizes proceeding past the advisory gate, not fabricating results.
|
|
5
|
+
|
|
6
|
+
Commands run (all from working directory Z:\Users\newuser\Projects\my-dev-kit-v1):
|
|
7
|
+
|
|
8
|
+
1. Command: npm run typecheck
|
|
9
|
+
Working directory: Z:\Users\newuser\Projects\my-dev-kit-v1
|
|
10
|
+
Exit code: 0
|
|
11
|
+
Pass/fail: PASS
|
|
12
|
+
Output summary: `tsc --noEmit` completed with no errors.
|
|
13
|
+
|
|
14
|
+
2. Command: npm run build
|
|
15
|
+
Working directory: Z:\Users\newuser\Projects\my-dev-kit-v1
|
|
16
|
+
Exit code: 0
|
|
17
|
+
Pass/fail: PASS
|
|
18
|
+
Output summary: tsup built dist/cli.js (956.44 KB), "Build success".
|
|
19
|
+
|
|
20
|
+
3. Command: npx vitest run tests/android/composeSemanticDeclarations.spec.ts
|
|
21
|
+
Working directory: Z:\Users\newuser\Projects\my-dev-kit-v1
|
|
22
|
+
Exit code: 0
|
|
23
|
+
Pass/fail: PASS
|
|
24
|
+
Output summary: 1 test file, 20/20 tests passing.
|
|
25
|
+
|
|
26
|
+
4. Command: npx vitest run tests/index/androidComposeSemanticIncremental.spec.ts
|
|
27
|
+
Working directory: Z:\Users\newuser\Projects\my-dev-kit-v1
|
|
28
|
+
Exit code: 0
|
|
29
|
+
Pass/fail: PASS
|
|
30
|
+
Output summary: 1 test file, 10/10 tests passing.
|
|
31
|
+
|
|
32
|
+
5. Command: npx vitest run tests/android tests/index tests/graph-diff tests/integration
|
|
33
|
+
Working directory: Z:\Users\newuser\Projects\my-dev-kit-v1
|
|
34
|
+
Exit code: 0
|
|
35
|
+
Pass/fail: PASS
|
|
36
|
+
Output summary: 53 test files, 708/708 tests passing (regression: no existing Android/indexing/graph-diff/integration test broke).
|
|
37
|
+
|
|
38
|
+
6. Command: npm test
|
|
39
|
+
Working directory: Z:\Users\newuser\Projects\my-dev-kit-v1
|
|
40
|
+
Exit code: 0
|
|
41
|
+
Pass/fail: PASS
|
|
42
|
+
Output summary: `vitest run` — 170 test files, 1908/1908 tests passing (full repository suite). Ran in background due to ~700s duration; completion notification confirmed exit code 0.
|
|
43
|
+
|
|
44
|
+
7. Command: npm run verify
|
|
45
|
+
Working directory: Z:\Users\newuser\Projects\my-dev-kit-v1
|
|
46
|
+
Exit code: 0
|
|
47
|
+
Pass/fail: PASS
|
|
48
|
+
Output summary: `npm run typecheck && npm run build && npm run docs:check` — all three sub-commands passed; docs:check reported "no documentation-preservation violations found" (confirming the new docs/GRAPH_SCHEMA.md section did not break any doc-preservation rule).
|
|
49
|
+
|
|
50
|
+
8. Command: node dist/cli.js --version
|
|
51
|
+
Working directory: Z:\Users\newuser\Projects\my-dev-kit-v1
|
|
52
|
+
Exit code: 0
|
|
53
|
+
Pass/fail: PASS
|
|
54
|
+
Output summary: "1.10.3" (confirms no version bump occurred).
|
|
55
|
+
|
|
56
|
+
9. Command: node dist/cli.js index --root .smoke-batch1/pos --src app/src/main --out .smoke-batch1/pos-out --json (positive CLI smoke, temporary fixture copy under an ignored/deleted repo-local directory)
|
|
57
|
+
Working directory: Z:\Users\newuser\Projects\my-dev-kit-v1
|
|
58
|
+
Exit code: 0
|
|
59
|
+
Pass/fail: PASS
|
|
60
|
+
Output summary: android-compose-semantic.json written; manifest.analyzers contains {id:'android-compose-semantic', status:'complete', artifacts:[{path:'android-compose-semantic.json',...}]}; 3 declarations extracted (HomeScreen, Greeting, HomeScreenPreview) matching the fixture exactly; no Batch 2-6 fields present on the artifact; android-navigation.json correctly absent (analyzer status 'skipped').
|
|
61
|
+
|
|
62
|
+
10. Command: node dist/cli.js index --root .smoke-batch1/neg --src app/src/main --out .smoke-batch1/neg-out --json (negative CLI smoke: Android project, zero Compose declarations)
|
|
63
|
+
Working directory: Z:\Users\newuser\Projects\my-dev-kit-v1
|
|
64
|
+
Exit code: 0
|
|
65
|
+
Pass/fail: PASS
|
|
66
|
+
Output summary: android-compose-semantic.json correctly absent; manifest.analyzers contains {id:'android-compose-semantic', status:'skipped', artifacts:[]}.
|
|
67
|
+
|
|
68
|
+
11. Command: rm -rf .smoke-batch1 && git status --short --untracked-files=all
|
|
69
|
+
Working directory: Z:\Users\newuser\Projects\my-dev-kit-v1
|
|
70
|
+
Exit code: 0
|
|
71
|
+
Pass/fail: PASS
|
|
72
|
+
Output summary: smoke output fully removed; git status shows only the intended Batch 1 source/test/fixture/doc files, no generated artifacts, no smoke residue.
|
|
73
|
+
|
|
74
|
+
Skipped checks:
|
|
75
|
+
- npm run docs:check as a standalone command: not run separately (it is a sub-step of `npm run verify`, command 7 above, which already reports it individually in its own output).
|
|
76
|
+
- npm pack --dry-run, cross-platform matrix, security validation, code-rot audit, release workflow, npm publication, npm run benchmark:retrieval: all explicitly excluded per the external task contract's Section 20 ("Do not run" list). Reason: retrieval, publication, and release behavior are all unchanged/out of scope for this batch.
|
|
77
|
+
- Forced internal-exception test of the analyzer's try/catch 'failed' path: not run (see test-implementation-report.txt's "TestStrategyPacket items not implemented" for the reason — no existing sibling-analyzer test exercises this path either, and no established mocking pattern exists in this repository for it).
|
|
78
|
+
|
|
79
|
+
Environment notes: `npm test` alone took ~694s (11.5 minutes) on this environment and was run as a background task to avoid the interactive command timeout; its completion (exit code 0, 1908/1908 passing) was confirmed via the background task's completion notification before this report was written.
|
|
80
|
+
|
|
81
|
+
Remaining verification gaps:
|
|
82
|
+
- The forced-internal-exception 'failed' analyzer-status path (see "Skipped checks" above) remains unverified by an automated test, though its code shape is a direct, line-for-line-identical mirror of the already-tested `runAndroidComponentsAnalyzer` pattern.
|
|
83
|
+
- The two context-gate automated readiness checks (implementation-context CONTEXT_ADEQUACY_INSUFFICIENT, test-context CONTEXT_RESPONSIBILITY_MAPPINGS_TRUNCATED) remain in their "refresh-required" raw state — this report does not and cannot make the raw tool output say otherwise; it proceeds under explicit user authorization instead, as documented above and in the two context packets.
|
|
84
|
+
|
|
85
|
+
Status: complete
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_derivationNote": "LAB-DERIVED, not an original upstream artifact. Built from the real preserved evidence in ../producer/implementation-capsule.json (roleAdequacy.status, truncation, groupTruncation), ../artifacts/judge-report.txt (literal 'Verdict: PASS'), and ../artifacts/final-report.txt (narrative confirms the judge PASS was carried through and a complete final report was produced despite the blocking gate). See manifests/failed-run-manifest.json for the exact derivationSources list and hashes.",
|
|
3
|
+
"schemaVersion": "1.0.0",
|
|
4
|
+
"runFolder": "Z:/Users/newuser/Projects/my-dev-kit-v1/.my-dev-kit-orchestrator/runs/20260730T113740-implement-my-dev-kit-v1-11-0-b",
|
|
5
|
+
"gate": {
|
|
6
|
+
"schemaVersion": "1.0.0",
|
|
7
|
+
"mode": "feature",
|
|
8
|
+
"contextRequired": true,
|
|
9
|
+
"applicableContextKinds": ["implementation", "test"],
|
|
10
|
+
"contextReady": false,
|
|
11
|
+
"readinessClassification": "refresh-required",
|
|
12
|
+
"blockedStageNames": ["implementation"],
|
|
13
|
+
"blockingCodes": ["CONTEXT_REQUIRED_EVIDENCE_TRUNCATED"],
|
|
14
|
+
"recommendedCorrectionStage": "implementation",
|
|
15
|
+
"expectedJudgeVerdict": "NEED_CONTEXT",
|
|
16
|
+
"warnings": []
|
|
17
|
+
},
|
|
18
|
+
"judgeIntegrity": {
|
|
19
|
+
"schemaVersion": "1.0.0",
|
|
20
|
+
"judgeArtifactPresent": true,
|
|
21
|
+
"judgeVerdictParseStatus": "parsed",
|
|
22
|
+
"authoredJudgeVerdict": "PASS",
|
|
23
|
+
"expectedJudgeVerdict": "NEED_CONTEXT",
|
|
24
|
+
"judgeVerdictMatchesExpected": false,
|
|
25
|
+
"judgeVerdictAccepted": false,
|
|
26
|
+
"correctionRequired": true,
|
|
27
|
+
"correctionBlocked": false,
|
|
28
|
+
"acceptedCorrectionStage": "implementation",
|
|
29
|
+
"finalReportEligible": false,
|
|
30
|
+
"blockingCodes": ["JUDGE_VERDICT_CONTRADICTS_RUN_INTEGRITY"],
|
|
31
|
+
"primaryReason": "Authored verdict \"PASS\" contradicts the canonical expected verdict \"NEED_CONTEXT\".",
|
|
32
|
+
"acceptedCorrectionRoute": {
|
|
33
|
+
"verdict": "PASS",
|
|
34
|
+
"recommendedStage": "implementation",
|
|
35
|
+
"routedStage": "implementation",
|
|
36
|
+
"routeStatus": "correction_required",
|
|
37
|
+
"warnings": [
|
|
38
|
+
"Judge report authored \"Verdict: PASS\" but canonical repository-context readiness still requires NEED_CONTEXT. The authored PASS was rejected; routing to the canonical recommended stage \"implementation\" instead."
|
|
39
|
+
],
|
|
40
|
+
"errors": [],
|
|
41
|
+
"isBlocked": false,
|
|
42
|
+
"strictFail": false
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"finalReportEligibility": {
|
|
46
|
+
"eligible": false,
|
|
47
|
+
"contextReady": false,
|
|
48
|
+
"priorArtifactsValid": false,
|
|
49
|
+
"judgeIntegrity": {
|
|
50
|
+
"schemaVersion": "1.0.0",
|
|
51
|
+
"judgeArtifactPresent": true,
|
|
52
|
+
"judgeVerdictParseStatus": "parsed",
|
|
53
|
+
"authoredJudgeVerdict": "PASS",
|
|
54
|
+
"expectedJudgeVerdict": "NEED_CONTEXT",
|
|
55
|
+
"judgeVerdictMatchesExpected": false,
|
|
56
|
+
"judgeVerdictAccepted": false,
|
|
57
|
+
"correctionRequired": true,
|
|
58
|
+
"correctionBlocked": false,
|
|
59
|
+
"acceptedCorrectionStage": "implementation",
|
|
60
|
+
"finalReportEligible": false,
|
|
61
|
+
"blockingCodes": ["JUDGE_VERDICT_CONTRADICTS_RUN_INTEGRITY"],
|
|
62
|
+
"primaryReason": "Authored verdict \"PASS\" contradicts the canonical expected verdict \"NEED_CONTEXT\".",
|
|
63
|
+
"acceptedCorrectionRoute": {
|
|
64
|
+
"verdict": "PASS",
|
|
65
|
+
"recommendedStage": "implementation",
|
|
66
|
+
"routedStage": "implementation",
|
|
67
|
+
"routeStatus": "correction_required",
|
|
68
|
+
"warnings": [
|
|
69
|
+
"Judge report authored \"Verdict: PASS\" but canonical repository-context readiness still requires NEED_CONTEXT. The authored PASS was rejected; routing to the canonical recommended stage \"implementation\" instead."
|
|
70
|
+
],
|
|
71
|
+
"errors": [],
|
|
72
|
+
"isBlocked": false,
|
|
73
|
+
"strictFail": false
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"blockingCodes": ["JUDGE_VERDICT_CONTRADICTS_RUN_INTEGRITY"],
|
|
77
|
+
"primaryReason": "Authored verdict \"PASS\" contradicts the canonical expected verdict \"NEED_CONTEXT\"."
|
|
78
|
+
},
|
|
79
|
+
"finalArtifactPresent": true,
|
|
80
|
+
"finalArtifactVerdict": "PASS",
|
|
81
|
+
"lifecycle": [
|
|
82
|
+
{
|
|
83
|
+
"artifactFile": "artifacts/implementation-report.txt",
|
|
84
|
+
"stageName": "implementation",
|
|
85
|
+
"fileExists": true,
|
|
86
|
+
"manualRecord": null,
|
|
87
|
+
"resolvedState": "complete",
|
|
88
|
+
"blockingReason": "Required implementation evidence was truncated (requiredOmittedCount 8 for implementation-contracts, 21 for implementation-compatibility-surfaces); canonical readiness required NEED_CONTEXT."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"artifactFile": "artifacts/final-report.txt",
|
|
92
|
+
"stageName": "final-report",
|
|
93
|
+
"fileExists": true,
|
|
94
|
+
"manualRecord": null,
|
|
95
|
+
"resolvedState": "complete"
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
}
|