testing-session
Start, inspect, log, and stop isolated project testing sessions in ace-workflows. Use when the operator asks for testing mode, a project-scoped read-only run, a slash-callable testing-session slug, or
SKILL.md.agents/skills/testing-session/SKILL.md
GitHubTesting Session
Use this skill as the canonical testing-mode entrypoint. A testing session is the agent actively using a selected project workflow while normal project state remains read-only. The only allowed writes are the testing-session index and the selected session folder.
Skill-First Runtime Rule
Follow root AGENTS.md: testing mode is exposed through $testing-session.
The state helper is internal support for deterministic session files, not the
operator-facing way to call this skill.
Required Reading
Before acting:
- Read root
AGENTS.md. - Read
registry/agents-md.json. - Read
projects/<project-slug>/AGENTS.md. - Read
projects/<project-slug>/project.json. - Read
projects/<project-slug>/tasks/index.json. - Query testing-session summaries through the read-only state helper when the project slug is known.
Do not create or continue normal tasks from this skill.
Invocation Contract
Use one canonical slug with explicit actions:
$testing-session action:start project:<slug> [goal:"..."]
$testing-session action:status session:<session-id> [project:<slug>]
$testing-session action:log session:<session-id> type:<event-type> [...]
$testing-session action:stop session:<session-id> [project:<slug>]
The operator surface may expose this as a slash-style entry, but .agents/skills
remains the source of truth. Do not add legacy command shims.
Allowed event types:
started, preload_complete, decision, tool_run, artifact_read, finding, blocked, completed
Start
For action:start:
- Require
project:<slug>. - Accept optional
goal:"...". - Load the project state read-only.
- Call the helper's start operation defined under
Internal Support. - Report only the session id, status, index path, session path, and next action.
- Do not recommend tasks, edit tracker JSON, or change normal workflow files.
The script creates:
projects/<project-slug>/artifacts/testing-sessions/index.json
projects/<project-slug>/artifacts/testing-sessions/<session-id>/session.json
projects/<project-slug>/artifacts/testing-sessions/<session-id>/events.jsonl
projects/<project-slug>/artifacts/testing-sessions/<session-id>/notes.md
Log
During a testing session, log each meaningful state transition through the
helper's log operation defined under Internal Support.
Use type:decision, type:tool_run, type:artifact_read, type:finding,
type:blocked, or type:completed as the run proceeds. Include read: and
write: comma-separated path lists when useful.
Log what happened. Do not include recommendations or next-task proposals in the testing-session state.
Treat every testing-session file as publishable repository state. Record only
workflow behavior, fixture identifiers, repository-relative paths, and redacted
outcomes. Replace user conversation details with neutral fixture language before
logging. Keep PHI, medical or insurance circumstances, financial status,
credentials, contact information, and machine-specific absolute paths out of
goals, summaries, rationales, notes, and path lists. If a useful finding cannot
be expressed safely, report private-session-detail-withheld and keep the detail
in chat rather than durable session state.
The helper's sensitive-text patterns are defense in depth, not proof that text is safe to publish. Do not rely on a passing pattern screen to sanitize free text. The agent must redact first, use neutral fixtures, and withhold any detail whose publication safety is uncertain.
Status
For action:status, call the helper's status operation defined under
Internal Support.
Return the lightweight session summary only. Do not load the full event stream unless the user asks for exact evidence.
Stop
For action:stop, call the helper's stop operation defined under Internal Support.
The stop action updates only session.json, events.jsonl, and the project
testing-session index.json.
Internal Support
Use these deterministic helper calls only after $testing-session has selected
the corresponding action:
node scripts/testing-session-state.mjs action:start project:<slug> [goal:"..."]
node scripts/testing-session-state.mjs action:log session:<session-id> type:tool_run summary:"..." result:ok rationale:"..."
node scripts/testing-session-state.mjs action:status session:<session-id>
node scripts/testing-session-state.mjs action:stop session:<session-id>
Output Boundary
Report captured state, not recommendations. A normal task may later inspect the testing-session index during preload, but this skill must not create tasks, continue tasks, edit ordinary project artifacts, or change skills/scripts except when the selected task explicitly approves implementation work.
Before reporting a session as valid, require the helper to confirm that every
persisted path is repository-relative and every persisted text field passes its
best-effort sensitive-pattern screen. This check supplements, but never replaces,
the redaction and neutral-fixture rule above. Stop with
testing-session-privacy-rejected when that gate fails.