Skip to content

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 10:18
· 33 commits to main since this release
47b313e

A minor release for customer sign-off, with no breaking changes. run shows which rules its trials checked and which they caught broken, lint says which rules the tasks put in play, and report --audience customer writes a page a customer's operations lead signs off on before go-live, with run --without-policy as the careless agent that shows the scenarios can catch a mistake. run --tag runs only the tasks with those tags, a repeated --tasks adds its tasks, and the Claude Code plugin keeps npm install of sandtable in the working folder's own project. An empty --tasks is deprecated: it still runs every task, but warns, and 2.0 will make it a usage error.

Added

  • run --tag <tags>: runs only the tasks with at least one of the comma-separated tags, such as --tag refusal,negotiation, or of every repeated --tag; untagged selects the tasks with none. With --tasks, it runs the tasks both select. A tag no task carries, an unknown task id, or --tasks and --tag with no task in common stops the run with exit 2 before anything runs (#21).
  • Coverage: run shows which rules it checked and which it caught broken. A trial checks a rule when the agent calls the tool the rule guards, or, for a never_disclose rule, is shown a value it must not say; only a trial that broke a rule, and failed for it, shows that a task catches a violation of it. A broken soft rule is reported apart, since it never fails a trial. The terminal summary counts the rules checked and caught broken and names the rules no trial checked and the tools no trial called. report.html draws a rule × task matrix, with a key, that marks the trials that broke each rule and outlines the rules nothing checked. results.json keeps it as coverage, regrade adds it to older runs, and the library exports its types Coverage, RuleCoverage, CoverageCell and ToolCoverage. It never changes a verdict, a score or an exit code (#30).
  • lint says how many rules at least one task puts in play, warns about each rule no task does, and lists the tools no task uses. A task puts a rule in play when its reference calls the rule's tool or its called or not_called names it. For never_disclose, a reference call or the task's context must show the agent a protected value. A domain that linted clean can now show warnings, but warnings never fail lint. The library's LintReport adds rules and unusedTools, and each TaskLint its rules (type RuleLint) (#30).
  • report --audience customer writes customer-report.html: a static page a customer's operations lead can sign off on before go-live. It has a plain-language summary with the open items, each rule with its source quote, the conversations that checked it and an example, every scenario's result, what the rehearsal doesn't cover, and a sign-off block. --probe <results.json>, a deliberately careless agent's run of the same domain, adds which rules the rehearsal caught it breaking, kept apart from the rules that were only checked. It reads the run's coverage, so a run from before 1.1 needs regrade first. The library exports it as renderCustomerHtml (#31).
  • run --without-policy rehearses a careless agent: a built-in model agent (claude, claude:<model>, bedrock:<model-id>, openai:<model>) prompted without the domain's policy, keeping the generic instructions, the tools and each task's context. The rules it breaks that fail a conversation are the evidence report --audience customer --probe needs to show which rules the rehearsal catches, on any domain; a soft rule it breaks is reported, not caught. results.json records withoutPolicy: true, the agent's name ends in (without policy), and the inputs hashes cover the prompt it got, so --baseline, compare and regrade never take it for a run of the real agent. Any other agent exits 2 before anything runs. The library's SuiteOptions adds withoutPolicy (#405).

Changed

  • examples/freight: do-not-use-carrier and do-not-use-capacity now have a reference that looks the carrier up, so lint proves them solvable and finds the rule against telling a caller why it is flagged in play. Their caller prompts and grading are unchanged, so stored runs of them still regrade (#30).
  • examples/freight: 18 of its 19 rules now quote, as source, the sentence of policy.md they come from, so the customer report shows where each rule comes from. Grading is unchanged and stored runs still regrade. A trial that broke one of them now quotes that sentence in its attribution's evidence (#31).
  • run and leaderboard: a repeated --tasks adds its task ids, as --tag and --floor do, so --tasks a --tasks b runs both. Before, only the last --tasks counted (#403).
  • Roadmap: ROADMAP.md and sandtable.dev/roadmap list what 1.1.0 ships, under In 1.1, instead of under Next. PR comments with pass^k deltas and Retell and ElevenLabs imports move to Later, matching their milestones, and --tag is no longer a good first issue (#416).

Deprecated

  • run and leaderboard: an empty --tasks (--tasks "", as an unset CI variable gives) still runs every task, and an empty value next to task ids still adds nothing, but both now warn on stderr. sandtable-ai 2.0 will make it a usage error (exit 2), as an empty --tag is. To run every task, leave --tasks out (#403).

Fixed

  • Plugin: a PreToolUse hook stops npm install of sandtable-ai in a folder with no package.json, and tells Claude to run npm init -y there first. Without that step npm installs into the nearest project above the folder, even the engineer's home folder. The skills already asked for it (1.0.1); the hook holds on any model, even when no skill loaded (#412).

What's Changed

Other changes

  • feat(cli): run --tag runs only the tasks with those tags by @Uliseis in #398
  • feat(report): a coverage matrix shows which rules a run checked and caught broken by @Uliseis in #399
  • feat(report): report --audience customer writes a page a customer signs off on before go-live by @Uliseis in #400
  • feat(run): run --without-policy rehearses a careless agent for the customer page's --probe by @Uliseis in #407
  • fix(cli): a repeated --tasks adds its tasks, and an empty --tasks warns that 2.0 will refuse it by @Uliseis in #414
  • fix(plugin): a hook keeps npm install of sandtable-ai in the working folder's own project by @Uliseis in #413
  • docs(docs): the roadmap lists what 1.1.0 ships by @Uliseis in #417
  • chore(release): v1.1.0 by @Uliseis in #418

Full Changelog: v1.0.1...v1.1.0