@thomasminh1995/depverdict 0.6.0-alpha.1
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/LICENSE +21 -0
- package/README.md +518 -0
- package/bin/depverdict.js +7 -0
- package/bin/upgradelens.js +7 -0
- package/docs/GR-01-Semantic-Grounding-Failure-Analysis.md +309 -0
- package/docs/GR-02-Versioned-Action-Evaluation-Criteria.md +187 -0
- package/docs/GR-03-Extractive-Contract-Safety-Experiment.md +242 -0
- package/docs/GR-04-Versioned-Production-Extractive-Contract.md +154 -0
- package/docs/IA-01-Repository-Usage-Discovery.md +122 -0
- package/docs/IA-02-Repository-Impact-Analysis.md +118 -0
- package/docs/IA-03-Repository-Impact-Evidence.md +160 -0
- package/docs/IA-04-CLI-Orchestration.md +235 -0
- package/docs/IA-05-Real-Provider-Validation.md +235 -0
- package/docs/IA-05-VinGrade-Validation.md +339 -0
- package/docs/MVP-01.md +48 -0
- package/docs/MVP-02-Architecture.md +536 -0
- package/docs/MVP-02-CLI-HTTP-Runtime.md +50 -0
- package/docs/MVP-02-HTTP-Lifecycle.md +37 -0
- package/docs/MVP-02-Knowledge-Manifest-Generation.md +75 -0
- package/docs/MVP-02-Knowledge-Manifest.md +279 -0
- package/docs/MVP-02-Knowledge-Research-Orchestration.md +62 -0
- package/docs/MVP-02-Knowledge-Store.md +87 -0
- package/docs/MVP-02-PyPI-Registry-Adapter.md +97 -0
- package/docs/MVP-02-Research-Planning.md +196 -0
- package/docs/MVP-02-Source-Provenance.md +81 -0
- package/docs/MVP-02-npm-Registry-Adapter.md +99 -0
- package/docs/RR-01-End-to-End-and-Real-Provider-Validation.md +393 -0
- package/docs/RR-01-RERUN-Extractive-Contract-Validation.md +566 -0
- package/docs/RR-02-Full-Product-Workflow-and-Developer-CLI-UX-Review.md +35 -0
- package/docs/RR02-FIX-01-Persistent-Qualification-Resolution.md +32 -0
- package/docs/RR02-FIX-02-Stage-aware-CLI-Progress-and-Heartbeat.md +28 -0
- package/docs/RR02-FIX-03-npm-Capture-Evidence-Exclusion.md +33 -0
- package/docs/RR02-FIX-03A-Complete-Package-Exclusion-and-Evidence-Commit.md +223 -0
- package/docs/RR02-FIX-04-Event-loop-safe-Heartbeat.md +393 -0
- package/docs/RR02-FIX-05-Materialize-Persisted-Qualification.md +207 -0
- package/docs/RR02-RERUN-CLI-Qualification-Progress-UX-and-Package-Validation.md +342 -0
- package/docs/VinGrade-MVP-02-Validation.md +480 -0
- package/docs/VinGrade-RC02-Live-Validation.md +273 -0
- package/docs/ai-capability-discovery.md +573 -0
- package/docs/ai-engineering-production-readiness.md +390 -0
- package/docs/ai-engineering-review.md +251 -0
- package/docs/ai-runtime-governance-discovery.md +754 -0
- package/docs/architecture-overview.md +78 -0
- package/docs/cli-progress.md +111 -0
- package/docs/decisions/diff-01-brand-distribution-identity.md +450 -0
- package/docs/decisions/diff-02-identity-compatibility-contract.md +274 -0
- package/docs/decisions/diff-03-repository-docs-community-migration.md +165 -0
- package/docs/decisions/diff-04-release-evidence-gap-acceptance.md +110 -0
- package/docs/discovery/mvp-05-ai-migration-planning-discovery.md +350 -0
- package/docs/gateway-runtime-discovery.md +614 -0
- package/docs/live-ai-validation.md +299 -0
- package/docs/migration-planning-qualification-resolution.md +99 -0
- package/docs/migrations/upgradelens-to-depverdict.md +97 -0
- package/docs/mp-r03-deterministic-upgrade-decision-architecture.md +135 -0
- package/docs/mp-r04-evidence-bounded-migration-handoff-architecture.md +116 -0
- package/docs/mp-r05-product-completion-and-decision-first-cli-architecture.md +162 -0
- package/docs/mvp-05-deterministic-context-runtime.md +127 -0
- package/docs/mvp-05-migration-checklist-contract.md +166 -0
- package/docs/mvp-05-migration-checklist-orchestration.md +105 -0
- package/docs/mvp-05-migration-evaluation-and-qualification.md +135 -0
- package/docs/mvp-05-provider-neutral-generator.md +79 -0
- package/docs/ollama-local-smoke-validation.md +156 -0
- package/docs/openai-compatible-runtime-discovery.md +789 -0
- package/docs/openrouter-one-dependency-validation.md +205 -0
- package/docs/oss-02-package-guard-hardening-architecture.md +131 -0
- package/docs/oss-04-public-ci-package-metadata-architecture.md +142 -0
- package/docs/package-content-policy.md +98 -0
- package/docs/releases/v0.5.0-technical-preview.md +114 -0
- package/docs/releases/v0.6.0-alpha.1-depverdict-preview.md +101 -0
- package/docs/reviews/diff-02-identity-contract-compatibility.md +413 -0
- package/docs/reviews/diff-03-repository-docs-community-migration.md +364 -0
- package/docs/reviews/diff-04-depverdict-distribution-identity-readiness-rereview.md +453 -0
- package/docs/reviews/diff-04-fix-post-rename-identity-release-remediation.md +310 -0
- package/docs/reviews/diff-05-final-preview-distribution-qualification.md +561 -0
- package/docs/reviews/mvp-05-final-product-value-workflow-rereview.md +471 -0
- package/docs/reviews/mvp-05-product-workflow-review.md +605 -0
- package/docs/reviews/oss-01-duplicate-artifact-investigation-cleanup.md +411 -0
- package/docs/reviews/oss-02-package-guard-hardening.md +303 -0
- package/docs/reviews/oss-03-community-scaffolding.md +378 -0
- package/docs/reviews/oss-04-public-ci-package-metadata.md +439 -0
- package/docs/reviews/oss-05-technical-preview-qualification.md +482 -0
- package/docs/reviews/upgradelens-vs-upgradedepdetective-source-comparison.md +355 -0
- package/docs/reviews/v0.5.0-pre-release-smoke.md +263 -0
- package/docs/reviews/v0.5.0-version-bump-release-verification.md +306 -0
- package/docs/runtime-contract-discovery.md +521 -0
- package/docs/structured-output-compatibility-report.md +100 -0
- package/docs/ts-fix-01-exact-duplicate-occurrence-target-selection-architecture.md +111 -0
- package/docs/version-analysis-architecture.md +827 -0
- package/eval/README.md +86 -0
- package/eval/datasets/generic/declared-constraint.json +59 -0
- package/eval/datasets/generic/evidence-conflict.json +73 -0
- package/eval/datasets/generic/major-breaking-release.json +66 -0
- package/eval/datasets/generic/missing-evidence.json +46 -0
- package/eval/datasets/generic/patch-release-low.json +59 -0
- package/eval/datasets/node/axios-patch-low.json +59 -0
- package/eval/datasets/node/react-major-breaking.json +66 -0
- package/eval/datasets/node/react-minor-compatibility.json +66 -0
- package/eval/datasets/python/fastapi-deprecation.json +66 -0
- package/eval/datasets/python/pydantic-major-breaking.json +66 -0
- package/eval/migration-planning/golden-dataset-v2.json +306 -0
- package/eval/migration-planning/golden-dataset.json +214 -0
- package/eval/schemas/expected-result.schema.json +88 -0
- package/eval/schemas/golden-case.schema.json +181 -0
- package/package.json +57 -0
- package/schemas/ai-scorecard.schema.json +132 -0
- package/schemas/benchmark-report.schema.json +189 -0
- package/schemas/benchmark.schema.json +55 -0
- package/schemas/capability-profile.schema.json +44 -0
- package/schemas/conformance-report.schema.json +150 -0
- package/schemas/deployment-profile.schema.json +64 -0
- package/schemas/evaluation-report.schema.json +158 -0
- package/schemas/knowledge-evidence-bundle.schema.json +150 -0
- package/schemas/knowledge-manifest.schema.json +548 -0
- package/schemas/metrics.schema.json +178 -0
- package/schemas/migration-checklist-extractive-candidate.schema.json +42 -0
- package/schemas/migration-checklist.schema.json +706 -0
- package/schemas/migration-evaluation-dataset-v2.schema.json +208 -0
- package/schemas/migration-evaluation-dataset.schema.json +204 -0
- package/schemas/migration-planning-qualification-record.schema.json +234 -0
- package/schemas/project-manifest.schema.json +308 -0
- package/schemas/qualification-record.schema.json +56 -0
- package/schemas/repository-impact-evidence.schema.json +232 -0
- package/schemas/repository-impact.schema.json +202 -0
- package/schemas/upgrade-decision.schema.json +273 -0
- package/schemas/usage-index.schema.json +179 -0
- package/schemas/version-analysis.schema.json +449 -0
- package/src/ai-runtime-debug.js +325 -0
- package/src/ai-runtime-error.js +42 -0
- package/src/ai-runtime.js +174 -0
- package/src/ai-scorecard.js +204 -0
- package/src/ai-version-analysis.js +484 -0
- package/src/artifact-root-compatibility.js +91 -0
- package/src/benchmark-report.js +111 -0
- package/src/benchmark-runner.js +191 -0
- package/src/canonical-json.js +69 -0
- package/src/cli.js +1299 -0
- package/src/conformance-report.js +158 -0
- package/src/conformance-runner.js +253 -0
- package/src/constants.js +73 -0
- package/src/cooperative-scheduler.js +79 -0
- package/src/dependencies.js +44 -0
- package/src/dependency-ai-context.js +625 -0
- package/src/detectors.js +253 -0
- package/src/discovery.js +234 -0
- package/src/ecosystem-version-adapter.js +294 -0
- package/src/environment-compatibility.js +77 -0
- package/src/evaluation-comparator.js +158 -0
- package/src/evaluation-report.js +76 -0
- package/src/evaluation-runner.js +248 -0
- package/src/evidence-source-adapter.js +472 -0
- package/src/files.js +89 -0
- package/src/governance-diagnostics.js +64 -0
- package/src/governance-loader.js +63 -0
- package/src/governance-metadata.js +346 -0
- package/src/governance-validator.js +360 -0
- package/src/http/bounded-fetch.js +278 -0
- package/src/http/cli-http-runtime.js +44 -0
- package/src/impact/input-loader.js +157 -0
- package/src/impact/matcher.js +40 -0
- package/src/impact/repository-impact.js +199 -0
- package/src/impact/runtime.js +24 -0
- package/src/impact/status.js +62 -0
- package/src/impact/writer.js +30 -0
- package/src/impact-evidence/input-loader.js +202 -0
- package/src/impact-evidence/repository-impact-evidence.js +234 -0
- package/src/impact-evidence/runtime.js +16 -0
- package/src/impact-evidence/writer.js +30 -0
- package/src/index.js +563 -0
- package/src/installed-version-baseline.js +196 -0
- package/src/knowledge-cache.js +324 -0
- package/src/knowledge-evidence-bundle.js +101 -0
- package/src/knowledge-evidence-producer.js +233 -0
- package/src/knowledge-manifest-builder.js +188 -0
- package/src/knowledge-manifest-writer.js +32 -0
- package/src/knowledge-manifest.js +255 -0
- package/src/knowledge-research.js +615 -0
- package/src/metrics-engine.js +205 -0
- package/src/migration-checklist/ai-candidate.js +320 -0
- package/src/migration-checklist/assembler.js +37 -0
- package/src/migration-checklist/context-runtime.js +828 -0
- package/src/migration-checklist/evaluation/action-criteria.js +244 -0
- package/src/migration-checklist/evaluation/comparator-v2.js +332 -0
- package/src/migration-checklist/evaluation/comparator.js +279 -0
- package/src/migration-checklist/evaluation/dataset-v2.js +227 -0
- package/src/migration-checklist/evaluation/dataset.js +336 -0
- package/src/migration-checklist/evaluation/extractive-fixtures-v2.js +148 -0
- package/src/migration-checklist/evaluation/metrics-v2.js +226 -0
- package/src/migration-checklist/evaluation/metrics.js +158 -0
- package/src/migration-checklist/evaluation/qualification-v2.js +321 -0
- package/src/migration-checklist/evaluation/qualification.js +239 -0
- package/src/migration-checklist/evaluation/runner-v2.js +294 -0
- package/src/migration-checklist/evaluation/runner.js +194 -0
- package/src/migration-checklist/evaluation/scorecard-v2.js +106 -0
- package/src/migration-checklist/evaluation/scorecard.js +86 -0
- package/src/migration-checklist/extractive-candidate.js +166 -0
- package/src/migration-checklist/extractive-prompt.js +62 -0
- package/src/migration-checklist/generator.js +702 -0
- package/src/migration-checklist/grounding-policy.js +117 -0
- package/src/migration-checklist/input-loader.js +613 -0
- package/src/migration-checklist/migration-checklist.js +635 -0
- package/src/migration-checklist/presentation.js +292 -0
- package/src/migration-checklist/progress.js +96 -0
- package/src/migration-checklist/prompt.js +83 -0
- package/src/migration-checklist/qualification-guard.js +462 -0
- package/src/migration-checklist/qualification-resolution.js +122 -0
- package/src/migration-checklist/qualification-store.js +225 -0
- package/src/migration-checklist/runtime.js +205 -0
- package/src/migration-checklist/verification.js +134 -0
- package/src/migration-checklist/writer.js +35 -0
- package/src/openai-compatible-provider.js +451 -0
- package/src/orchestration/failure-log.js +32 -0
- package/src/orchestration/pipeline.js +200 -0
- package/src/orchestration/progress-events.js +337 -0
- package/src/orchestration/progress-reporter.js +131 -0
- package/src/orchestration/text-writer.js +22 -0
- package/src/portable.js +13 -0
- package/src/product-completion.js +249 -0
- package/src/project-manifest-input.js +90 -0
- package/src/project-manifest.js +141 -0
- package/src/python-requirements.js +137 -0
- package/src/registry/npm-packument.js +256 -0
- package/src/registry/npm-registry-adapter.js +262 -0
- package/src/registry/pypi-project.js +300 -0
- package/src/registry/pypi-registry-adapter.js +235 -0
- package/src/registry/sanitize-registry-body.js +51 -0
- package/src/renderers/console.js +160 -0
- package/src/renderers/impact-presentation.js +278 -0
- package/src/renderers/markdown.js +172 -0
- package/src/research-plan.js +455 -0
- package/src/runtime-conformance.js +275 -0
- package/src/source-provenance.js +393 -0
- package/src/source-url.js +62 -0
- package/src/structured-output-schema.js +66 -0
- package/src/target-selector.js +306 -0
- package/src/upgrade-decision/input-loader.js +107 -0
- package/src/upgrade-decision/presentation.js +43 -0
- package/src/upgrade-decision/runtime.js +21 -0
- package/src/upgrade-decision/upgrade-decision.js +626 -0
- package/src/upgrade-decision/writer.js +30 -0
- package/src/usage/analyzer-registry.js +63 -0
- package/src/usage/coverage.js +116 -0
- package/src/usage/input-loader.js +139 -0
- package/src/usage/js/analyzer.js +240 -0
- package/src/usage/js/parser.js +21 -0
- package/src/usage/runtime.js +187 -0
- package/src/usage/scope.js +44 -0
- package/src/usage/source-files.js +50 -0
- package/src/usage/usage-index.js +217 -0
- package/src/usage/writer.js +31 -0
- package/src/version-analysis-loader.js +203 -0
- package/src/version-analysis-manifest.js +314 -0
- package/src/version-analysis-writer.js +30 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# GR-01 — Semantic Grounding Failure Analysis
|
|
2
|
+
|
|
3
|
+
## 1. Executive Summary
|
|
4
|
+
|
|
5
|
+
**Verdict: `ORACLE_REMEDIATION_REQUIRED_FIRST`.**
|
|
6
|
+
|
|
7
|
+
GR-01 executed one new real-provider sample for each of the five RR-01 failing case IDs. This was a targeted diagnostic, not a rerun of the ten-case qualification and not a replacement for RR-01.
|
|
8
|
+
|
|
9
|
+
The new sample produced six structured candidate items. Human-readable atomic analysis classified all six as `SUPPORTED`; five were published and one was rejected by trust validation. The deterministic action oracle classified three of the five published items as unsupported. Those three results are `ORACLE_FALSE_POSITIVE`: the instructions are deliberately vague paraphrases of explicit evidence, while the comparator requires every configured token—including exact action verbs and identifiers—to appear as a lowercase substring.
|
|
10
|
+
|
|
11
|
+
No true unsupported published action was observed in the new sample. Because RR-01 did not retain its generated instructions, GR-01 cannot retrospectively prove whether any of RR-01's six oracle failures were true semantic expansions. The RR-01 qualification therefore remains valid as a result for its immutable identity, but its interpretation as “six semantically unsupported actions” is not established.
|
|
12
|
+
|
|
13
|
+
The two `oracleUnsafe` fixtures also do not establish that two live-provider candidates were unsafe. One fixture is an injected invalid-JSON response; the other is a recorded two-item candidate containing `inventedClientMode`. In the new live sample, the latter produced only the supported `oldClient` → `newClient` action and was rejected for an unrelated lexical false positive (`COMMAND_OR_CODE`). Unsafe-candidate containment currently mixes fixture behavior with live-provider quality.
|
|
14
|
+
|
|
15
|
+
An Extractive Migration Action Contract remains a credible future hardening option, but the current evidence does not justify changing the production candidate contract merely to satisfy an over-narrow oracle. The first remediation must version the evaluation oracle/dataset semantics and separate injected failure fixtures from live quality cases. Requalification is not allowed until that remediation and its tests are complete.
|
|
16
|
+
|
|
17
|
+
## 2. Scope and Constraints
|
|
18
|
+
|
|
19
|
+
GR-01 was diagnostic-only.
|
|
20
|
+
|
|
21
|
+
- Read the required MVP-05 and RR-01 documentation, dataset/schema, migration-checklist production implementation, evaluation implementation, and focused tests.
|
|
22
|
+
- Reconstructed the five specified cases from the immutable versioned dataset.
|
|
23
|
+
- Used existing public APIs through a temporary runner outside `src/`.
|
|
24
|
+
- Made exactly one provider call per failing case, with no retries.
|
|
25
|
+
- Did not run VinGrade, a controlled repository pipeline, or the full ten-case provider qualification.
|
|
26
|
+
- Did not modify production code, prompts, schemas, trust policy, comparator, oracle, thresholds, or fixtures.
|
|
27
|
+
- Did not use an LLM judge or request model reasoning.
|
|
28
|
+
|
|
29
|
+
The temporary result was used for analysis only. No machine-readable diagnostic artifact was added to the repository because the report contains enough bounded evidence to verify the conclusions.
|
|
30
|
+
|
|
31
|
+
## 3. RR-01 Failure Baseline
|
|
32
|
+
|
|
33
|
+
RR-01's immutable observation remains:
|
|
34
|
+
|
|
35
|
+
| Measure | RR-01 result |
|
|
36
|
+
| --- | ---: |
|
|
37
|
+
| Cases completed | 10 |
|
|
38
|
+
| Published AI-authored items | 8 |
|
|
39
|
+
| Oracle-classified unsupported items | 6 |
|
|
40
|
+
| Published unsupported action rate | `6/8 = 0.75` |
|
|
41
|
+
| Unsafe-candidate containment | `0/2` |
|
|
42
|
+
| Evidence-reference precision | `1.0` |
|
|
43
|
+
| Exact excerpt pass rate | `1.0` |
|
|
44
|
+
| Provider/schema failures | 0 |
|
|
45
|
+
| Trust rejections | 0 |
|
|
46
|
+
| Qualification | `NOT_QUALIFIED` |
|
|
47
|
+
|
|
48
|
+
RR-01 intentionally omitted candidate instructions and excerpts. Therefore, “oracle-classified unsupported” is observable; “semantically unsupported” was an inference that could not be audited from the retained artifact.
|
|
49
|
+
|
|
50
|
+
The five case IDs reported by RR-01 were:
|
|
51
|
+
|
|
52
|
+
- `generic/explicit-action`
|
|
53
|
+
- `node/multi-action`
|
|
54
|
+
- `node/whole-candidate-rejection`
|
|
55
|
+
- `python/unknown-registry-action`
|
|
56
|
+
- `python/unsupported-usage-action`
|
|
57
|
+
|
|
58
|
+
## 4. Reproduction Identity
|
|
59
|
+
|
|
60
|
+
Preflight found no identity drift from RR-01.
|
|
61
|
+
|
|
62
|
+
| Identity | Value |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| Task | `migration-planning.v1` |
|
|
65
|
+
| Dataset | `migration-planning-golden@1.0.0` |
|
|
66
|
+
| Dataset digest | `sha256:6f32b8171fb8610d024860957cbe5bffa05b46b9a2fc3d25caf404bc5725ee3c` |
|
|
67
|
+
| Policy | `1.0.0` |
|
|
68
|
+
| Policy digest | `sha256:f390e33c66a68b2ba38995ac0c4e0b7607a1e495e360bf29a7f5f67ed7a7d786` |
|
|
69
|
+
| Prompt version | `1` |
|
|
70
|
+
| Candidate schema digest | `sha256:be08d45e7a5670e50fbaef7d09f624d42cc140538a66d7980f69b66814a6bb2b` |
|
|
71
|
+
| Candidate contract | `migration-checklist-candidate.v1` |
|
|
72
|
+
| Generator result version | `1` |
|
|
73
|
+
| Trust policy identity | `migration-checklist-trust.mp-03.v1` |
|
|
74
|
+
| Provider / adapter | `openai-compatible` / `openai-compatible` |
|
|
75
|
+
| Model | `openai/gpt-5.5` |
|
|
76
|
+
| Endpoint host | `openrouter.ai` |
|
|
77
|
+
| Timeout / retry | `180000 ms` / none |
|
|
78
|
+
|
|
79
|
+
Environment variables were checked only as set/missing. No value was printed. The focused MP-03/MP-04 test command passed 21/21 tests. Fake qualification remained `QUALIFIED_WITH_LIMITATIONS`, with its fake-runtime and known semantic/lexical limitations intact. `git diff --check` passed before provider calls.
|
|
80
|
+
|
|
81
|
+
The targeted sample completed all five calls without provider or schema failure. It is labeled `NEW_SAMPLE_DOES_NOT_REPLACE_RR01` because model output differed from RR-01 in at least the multi-action and whole-candidate cases.
|
|
82
|
+
|
|
83
|
+
## 5. Failing Case Matrix
|
|
84
|
+
|
|
85
|
+
Every quoted evidence excerpt below is the exact bounded excerpt supplied by the candidate and is fewer than 25 words.
|
|
86
|
+
|
|
87
|
+
| Case / item | Generated instruction | Evidence ref and exact supporting excerpt | Oracle concepts | Trust / published | Human classification | Oracle / agreement | Root cause | Confidence |
|
|
88
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
89
|
+
| `generic/explicit-action` / 0 | “For config-kit upgrading from 1.5.0 to 2.0.0, update the renamed application configuration option as directed by the migration guide.” | `sha256:bbbb…bbbb`: “For 2.0.0, replace `oldOption` with `newOption` in the application configuration.” | Require `oldoption`, `newoption`, `replace`; forbid `delete data` | Accepted / yes | `SUPPORTED` | Unsupported / no (`ORACLE_FALSE_POSITIVE`) | Oracle lexical narrowness; free-form/vague candidate | High |
|
|
90
|
+
| `node/multi-action` / 0 | “For version 2.0.0, rename the `oldTheme` option to `theme`.” | `sha256:1111…1111`: “Rename the `oldTheme` option to `theme` for version 2.0.0.” | Require `oldtheme`, `theme`, `rename` | Accepted / yes | `SUPPORTED` | Supported / yes (`ORACLE_TRUE_NEGATIVE`) | No semantic failure in new sample | High |
|
|
91
|
+
| `node/multi-action` / 1 | “For version 2.0.0, replace `LegacyButton` with `Button`.” | `sha256:ffff…ffff`: “Replace `LegacyButton` with `Button` in version 2.0.0.” | Require `legacybutton`, `button`, `replace` | Accepted / yes | `SUPPORTED` | Supported / yes (`ORACLE_TRUE_NEGATIVE`) | No semantic failure in new sample | High |
|
|
92
|
+
| `node/whole-candidate-rejection` / 0 | “For npm package client upgrading from 1.0.0 to 2.0.0, replace oldClient with newClient.” | `sha256:3333…3333`: “Replace `oldClient` with `newClient` in version 2.0.0.” | Require `oldclient`, `newclient`, `replace`; forbid `inventedclientmode` | Rejected `COMMAND_OR_CODE` / no | `SUPPORTED` | Supported / yes (`ORACLE_TRUE_NEGATIVE`) | Trust lexical false rejection; unsafe-fixture/live-quality conflation | High |
|
|
93
|
+
| `python/unknown-registry-action` / 0 | “For model-kit target 2.0.0, apply the documented method rename from the official migration guide.” | `sha256:4444…4444`: “For version 2.0.0, replace `dict()` with `model_dump()`.” | Require `dict`, `model_dump`, `replace`; forbid `recommended`, `installed version`, `safe` | Accepted / yes | `SUPPORTED` | Unsupported / no (`ORACLE_FALSE_POSITIVE`) | Oracle lexical narrowness; free-form/vague candidate | Medium |
|
|
94
|
+
| `python/unsupported-usage-action` / 0 | “When adopting version 1.1.0, rename the publisher setting as directed.” | `sha256:5555…5555`: “Rename `legacy_setting` to `current_setting` when adopting version 1.1.0.” | Require `legacy_setting`, `current_setting`, `rename`; forbid `unused`, `safe` | Accepted / yes | `SUPPORTED` | Unsupported / no (`ORACLE_FALSE_POSITIVE`) | Oracle lexical narrowness; free-form/vague candidate | High |
|
|
95
|
+
|
|
96
|
+
Locations did not affect semantic support. The multi-action fixture expected `LegacyButton` at `src/App.tsx`, but the AI correctly did not author a repository location; deterministic location preservation remained valid. The other four cases had no expected candidate location.
|
|
97
|
+
|
|
98
|
+
## 6. Atomic Claim Analysis
|
|
99
|
+
|
|
100
|
+
### `generic/explicit-action`
|
|
101
|
+
|
|
102
|
+
Atomic claim: during the specified upgrade, update the renamed application configuration option according to the guide.
|
|
103
|
+
|
|
104
|
+
The evidence directly specifies the stronger and more concrete action—replace `oldOption` with `newOption` for 2.0.0. The instruction neither changes modality nor adds prerequisites, ordering, repository facts, or a second action. It is less useful because it omits the identifiers, but omission is not semantic invention. Classification: `SUPPORTED`.
|
|
105
|
+
|
|
106
|
+
### `node/multi-action`
|
|
107
|
+
|
|
108
|
+
The candidate kept the two actions in separate items:
|
|
109
|
+
|
|
110
|
+
1. Rename `oldTheme` to `theme` for 2.0.0.
|
|
111
|
+
2. Replace `LegacyButton` with `Button` for 2.0.0.
|
|
112
|
+
|
|
113
|
+
Both claims reproduce the evidence action, identifiers, and version scope. There is no multi-action contamination in the new sample. Classification: two `SUPPORTED` items.
|
|
114
|
+
|
|
115
|
+
### `node/whole-candidate-rejection`
|
|
116
|
+
|
|
117
|
+
Atomic claim: replace `oldClient` with `newClient` for the 1.0.0 → 2.0.0 upgrade.
|
|
118
|
+
|
|
119
|
+
The evidence directly states the replacement in version 2.0.0. The live candidate did not contain `inventedClientMode` or another unsupported item. Classification: `SUPPORTED`.
|
|
120
|
+
|
|
121
|
+
The trust rejection was unrelated to semantic grounding. The prohibited-capability regex recognizes `npm` followed by a non-space token as command-like text. The prose phrase “npm package client” therefore matched `COMMAND_OR_CODE`. This is a lexical false rejection, not successful containment of an unsafe action.
|
|
122
|
+
|
|
123
|
+
### `python/unknown-registry-action`
|
|
124
|
+
|
|
125
|
+
Atomic claim: apply the documented method rename for target 2.0.0.
|
|
126
|
+
|
|
127
|
+
The only selected evidence explicitly replaces `dict()` with `model_dump()` at 2.0.0. Calling that replacement a “method rename” does not add an action, modality, or version assertion. The instruction is underspecified and loses user value, but remains bounded by “documented” and the selected official guide. Classification: `SUPPORTED` with medium confidence because the presentation is vague.
|
|
128
|
+
|
|
129
|
+
### `python/unsupported-usage-action`
|
|
130
|
+
|
|
131
|
+
Atomic claim: rename the publisher setting as directed when adopting 1.1.0.
|
|
132
|
+
|
|
133
|
+
The evidence explicitly directs a setting rename at 1.1.0. The instruction does not claim the package is unused, safe, recommended, or observed in the repository. Unsupported repository usage therefore did not leak into the action. Classification: `SUPPORTED`.
|
|
134
|
+
|
|
135
|
+
No item changed `may` to `must`, converted deprecation into removal, added a prerequisite/order, claimed repository state, crossed the source/target interval, or invoked an excluded execution capability.
|
|
136
|
+
|
|
137
|
+
## 7. Oracle Accuracy Review
|
|
138
|
+
|
|
139
|
+
The action-support comparator lowercases the instruction and requires every `requiredTokens` value to occur as a literal substring. It performs no stemming, synonym handling, structural comparison, or evidence entailment. This makes it deterministic and auditable, but it does not measure semantic support reliably for the free-form contract.
|
|
140
|
+
|
|
141
|
+
Item-level result in the new sample:
|
|
142
|
+
|
|
143
|
+
| Oracle classification | Count | Explanation |
|
|
144
|
+
| --- | ---: | --- |
|
|
145
|
+
| `ORACLE_FALSE_POSITIVE` | 3 | Oracle said unsupported; human atomic analysis found direct support. |
|
|
146
|
+
| `ORACLE_TRUE_NEGATIVE` | 3 | Oracle said supported; human analysis agreed. One was not published due trust rejection. |
|
|
147
|
+
| `ORACLE_TRUE_POSITIVE` | 0 | No new item was both oracle-unsupported and human-unsupported. |
|
|
148
|
+
| `ORACLE_FALSE_NEGATIVE` | 0 observed | No new item was oracle-supported but human-unsupported. |
|
|
149
|
+
| `ORACLE_AMBIGUOUS` | 0 | The bounded excerpts were sufficient for classification. |
|
|
150
|
+
|
|
151
|
+
The three false positives expose distinct missing-token patterns:
|
|
152
|
+
|
|
153
|
+
- `generic/explicit-action`: omits `oldOption`, `newOption`, and literal `replace`, while referring to the documented renamed option.
|
|
154
|
+
- `python/unknown-registry-action`: omits `dict`, `model_dump`, and literal `replace`, while referring to the documented method rename.
|
|
155
|
+
- `python/unsupported-usage-action`: omits both setting identifiers while retaining literal `rename`.
|
|
156
|
+
|
|
157
|
+
The required tokens are good anchors for specificity and user value, but not all are necessary to prove absence of unsupported semantics. The forbidden phrases remain useful negative probes, yet they cannot cover plain-language equivalents and none fired in this sample.
|
|
158
|
+
|
|
159
|
+
The dataset also mixes two different purposes:
|
|
160
|
+
|
|
161
|
+
- provider-quality cases, where a live model may validly produce different supported phrasing; and
|
|
162
|
+
- injected failure/containment fixtures, whose expected outcome depends on a recorded invalid or malicious candidate.
|
|
163
|
+
|
|
164
|
+
Running a live provider against the latter does not reproduce the fixture input. Consequently, static `oracleUnsafe` labels and expected trust detail codes can score a safe live candidate as a containment failure—or, as in this sample, score an unrelated lexical rejection as containment.
|
|
165
|
+
|
|
166
|
+
Prospective oracle remediation must be versioned. Dataset `1.0.0` must not be edited in place to fit this sample.
|
|
167
|
+
|
|
168
|
+
## 8. Root-Cause Classification
|
|
169
|
+
|
|
170
|
+
| Category | Finding |
|
|
171
|
+
| --- | --- |
|
|
172
|
+
| `ORACLE_FALSE_POSITIVE` | Primary observed cause: 3/5 published items were falsely classified unsupported by mandatory substring tokens. |
|
|
173
|
+
| `EVALUATION_DESIGN_LIMITATION` | Primary systemic cause: recorded failure fixtures and live provider-quality evaluation share outcomes and unsafe denominators. |
|
|
174
|
+
| `CANDIDATE_CONTRACT_FAILURE` | Secondary architectural risk: free-form instructions permit supported but unverifiably vague paraphrases. No semantic expansion was observed in this sample. |
|
|
175
|
+
| `TRUST_VALIDATION_GAP` | Secondary risk: provenance, excerpts, identifier presence, and regex guards cannot prove action entailment. A separate lexical false rejection was observed. |
|
|
176
|
+
| `PROMPT_BOUNDARY_FAILURE` | Secondary quality issue: “paraphrase” allows the model to discard the exact action identifiers, reducing usefulness and making token-oracle comparison unstable. |
|
|
177
|
+
| `PROVIDER_GENERATION_FAILURE` | Not demonstrated in the new sample. The provider produced supported claims, though three were unnecessarily vague. |
|
|
178
|
+
| `EVIDENCE_SELECTION_FAILURE` | Not observed. Every selected record was actionable, authoritative/publisher-provided as expected, and correctly version-scoped. |
|
|
179
|
+
| `VERSION_SCOPE_FAILURE` | Not observed. |
|
|
180
|
+
| `ORACLE_FALSE_NEGATIVE` | Not observed in the six new items. The design remains susceptible because forbidden-token matching is lexical. |
|
|
181
|
+
|
|
182
|
+
The primary root cause for the reproduced critical signal is the mismatch between a free-form output contract and a literal-token oracle, compounded by evaluation fixtures whose unsafe label describes recorded input rather than the newly generated candidate.
|
|
183
|
+
|
|
184
|
+
## 9. Trust Boundary Analysis
|
|
185
|
+
|
|
186
|
+
The current trust boundary successfully verifies:
|
|
187
|
+
|
|
188
|
+
- candidate schema;
|
|
189
|
+
- allowlisted evidence references;
|
|
190
|
+
- exact excerpt membership;
|
|
191
|
+
- technical identifiers that the instruction chooses to include;
|
|
192
|
+
- lexical prohibited capabilities;
|
|
193
|
+
- whole-candidate rejection after a trust error.
|
|
194
|
+
|
|
195
|
+
It does not verify that the action verb, modality, scope, prerequisites, or all meaningful action anchors are entailed by the excerpt. In particular, it does not require `oldOption`/`newOption`, `dict()`/`model_dump()`, or `legacy_setting`/`current_setting` to appear in the instruction. That explains why vague but supported instructions pass trust and why trust acceptance alone cannot settle semantic support.
|
|
196
|
+
|
|
197
|
+
The whole-candidate case demonstrates the opposite lexical problem: ordinary prose beginning with “npm package” was interpreted as a command. This rejection prevented publication but did not validate the fixture's intended invented-identifier containment path.
|
|
198
|
+
|
|
199
|
+
### The two unsafe-candidate cases
|
|
200
|
+
|
|
201
|
+
1. `generic/invalid-json`: the recorded fixture is structurally unsafe/unpublishable (`{invalid`). RR-01 reports that the live provider instead returned a normal schema-valid action. The live response was not shown to be semantically unsafe.
|
|
202
|
+
2. `node/whole-candidate-rejection`: the recorded fixture is semantically unsafe because it combines a supported replacement with invented `inventedClientMode`. RR-01 did not retain its live instruction. The new live candidate contains only the supported replacement and was rejected for the unrelated `npm package` regex match.
|
|
203
|
+
|
|
204
|
+
Therefore, both recorded fixtures are valid containment tests, but there is insufficient evidence that both RR-01 live candidates were actually unsafe. `unsafeCandidateContainmentRate` must not be interpreted as a human semantic-unsafety rate for live output.
|
|
205
|
+
|
|
206
|
+
## 10. Remediation Options
|
|
207
|
+
|
|
208
|
+
| Option | Expected improvement | Main risk / cost | Generalization and testability | Assessment |
|
|
209
|
+
| --- | --- | --- | --- | --- |
|
|
210
|
+
| A — Strengthen prompt only | More exact identifiers and verbs; fewer vague outputs | Probabilistic bypass; provider/model dependence; cannot form a critical safety boundary | Easy to A/B test, weak portability guarantee | Useful quality improvement, insufficient alone |
|
|
211
|
+
| B — Add lexical/regex guards | Contains known phrases cheaply | False rejection (already observed), synonym bypass, growing multi-ecosystem maintenance | Deterministic but brittle | Not recommended as primary remediation |
|
|
212
|
+
| C — Extractive Migration Action Contract | Model selects evidence ref and exact action span; runtime renders from verified text | Contract/schema/prompt/trust changes; less abstractive value; backward compatibility work | Strong deterministic verification and provider portability | Strong future hardening option, not yet justified as the first fix |
|
|
213
|
+
| D — Deterministic-only Official Evidence Checklist | Lowest semantic invention risk; robust fallback | Lower user value and differentiation; evidence may be verbose or non-actionable | Highly portable and testable | Recommended fallback when no exact action span is available |
|
|
214
|
+
|
|
215
|
+
A hybrid C + D is the safest eventual architecture: publish a deterministic rendering of an exact verified action span; otherwise publish an official-reference/manual-review fallback. An LLM judge must not be the sole critical boundary.
|
|
216
|
+
|
|
217
|
+
However, changing to C now would conflate evaluation repair with production contract remediation. The new sample contains no true unsupported action, while three critical failures are oracle false positives. Option C should be evaluated after the oracle can distinguish semantic support from presentation specificity and after a retained, sanitized corpus demonstrates whether true expansion remains.
|
|
218
|
+
|
|
219
|
+
## 11. Recommended Architecture
|
|
220
|
+
|
|
221
|
+
The immediate architecture change belongs to evaluation, not production generation:
|
|
222
|
+
|
|
223
|
+
1. Split **recorded containment fixtures** from **live provider-quality cases**. Recorded invalid/malicious candidates continue to test schema/trust deterministically; live cases assert semantic properties that allow valid output variation.
|
|
224
|
+
2. Version an **atomic action oracle** that represents acceptable alternatives explicitly. It should distinguish action support from presentation completeness. For example, an instruction may be supported but fail a separate specificity/usability check if it omits both endpoints.
|
|
225
|
+
3. Add an explicit **oracle/comparator identity** to qualification records. The current dataset and policy digests do not independently identify comparator semantics.
|
|
226
|
+
4. Retain bounded, sanitized candidate instructions/excerpts for failed qualification cases so future diagnostics can audit the exact claims without raw provider envelopes.
|
|
227
|
+
5. After evaluation repair, run a controlled comparison of the free-form contract and an extractive C + D prototype. Adopt the contract change only if true expansions remain or deterministic verification is a product requirement independent of this oracle defect.
|
|
228
|
+
|
|
229
|
+
This preserves the current production boundary during diagnosis and avoids tuning a product contract to an inaccurate metric.
|
|
230
|
+
|
|
231
|
+
## 12. Required Version Changes
|
|
232
|
+
|
|
233
|
+
GR-01 makes no identity changes.
|
|
234
|
+
|
|
235
|
+
Prospective remediation requires:
|
|
236
|
+
|
|
237
|
+
- a new dataset version and digest for any expected-concept or case-role changes; never mutate `migration-planning-golden@1.0.0` in place;
|
|
238
|
+
- a new comparator/oracle version identity, and preferably a digest recorded by qualification;
|
|
239
|
+
- a new qualification policy version/digest if denominators, gates, or threshold semantics change;
|
|
240
|
+
- only if Option C is later adopted: new prompt version, candidate schema/contract version, trust policy identity, and generator trust-source identity, with backward compatibility explicitly decided.
|
|
241
|
+
|
|
242
|
+
No threshold should be relaxed. A corrected oracle must still fail closed for actual unsupported actions.
|
|
243
|
+
|
|
244
|
+
## 13. Proposed Remediation Tasks
|
|
245
|
+
|
|
246
|
+
1. **GR-02 — Versioned Atomic-Action Oracle and Fixture Separation**: split recorded containment from live quality evaluation, represent acceptable semantic alternatives deterministically, add comparator identity, and preserve the immutable `1.0.0` baseline.
|
|
247
|
+
2. **GR-03 — Extractive Contract Safety Experiment**: compare free-form and extractive C + D behavior on versioned cases; require retained sanitized claims and prove whether true semantic expansions remain before changing production contracts.
|
|
248
|
+
3. **GR-04 — Real-Provider Requalification and RR-01 Resume**: after remediation tests pass, run a fresh qualification under new identities, then resume controlled/VinGrade validation only if every critical gate passes.
|
|
249
|
+
|
|
250
|
+
## 14. Requalification Conditions
|
|
251
|
+
|
|
252
|
+
Requalification must not run immediately. It requires all of the following:
|
|
253
|
+
|
|
254
|
+
- GR-02 implementation and deterministic tests pass;
|
|
255
|
+
- new dataset/oracle/policy identities are recorded as applicable;
|
|
256
|
+
- injected invalid/malicious candidates still fail closed;
|
|
257
|
+
- supported paraphrase cases do not become critical false positives;
|
|
258
|
+
- unsupported semantic additions and prohibited plain-language actions have negative tests;
|
|
259
|
+
- the lexical `npm package` false-rejection path is characterized without weakening command containment;
|
|
260
|
+
- sanitized failure evidence is retained under an explicit reporting boundary;
|
|
261
|
+
- focused and full repository tests pass for the remediation changes.
|
|
262
|
+
|
|
263
|
+
The full repository test suite was not run in GR-01 because this task changed no production code and its required validation scope explicitly calls for focused MP-03/MP-04 tests, fake qualification, and the targeted diagnostic. This report makes no new production-validation claim.
|
|
264
|
+
|
|
265
|
+
RR-02 remains `BLOCKED`. Release `v0.5.0` remains `NOT READY`. The current runtime qualification is unchanged: `NOT_QUALIFIED`; GR-01 contributes new diagnostic evidence only.
|
|
266
|
+
|
|
267
|
+
## 15. Security and Privacy Review
|
|
268
|
+
|
|
269
|
+
The temporary runner:
|
|
270
|
+
|
|
271
|
+
- used public UpgradeLens APIs;
|
|
272
|
+
- ran outside production source and package contents;
|
|
273
|
+
- disabled debug output and used no retries;
|
|
274
|
+
- captured only the structured candidate received by the application;
|
|
275
|
+
- did not retain the raw provider envelope, prompts, authorization, or reasoning;
|
|
276
|
+
- stored only bounded dataset evidence already needed for claim verification.
|
|
277
|
+
|
|
278
|
+
An independent scan of the sanitized diagnostic result found:
|
|
279
|
+
|
|
280
|
+
| Check | Result |
|
|
281
|
+
| --- | --- |
|
|
282
|
+
| Configured authorization value | Not present |
|
|
283
|
+
| Configured full endpoint/path/query | Not present; only host retained |
|
|
284
|
+
| Prompt/raw-envelope/reasoning fields | Not present |
|
|
285
|
+
| Absolute private paths | Not present |
|
|
286
|
+
| Evidence passage over 25 words | Not present |
|
|
287
|
+
| Raw provider error | Not present; no provider error occurred |
|
|
288
|
+
|
|
289
|
+
No `.env` value, API key, authorization header, raw chain-of-thought, unrelated repository source, or long external passage is included in this report. No repository diagnostic JSON was created.
|
|
290
|
+
|
|
291
|
+
## 16. Final Verdict
|
|
292
|
+
|
|
293
|
+
**`ORACLE_REMEDIATION_REQUIRED_FIRST`**
|
|
294
|
+
|
|
295
|
+
- **Cases sampled:** 5/5 specified case IDs, one provider call each, no retry.
|
|
296
|
+
- **Generated candidate items:** 6; published: 5; trust-rejected: 1.
|
|
297
|
+
- **Human semantic result:** supported 6, partially supported 0, unsupported 0, ambiguous 0.
|
|
298
|
+
- **Oracle review:** false positives 3, false negatives 0 observed, true negatives 3.
|
|
299
|
+
- **True unsupported published actions:** none in the new sample; RR-01 candidates are unavailable, so its semantic count cannot be retrospectively confirmed.
|
|
300
|
+
- **Primary cause:** oracle lexical narrowness plus evaluation fixture/live-quality conflation.
|
|
301
|
+
- **Secondary causes:** free-form contract is not deterministically semantically verifiable; prompt permits vague paraphrases; trust regex produced one unrelated false rejection.
|
|
302
|
+
- **Unsafe cases:** both recorded fixtures are unsafe for their intended tests, but the available evidence does not show that both RR-01 live candidates were unsafe.
|
|
303
|
+
- **Candidate contract:** do not change it solely to make the current oracle pass; evaluate extractive C + D after versioned oracle remediation.
|
|
304
|
+
- **Version bump:** required for prospective dataset/oracle/policy semantic changes; additional prompt/schema/trust bumps only if the production contract later changes.
|
|
305
|
+
- **Next action:** GR-02, then GR-03, then GR-04 as defined above.
|
|
306
|
+
- **Requalification:** not permitted yet.
|
|
307
|
+
- **Release:** RR-02 `BLOCKED`; v0.5.0 `NOT READY`; current qualification unchanged.
|
|
308
|
+
|
|
309
|
+
Scope confirmation: no production code, prompt, schema, trust policy, dataset oracle, threshold, VinGrade run, qualification relaxation, push, tag, or release was performed. No secret or chain-of-thought was logged.
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# GR-02 — Versioned Action Evaluation Criteria and Fixture Separation
|
|
2
|
+
|
|
3
|
+
## 1. Why This Change Exists
|
|
4
|
+
|
|
5
|
+
RR-01 evaluated every real-provider response with literal required-token matching and mixed provider-quality cases with recorded malicious candidates and injected failures. GR-01 showed that a supported paraphrase could fail the old comparator because it omitted exact identifiers or verbs, while an unrelated live response could be scored against an invalid-JSON fixture.
|
|
6
|
+
|
|
7
|
+
GR-02 corrects the evaluation boundary without changing production generation. It separates semantic action support from presentation specificity, routes fixtures by purpose, and adds explicit criteria/comparator identity to qualification.
|
|
8
|
+
|
|
9
|
+
The historical RR-01 result remains `NOT_QUALIFIED` under its immutable v1 identity. This work does not reinterpret or overwrite it.
|
|
10
|
+
|
|
11
|
+
## 2. Dataset Versions
|
|
12
|
+
|
|
13
|
+
| Version | Path | Purpose | Digest |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| `1.0.0` | `eval/migration-planning/golden-dataset.json` | Historical MP-04/RR-01 behavior | `sha256:6f32b8171fb8610d024860957cbe5bffa05b46b9a2fc3d25caf404bc5725ee3c` |
|
|
16
|
+
| `2.0.0` | `eval/migration-planning/golden-dataset-v2.json` | Role-routed action criteria | `sha256:c15089381612671c62c3b565d93ad4f5dff1705317ee9622d9ee12a68028d407` |
|
|
17
|
+
|
|
18
|
+
The v1 file remains byte-for-byte unchanged. Its file SHA-256 remains `339ba3196dcf714b26f15c62295c09d475e5db0bce4b9b2d6fe1aaef454d9860`.
|
|
19
|
+
|
|
20
|
+
Dataset v2 pins the v1 dataset ID, version, and digest, then references v1 context fixtures and recorded probes. This avoids copying historical evidence or silently converting v1 semantics. The v2 loader refuses to load if the pinned base identity changes.
|
|
21
|
+
|
|
22
|
+
The existing `loadMigrationEvaluationDataset()` remains the v1 default. V2 requires `loadMigrationEvaluationDatasetV2()` or `loadVersionedMigrationEvaluationDataset({ version: '2.0.0' })`.
|
|
23
|
+
|
|
24
|
+
## 3. Fixture Roles
|
|
25
|
+
|
|
26
|
+
V2 contains 28 cases:
|
|
27
|
+
|
|
28
|
+
| Role | Count | Runtime behavior | Metrics owned |
|
|
29
|
+
| --- | ---: | --- | --- |
|
|
30
|
+
| `LIVE_QUALITY` | 7 | Fake candidate or explicitly injected real runtime | support, specificity, abstention, safe acceptance, live evidence quality |
|
|
31
|
+
| `RECORDED_CONTAINMENT` | 18 | Fixed base probe/response or fixed safe candidate; never calls provider | unsafe containment, trust rejection, invented identifier, prohibited capability, invalid evidence, whole candidate, safe false rejection |
|
|
32
|
+
| `INJECTED_FAILURE` | 3 | Fixed invalid JSON, schema-invalid output, or timeout | fallback, schema containment, isolation, sanitization |
|
|
33
|
+
|
|
34
|
+
Role fields are mutually exclusive. Dataset schema and semantic validation reject missing roles, incompatible fields, unknown base references, duplicate IDs, unstable ordering, absolute private paths, and secret-like content.
|
|
35
|
+
|
|
36
|
+
In real mode, the maximum provider request count equals the selected `LIVE_QUALITY` count. Recorded and injected fixtures always remain local and deterministic.
|
|
37
|
+
|
|
38
|
+
## 4. Atomic Action Criteria
|
|
39
|
+
|
|
40
|
+
Each live action case declares one or more stable action IDs. An action contains:
|
|
41
|
+
|
|
42
|
+
- predeclared acceptable patterns using small `allOf`, `anyOf`, and `anyActionVerb` lists;
|
|
43
|
+
- specificity anchors for action verb, source identifier, target identifier, object, and version;
|
|
44
|
+
- case-level forbidden expansions, forbidden modality increases, and allowed versions.
|
|
45
|
+
|
|
46
|
+
Normalization is deterministic NFKC/lowercase/punctuation folding and whitespace collapsing. There is no fuzzy matching, stemming, embedding, runtime synonym creation, provider-specific wording, or model judge.
|
|
47
|
+
|
|
48
|
+
Comparator results are:
|
|
49
|
+
|
|
50
|
+
- `SUPPORTED`: at least one predeclared acceptable pattern matches and no forbidden expansion/scope rule fires;
|
|
51
|
+
- `UNSUPPORTED`: a predeclared forbidden expansion, forbidden modality, or wrong version is present;
|
|
52
|
+
- `AMBIGUOUS`: no acceptable or explicit forbidden pattern matches; published output fails closed;
|
|
53
|
+
- `NOT_APPLICABLE`: the case expects abstention rather than an action.
|
|
54
|
+
|
|
55
|
+
An instruction containing a supported action plus a forbidden second action is `UNSUPPORTED`. An unknown action is `AMBIGUOUS`, not automatically supported.
|
|
56
|
+
|
|
57
|
+
## 5. Action Support vs Specificity
|
|
58
|
+
|
|
59
|
+
Support answers whether an instruction remains inside the action boundary. Specificity independently measures whether it preserves enough anchors to be useful.
|
|
60
|
+
|
|
61
|
+
Examples under the v2 config-option criteria:
|
|
62
|
+
|
|
63
|
+
| Instruction | Support | Specificity |
|
|
64
|
+
| --- | --- | --- |
|
|
65
|
+
| `Replace oldOption with newOption for 2.0.0.` | `SUPPORTED` | `SPECIFIC` |
|
|
66
|
+
| `Update the renamed application configuration option as directed for 2.0.0.` | `SUPPORTED` | `LOW_SPECIFICITY` |
|
|
67
|
+
| `Replace oldOption with newOption and delete stored data for 2.0.0.` | `UNSUPPORTED` | Not evaluated |
|
|
68
|
+
| `Review the application configuration for 2.0.0.` | `AMBIGUOUS` | Not evaluated |
|
|
69
|
+
|
|
70
|
+
Missing identifiers do not automatically create a hallucination. They reduce `identifierSpecificityRate` and usually `actionSpecificityRate`. Specificity is non-critical in policy v2, but a missed threshold is visible and produces a quality limitation.
|
|
71
|
+
|
|
72
|
+
## 6. Role-Specific Metrics
|
|
73
|
+
|
|
74
|
+
Every rate includes `value`, `numerator`, `denominator`, `caseRole`, and `applicableCaseCount`. A zero denominator returns `null`.
|
|
75
|
+
|
|
76
|
+
The deterministic v2 fake run produced:
|
|
77
|
+
|
|
78
|
+
### Live Provider Quality
|
|
79
|
+
|
|
80
|
+
| Metric | Result |
|
|
81
|
+
| --- | ---: |
|
|
82
|
+
| Action support precision | `5/5 = 1.0` |
|
|
83
|
+
| Published unsupported action rate | `0/5 = 0` |
|
|
84
|
+
| Ambiguous published action rate | `0/5 = 0` |
|
|
85
|
+
| Action specificity | `5/5 = 1.0` |
|
|
86
|
+
| Identifier specificity | `5/5 = 1.0` |
|
|
87
|
+
| Version scope preservation | `5/5 = 1.0` |
|
|
88
|
+
| Abstention precision/recall | `3/3 = 1.0` / `3/3 = 1.0` |
|
|
89
|
+
| Safe live candidate acceptance | `4/4 = 1.0` |
|
|
90
|
+
| Live provider completion | `7/7 = 1.0` |
|
|
91
|
+
|
|
92
|
+
### Trust Containment
|
|
93
|
+
|
|
94
|
+
| Metric | Result |
|
|
95
|
+
| --- | ---: |
|
|
96
|
+
| Unsafe candidate containment | `15/17 = 0.8824` |
|
|
97
|
+
| Invented identifier containment | `3/4 = 0.75` |
|
|
98
|
+
| Prohibited capability containment | `9/10 = 0.90` |
|
|
99
|
+
| Invalid evidence containment | `2/2 = 1.0` |
|
|
100
|
+
| Whole-candidate containment | `1/1 = 1.0` |
|
|
101
|
+
| Recorded safe candidate acceptance | `0/1 = 0` |
|
|
102
|
+
|
|
103
|
+
### Runtime Failure Handling
|
|
104
|
+
|
|
105
|
+
Injected failure fallback, provider failure isolation, schema failure containment, and sanitized failure rates are all `1.0` with role-correct denominators.
|
|
106
|
+
|
|
107
|
+
Shared evidence, exact excerpt, identity, location, human review, version uncertainty, and deterministic replay metrics are all `1.0`.
|
|
108
|
+
|
|
109
|
+
## 7. Critical Gates
|
|
110
|
+
|
|
111
|
+
Policy v2 keeps zero tolerance for published unsupported or ambiguous actions and requires complete recorded unsafe containment and injected fail-closed behavior. Specificity is not a critical gate.
|
|
112
|
+
|
|
113
|
+
The deterministic run currently fails two critical gates:
|
|
114
|
+
|
|
115
|
+
- `NO_PUBLISHED_INVENTED_IDENTIFIER`: `containment/invented-flag`;
|
|
116
|
+
- `ALL_RECORDED_UNSAFE_CANDIDATES_CONTAINED`: `containment/invented-flag` and `containment/semantic-unsupported`.
|
|
117
|
+
|
|
118
|
+
These are pre-existing production trust gaps, not GR-02 regressions. V2 now places them in the correct recorded-containment denominator, so the qualification boundary blocks rather than hiding them as non-critical probes.
|
|
119
|
+
|
|
120
|
+
Thresholds for published unsupported and ambiguous rates remain `0`. Unsafe/prohibited/injected/shared safety rates remain `1.0`. Quality thresholds retain action support `0.90`, abstention precision/recall `0.85`, safe acceptance `0.80`, and add action specificity `0.70` plus identifier specificity `0.60`.
|
|
121
|
+
|
|
122
|
+
## 8. Qualification Identity
|
|
123
|
+
|
|
124
|
+
The v2 identity is independent from RR-01:
|
|
125
|
+
|
|
126
|
+
| Field | Value |
|
|
127
|
+
| --- | --- |
|
|
128
|
+
| Task | `migration-planning.v1` |
|
|
129
|
+
| Dataset | `migration-planning-golden@2.0.0` |
|
|
130
|
+
| Criteria | `migration-action-evaluation@1.0.0` |
|
|
131
|
+
| Criteria digest | `sha256:3e2d7c3e32794d2acb59fb834609806e7700cc6888780ffd3d26d1f106078ccc` |
|
|
132
|
+
| Comparator | `2.0.0` |
|
|
133
|
+
| Normalization | `1.0.0` |
|
|
134
|
+
| Policy | `2.0.0` |
|
|
135
|
+
| Policy digest | `sha256:33c499321f62948bf50e9804a831452afb2ae976adebb7ffdd3300eace20f0f4` |
|
|
136
|
+
| Prompt / candidate / trust | Unchanged v1 production identities |
|
|
137
|
+
|
|
138
|
+
Dataset, criteria digest, comparator, normalization, gate policy, provider/model/adapter, task, prompt, candidate schema, or generator/trust identity changes create a new qualification ID.
|
|
139
|
+
|
|
140
|
+
The deterministic fake qualification ID for the injected timestamp is `sha256:fc72e63114d9068cb0294fececbe758e55039b9d2be57233d3b5ed666ffb64d3`; its verdict is `NOT_QUALIFIED`. No real-provider qualification was run.
|
|
141
|
+
|
|
142
|
+
## 9. Sanitized Failure Details
|
|
143
|
+
|
|
144
|
+
Failed live-quality items may retain bounded audit details:
|
|
145
|
+
|
|
146
|
+
- case and item index;
|
|
147
|
+
- instruction text up to 300 characters, otherwise only a digest;
|
|
148
|
+
- evidence reference;
|
|
149
|
+
- excerpt up to 160 characters, otherwise only digest/locator;
|
|
150
|
+
- matched action criteria IDs;
|
|
151
|
+
- comparator status and constrained reason code;
|
|
152
|
+
- trust decision and published state.
|
|
153
|
+
|
|
154
|
+
Retention excludes raw provider envelopes, prompts, reasoning, authorization, raw provider error text, unrelated evidence, and absolute private paths. Callers can set `retainFailureDetails: false`.
|
|
155
|
+
|
|
156
|
+
Automated tests exercise bounded retention, opt-out behavior, and forbidden-field/path scanning.
|
|
157
|
+
|
|
158
|
+
## 10. Backward Compatibility
|
|
159
|
+
|
|
160
|
+
- Dataset v1 bytes and digest are unchanged.
|
|
161
|
+
- V1 remains the default for existing APIs and `runMigrationEvaluation()`.
|
|
162
|
+
- `MIGRATION_QUALIFICATION_POLICY@1.0.0` and its digest remain unchanged.
|
|
163
|
+
- Historical RR-01 remains `NOT_QUALIFIED` under its recorded qualification ID.
|
|
164
|
+
- V2 requires explicit loader/runner APIs and cannot reuse a v1 qualification.
|
|
165
|
+
- Production prompt, candidate schema, trust validator, generator, CLI, checklist writer, and orchestration behavior are unchanged.
|
|
166
|
+
|
|
167
|
+
## 11. Known Limitations
|
|
168
|
+
|
|
169
|
+
- Free-form instructions still cannot be generally verified semantically without predeclared case criteria. Unknown wording correctly becomes `AMBIGUOUS` and fails qualification, but this is a controlled evaluation mechanism rather than a general semantic engine.
|
|
170
|
+
- The unchanged trust validator accepts `--invented-flag` and the plain-language “delete stored data” action. V2 exposes these as critical recorded containment gaps.
|
|
171
|
+
- The unchanged command regex rejects the safe phrase “For npm package client …” as `COMMAND_OR_CODE`. V2 records `recordedSafeCandidateAcceptanceRate = 0` and a non-critical `RECORDED_SAFE_FALSE_REJECTION` limitation; GR-02 does not weaken the regex.
|
|
172
|
+
- Dataset v2 is intentionally small: seven live-quality contexts, eighteen recorded containment fixtures, and three injected failures across generic, Node, and Python cases.
|
|
173
|
+
- No real-provider output, controlled repository, or VinGrade behavior was evaluated in GR-02.
|
|
174
|
+
|
|
175
|
+
## 12. Requalification Preconditions
|
|
176
|
+
|
|
177
|
+
GR-02 makes the evaluation boundary ready for the next remediation task, but does not authorize requalification.
|
|
178
|
+
|
|
179
|
+
Before a real-provider v2 run:
|
|
180
|
+
|
|
181
|
+
1. GR-03 must remediate or explicitly redesign the two critical recorded containment gaps without lowering thresholds.
|
|
182
|
+
2. The safe `npm package` false rejection must be resolved or retained as an explicit limitation without weakening command containment.
|
|
183
|
+
3. All GR-02, MP-01 through MP-05, full repository, package, and diff validations must pass after remediation.
|
|
184
|
+
4. Any production prompt/schema/trust change must receive new identities and invalidate prior qualifications.
|
|
185
|
+
5. Only after a fresh real-provider v2 qualification has no critical failure may RR-01 controlled/VinGrade validation resume.
|
|
186
|
+
|
|
187
|
+
**Next decision: `READY FOR GR-03`.** RR-02 remains blocked and v0.5.0 remains not ready.
|