blastproof 0.12.0 → 0.12.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/README.md CHANGED
@@ -141,7 +141,9 @@ Write steps that end in an observable result — text on the page, a count, a st
141
141
  - fill the note field # cannot run
142
142
  ```
143
143
 
144
- The agent is **forbidden from inventing values** — one it types must come from the step, from the page, or from an `{{env.*}}` placeholder. So the second step is not merely vague, it is impossible, and the run discovers that a minute in, with a failure reason about page state that reads as though your application is broken.
144
+ The agent is **forbidden from inventing values** — one it types must come from the step, from the page, or from an `{{env.*}}` placeholder. But that rule lives in a prompt, and a prompt instructs rather than enforces. Run against a real model, the second step does not fail: the agent makes a value up, fills it, and the step **passes**. `fill the note field` produced "This is a test note." on two runs and "This is a new note" on a third.
145
+
146
+ That is worse than a failure. The test goes green having verified a value nobody wrote, differing between runs — a passing check over an unspecified input. Closing the gap in the runner is [#57](https://github.com/hamc/blastproof/issues/57); until then, this warning is what stands between you and a green test that means nothing.
145
147
 
146
148
  `run` warns about it first, on every path, before launching a browser or asking for a key:
147
149
 
package/dist/cli.js CHANGED
@@ -1280,7 +1280,7 @@ Rules:
1280
1280
  - Prefer the journey the changed files touch over a generic tour of the page. The changed files tell you which part of the page matters.
1281
1281
  - **The test starts at the application's base URL, not at this route.** Begin with a step that navigates to the route and says what should be visible once it loads \u2014 "navigate to /support and verify the heading "Contact support" is shown". Without it the run opens the home page and every later step looks for controls that are not there.
1282
1282
  - **Every step says what it should produce.** Name what must be true once the step has been carried out, not the action alone: "submit the support form and verify the confirmation page shows the ticket number", never "submit the support form". A step that names an action without an outcome asks the runner to judge whether something happened while looking at the page that succeeding produces \u2014 a submitted form comes back empty, a redirect moves the URL \u2014 and that is the shape behind several real failures.
1283
- - **A step that enters a value writes the value.** "fill the subject field with Order not received", never "enter a subject". The runner is forbidden from inventing values, so a step that does not supply one cannot be carried out.
1283
+ - **A step that enters a value writes the value.** "fill the subject field with Order not received", never "enter a subject". The runner is forbidden from inventing values, but a step that supplies none does not fail \u2014 the value gets made up, the step passes, and the test then verifies something nobody wrote.
1284
1284
  - If a step needs a credential or any secret, write it as a placeholder like {{env.TEST_PASSWORD}}. Never write a real or invented password, token or key.
1285
1285
  - Keep the whole test to a handful of steps: one journey, not an exhaustive suite.`;
1286
1286
  }
@@ -2346,7 +2346,7 @@ function printAuthoring(result, cwd) {
2346
2346
  console.error(` \u2192 ${suggestValueClause(step)}`);
2347
2347
  }
2348
2348
  console.error(
2349
- "The runner is forbidden from inventing values, so a step that supplies none cannot be carried out."
2349
+ "The runner is forbidden from inventing values, but only by instruction: in practice the model supplies one anyway, the step passes, and the test verifies a value nobody wrote \u2014 a different one on each run."
2350
2350
  );
2351
2351
  console.error("Steps are inspected in English only; steps in other languages are not checked.");
2352
2352
  }
@@ -2893,7 +2893,7 @@ function parsePositiveNumber(flag) {
2893
2893
  };
2894
2894
  }
2895
2895
  var program = new Command();
2896
- program.name("blastproof").description("Open-source AI testing agent: plain-English YAML tests executed agentically on a real browser.").version("0.12.0");
2896
+ program.name("blastproof").description("Open-source AI testing agent: plain-English YAML tests executed agentically on a real browser.").version("0.12.1");
2897
2897
  program.command("init").description("Scaffold .blastproof/ (config, tests, sample tests) in the current directory").action(async () => {
2898
2898
  try {
2899
2899
  const result = await initProject(process.cwd());