Skip to content

thirdshift secure audits the Base branch and records each finding as a draft advisory #538

Description

@JacobStephens2

Parent

#427

What to build

The tracer bullet for the Security run: thirdshift secure audits the Base branch and records each Security finding privately, as a draft repository security advisory. It is report-only for now: no reproduction and no fixing yet.

The command.

  • secure joins architect and pickup.
  • It takes base <branch>, the Harness, Model and Effort words, and the words a Pass hands to the runs it dispatches.

Gates. It's skipped while another Pass on the repository is running on the machine, and while the repository has a Ready issue.

Checks. Before any work, it checks its Harness, and that Node.js is installed, since the skill's validators need it. A missing Node.js fails the run with a cause that says so.

The Security audit session. It runs in a throwaway worktree detached at the Base branch's head on origin, as the Architecture review does, with the thirdshift-security-audit skill. Its Session prompt names:

  • full audit mode, with report artifacts, and the quick profile;
  • the whole repository at the audited commit, with vendored and third-party code out of scope;
  • the repository's SECURITY.md or threat-model document, if it has one;
  • an output directory under the repository's audit root, which is kept with its other logs, outside every worktree;
  • that earlier runs under that root are read;
  • that the session ends incomplete rather than asking;
  • that it commits, pushes, opens and publishes nothing, and touches no deployed site;
  • the headless paragraph every prompt ends with;
  • a fixed final line that thirdshift reads.

Recording. thirdshift reads the skill's report and records each finding as a draft repository security advisory:

  • the summary from the finding's title;
  • a description composed from its write-up, trace, evidence and validation plan, with its fingerprint, the audited commit, and a line saying thirdshift's Security run found it;
  • no severity, no CWE;
  • the package from the repository's manifest, or other, with no version range claimed.

A finding already recorded, found by its fingerprint in any advisory state, isn't recorded again. thirdshift never publishes or closes an advisory.

Reporting. Progress lines, a Command log, and Activity log lines, as for other Passes.

README. A section on thirdshift secure.

Acceptance criteria

Tested end to end with the scenario harness. The fake gh learns repository security advisories: create, list in every state, and update. The fake agent writes the skill's report into the directory its prompt names.

  • thirdshift secure and thirdshift secure base <branch> run a Security audit of the Base branch, detached at its head on origin, and leave the Launch directory untouched.
  • It's skipped while another Pass on the repository is running, and while the repository has a Ready issue, each with its Activity log line, and no Command log is kept.
  • With no Node.js on PATH, it fails before any session, with a cause naming Node.js.
  • The Session prompt names the skill, full audit mode, quick, the scope, the threat-model document when there is one, the output directory, the earlier runs, the no-asking rule and the final line.
  • Each finding in the report becomes one draft advisory with the fields above, and a second audit with the same finding creates no second advisory.
  • No advisory is published or closed, and nothing is committed or pushed.
  • A session that ends without the final line, or with a report that fails the skill's validators, fails the Security run with a cause that says so.
  • Progress lines, the Command log and the Activity log cover the run, as for an Architect run.
  • The README documents thirdshift secure.

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentFully specified, ready for an AFK agent

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions