Validating Fields
This shared skill provides a deterministic bash+jq validation script for task status transitions.
It enforces required fields as hard-block errors and recommends optional fields as warnings.
Usage
bash ${CLAUDE_PLUGIN_ROOT}/skills/validating-fields/scripts/validate-task-fields.sh \
<target_status> <task_json_file>
target_status: The status being transitioned TO (e.g., Ready, In Progress, Blocked, Done)
task_json_file: Path to a JSON file containing a single Notion page object (full properties)
Output
{
"valid": true,
"target_status": "Ready",
"errors": [],
"warnings": [
{"field": "Issuer", "rule": "recommended", "message": "Issuer is empty. Consider running backfill."}
]
}
valid: false → block the transition, present errors to user
valid: true with warnings → allow proceeding, present warnings to user
- Exit code is always 0 — check
.valid in the JSON output
Validation Rules
| Target Status |
Required (errors) |
Recommended (warnings) |
| Ready |
Description (non-empty, ≥50 chars), AC (non-empty + semantic check), Execution Plan (non-empty) |
Issuer (non-empty), Assignees (non-empty), Priority (set) |
| In Progress |
All Ready requirements + Executor (set), Working Directory (non-empty for AI executors) |
Issuer, Branch (for claude-code executor) |
| Blocked |
Description (non-empty), AC (non-empty) |
Issuer, Error Message |
| Done |
Description (non-empty) |
Agent Output (for AI executors) |
Issuer is always a warning, never an error — ensures backward compatibility with pre-migration tasks.
Semantic AC Check
AC text is scanned for at least one verifiable condition indicator:
- Command:
npm, curl, git, python, bash, test, run, build, deploy
- File path: contains
/ or common extensions (.ts, .js, .py, .md, .html, .css)
- Numeric threshold: digits followed by
%, ms, s, count, times, items
- Explicit state:
returns, displays, creates, exists, passes, fails, contains, shows, generates, sends, receives, confirms, records, updates
If none found → error: "AC lacks verifiable conditions. Include commands, file paths, metrics, or observable outcomes."
This is a heuristic backstop, not a perfect quality gate. It catches worst-case garbage but not subtle gaps.
1---2name: validating-fields3description: Deterministic field validation for task status transitions. Returns pass/fail with errors and warnings as JSON. Used by managing-tasks, executing-tasks, and running-daily-tasks.4---56# Validating Fields78This shared skill provides a deterministic bash+jq validation script for task status transitions.9It enforces required fields as hard-block errors and recommends optional fields as warnings.1011## Usage1213```bash14bash ${CLAUDE_PLUGIN_ROOT}/skills/validating-fields/scripts/validate-task-fields.sh \15 <target_status> <task_json_file>16```1718- `target_status`: The status being transitioned TO (e.g., `Ready`, `In Progress`, `Blocked`, `Done`)19- `task_json_file`: Path to a JSON file containing a single Notion page object (full properties)2021## Output2223```json24{25 "valid": true,26 "target_status": "Ready",27 "errors": [],28 "warnings": [29 {"field": "Issuer", "rule": "recommended", "message": "Issuer is empty. Consider running backfill."}30 ]31}32```3334- `valid: false` → block the transition, present errors to user35- `valid: true` with warnings → allow proceeding, present warnings to user36- Exit code is always 0 — check `.valid` in the JSON output3738## Validation Rules3940| Target Status | Required (errors) | Recommended (warnings) |41|---|---|---|42| **Ready** | Description (non-empty, ≥50 chars), AC (non-empty + semantic check), Execution Plan (non-empty) | Issuer (non-empty), Assignees (non-empty), Priority (set) |43| **In Progress** | All Ready requirements + Executor (set), Working Directory (non-empty for AI executors) | Issuer, Branch (for claude-code executor) |44| **Blocked** | Description (non-empty), AC (non-empty) | Issuer, Error Message |45| **Done** | Description (non-empty) | Agent Output (for AI executors) |4647**Issuer is always a warning**, never an error — ensures backward compatibility with pre-migration tasks.4849## Semantic AC Check5051AC text is scanned for at least one verifiable condition indicator:52- **Command**: `npm`, `curl`, `git`, `python`, `bash`, `test`, `run`, `build`, `deploy`53- **File path**: contains `/` or common extensions (`.ts`, `.js`, `.py`, `.md`, `.html`, `.css`)54- **Numeric threshold**: digits followed by `%`, `ms`, `s`, `count`, `times`, `items`55- **Explicit state**: `returns`, `displays`, `creates`, `exists`, `passes`, `fails`, `contains`, `shows`, `generates`, `sends`, `receives`, `confirms`, `records`, `updates`5657If none found → error: "AC lacks verifiable conditions. Include commands, file paths, metrics, or observable outcomes."5859This is a heuristic backstop, not a perfect quality gate. It catches worst-case garbage but not subtle gaps.