Skip to content

Commit a4dc74c

Browse files
nhortonclaude
andcommitted
feat: add no-sentinel-files SHOULD requirement to job_yml DeepSchema
Discourages the sentinel-placeholder-file workaround (e.g., writing a NONE.md file when the real result is "nothing to report") used to satisfy required file_path outputs that would otherwise be empty. The fix is to use type: string for outputs whose list can legitimately be empty, since string outputs can naturally carry a narrative "no items found" message. Kept as SHOULD so genuine filesystem-artifact needs (manifests, etc.) can still opt into a sentinel, but the common "required output can't be empty" workaround is explicitly not a sufficient reason. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 1994f94 commit a4dc74c

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

src/deepwork/standard_schemas/job_yml/deepschema.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,20 @@ requirements:
138138
that are too large for inline strings. The existence of a `.deepwork/tmp/` path
139139
in a step_argument name is a strong signal the argument should be `type: string`.
140140
141+
no-sentinel-files: >
142+
Steps SHOULD NOT use sentinel placeholder files (e.g., writing a `NONE.md` or
143+
`EMPTY.md` file to satisfy a required `file_path` output when the real result is
144+
"nothing to report") to work around the rule that `file_path` outputs cannot be
145+
empty. If a step's output is a list that can legitimately be empty, the output
146+
SHOULD be `type: string` (containing a narrative summary that naturally handles
147+
the empty case) rather than `type: file_path` with a placeholder file. Sentinel
148+
files leave stray artifacts on disk, confuse downstream steps that treat every
149+
output path as a real file, and mislead reviewers. Exception: a sentinel file
150+
MAY be used when the step genuinely needs a filesystem artifact a later step
151+
will read and parse (e.g., a manifest with "no items" semantics baked into its
152+
schema) — but the common "required output can't be empty" workaround is not a
153+
sufficient reason.
154+
141155
step-visibility-boundary: >
142156
A step's instructions MUST NOT reference information from steps that have not yet
143157
run in the same workflow, including steps from other workflows in the same job.

0 commit comments

Comments
 (0)