microsoft / microsoft/vscode-azureresourcegroups
readArtifact bills an unstaged workspace to the product as exit 1
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 78
- Forks
- 55
- Avg merge
- 16h 49m
- Merged PRs (30d)
- 139
Description
The defect
readArtifact in evals/graders/graderHarness.ts throws ProductFailure — exit 1 — when a file is missing. All eleven graders use it.
So a workspace that was never staged, or staged at the wrong path, is reported as a real product failure, indistinguishable from a genuinely bad artifact. It is silent because exit 1 is a completely plausible outcome for a grader: there is no suspicious number to notice, no crash, nothing anomalous in a report.
This is the same shape as #1669's gate that sat 0-for-16 while reporting healthy — a harness defect billed to the corpus — but materially harder to see, because that one at least had a conspicuous zero.
Why this is worth a dedicated change rather than per-gate handling
Three sessions independently derived the same discriminator without knowing about each other. That is the signal that it belongs in the shared harness once, rather than being re-derived per gate:
- Fidelity gates (#1721) retired
noProjectManifestFoundafter finding it was reachable only after successfully reading.azure/project-plan.mdfrom the same workspace — so the tree is provably staged, and "no manifest" means the agent shipped nothing. A product failure wearing an N/A costume. - Runtime gates (#1719) retired their own
noProjectManifestFoundand replaced it with:.azureplanning artifacts present and no manifest ⇒noApplicationScaffolded, exit 1; nothing at all in the workspace ⇒ misconfiguredEVALUATE_WORKSPACE, exit 3. - The same rule again in review of the
NOT_APPLICABLEvocabulary.
The rule
Distinguish "the workspace has nothing at all" (harness fault, exit 3) from "the workspace has content but not this file" (product failure, exit 1).
This is mechanical, not heuristic. The seeded workspace layout was confirmed in-container:
SEEDED_ENTRIES = .azure .git .github .gitignore .gitkeep
A workspace carrying none of these was never staged. readArtifact already prints which workspace source it used, so the evidence needed to make the call is already at the throw site.
Scope
Harness-only. Do not widen it into gate-specific behaviour — the point is that individual gates stop needing to re-derive this.
Fidelity deliberately declined to widen #1721 into shared harness behaviour that every gate depends on, which was the right call; this is the follow-up that was carved out.
Sequencing — read before starting
Land order is #1721 → #1719 → #1722 → this. All three touch graderHarness.ts or graderCertification.ts. Confirm the merge train has landed rather than starting by rebasing on sand.
Measurement is tracked separately and is not part of this issue
The gateHealth session owns answering how often this has already happened: across the stored corpus, how many exit-1 graders have stdErr matching does not exist (workspace …).
That query is blocked on a separate defect: gateHealth's corpus reader is order-dependent — two structurally identical results.zip archives differing only in zip member order were read successfully / reported as having no instances respectively. The bug fails toward "no finding", so a zero result today would be indistinguishable from "the reader dropped the runs that would have matched", and a null result actively closes an investigation. The reader is being fixed first.
Definition of done
- An unstaged or wrong-path workspace exits 3, not 1, with a message naming the workspace source it tried.
- A staged workspace missing a specific artifact still exits 1.
- A deliberately broken fixture makes each path fail — per the house rule that a gate is not done until a broken fixture makes it fail. Both directions need a fixture: unstaged→3 and staged-but-empty→1.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Confirm that #1721, #1719, and #1722 have landed before editing evals/graders/graderHarness.ts. Start at readArtifact and its existing workspace-source evidence, then trace the grader fixtures that exercise missing artifacts. Done means an unstaged or wrong-path workspace exits 3 with its source named, while a staged workspace missing an artifact exits 1, with deliberately broken fixtures covering both paths.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- testing-qa, tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 68/100