microsoft / microsoft/vscode-azureresourcegroups

readArtifact bills an unstaged workspace to the product as exit 1

Open
#1,723 0 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
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 ProductFailureexit 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 noProjectManifestFound after finding it was reachable only after successfully reading .azure/project-plan.md from 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 noProjectManifestFound and replaced it with: .azure planning artifacts present and no manifest ⇒ noApplicationScaffolded, exit 1; nothing at all in the workspace ⇒ misconfigured EVALUATE_WORKSPACE, exit 3.
  • The same rule again in review of the NOT_APPLICABLE vocabulary.

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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.