Determine Signals
A question about to be asked, or a fact about to be stated, has often
already been answered somewhere: a transcript, an issue, a ledger entry,
a notebook page, a vault fact, or the live system itself. The failure
this skill targets is not lacking information — it is acting as though
the information does not exist because nobody checked. A stored signal
and a live signal can also disagree, and picking the stored one by
default because it's already in context is exactly how a settled
decision gets silently reopened.
Reach for this when
- About to ask the user something answerable by looking at a transcript,
issue, ledger, or vault entry instead.
- About to state something as current — a decision, a count, a system's
state — that has not been rechecked since it was last recorded.
- A memory fact, a prior message, or a document disagrees with what the
live system currently shows, and the pull is to resolve it silently in
either direction.
- About to report "nothing found" from a source not yet confirmed capable
of returning something.
Do not reach for this to decide what the user wants right now — both this
skill and determine-intent fire at the same "before acting" moment, but
determine-intent asks what the goal is; this skill asks what is already
known. Run this one first when a request might already be answered by a
record, then determine-intent for what to do with what you found. Do
not reach for this as a scheduled sweep of your own transcripts to find
new skill material — that is mine-transcripts, and it is deliberate and
periodic, not per-task. Do not reach for this to decide whether a check
or metric you already have a verdict from can be trusted — that is
verify-the-instrument; this skill is what sends you looking for a
signal source in the first place, and it hands off to
verify-the-instrument's method the moment a specific source returns
zero.
Enumerate sources before concluding anything
Do not stop at the first source that returns an answer. Check what is
available and relevant, in roughly this order of currency:
- Live system state — the running process, the actual file, the
current git status, the ledger's live tables. This is what "current"
means; everything else is a record of what someone believed at some
earlier point.
- This conversation's own transcript — what was already said or
decided in the current task, before re-deriving it.
- Issues and PRs on the relevant repository — a decision or
rationale is often already written down as a closed issue or a merged
PR description.
- The ledger or notebook, if the environment has one — completion
events, verdicts, prior runs. Check whether it is actually being read
anywhere downstream, not only written to.
- Vault or memory facts — durable notes from prior sessions. These
are the most likely to be stale, because nothing forces them to be
rechecked when the world moves.
Not every source applies to every question. The discipline is checking
which ones do, not running all five every time.
Prefer live signal over stored signal, and say when they disagree
When a stored fact (memory, a vault note, an old issue) and a live check
(current file contents, current process list, current git state)
disagree, the live one wins — but the disagreement itself is information
the user needs, not something to resolve quietly and move on from. State
both: what was recorded, what was found live, and which one is being
acted on and why.
A stale memory fact reopening a settled build-vs-adopt decision while
sixteen lanes were visibly building the app in plain view is the shape of
this failure: the stored signal was cheaper to read, so it won by
default, not by evidence.
Hand off to verify-the-instrument at the first zero result
A source returning nothing is not the same as a source with nothing in
it. The moment a specific query, search, or read comes back empty, stop
and apply verify-the-instrument's check before trusting that emptiness:
confirm the query is capable of a nonzero result before believing its
zero. That skill owns the mechanics; this skill owns noticing that a
zero-result source is standing in for "no signal" without having earned
that reading. Two measured shapes this has taken:
- A ledger with 444 completion events and 0 acknowledgements is not
evidence the events were unimportant — it is evidence nothing
downstream reads it. "Written but never read" and "never written" are
different findings; which one is present is a
determine-signals
question, and confirming the read path is dead rather than merely quiet
is verify-the-instrument's.
find -newermt matching 0 of 1159 files, pgrep -c returning empty
against 5 live matching processes, and log show returning 0 lines for
every window checked were each read as "nothing happened," when the
actual finding was that each query could not report a hit.
State which signal supports each conclusion
For every conclusion reported, name the source: "per issue #145," "per
the live ledger query," "per this conversation's earlier message," "no
recorded source — inferred." A conclusion with no named source is a
guess wearing a conclusion's clothes, and the reader cannot tell the
difference unless it is said.
What this skill is not
- Not
determine-intent. That skill works out what the user wants —
the goal behind the request — before acting. This skill works out what
is already known or already true before assuming or asking. They share
a trigger moment and often run back to back: determine what is already
known, then determine what is wanted given it. determine-intent's own
description states this ordering; this skill is the earlier half of it
where a record, not a goal, is in question.
- Not
mine-transcripts. That skill is a deliberate, periodic sweep
of transcripts to find vocabulary worth turning into a new skill. This
skill runs per-task, mid-work, and produces an answer to the question
in front of you, not a candidate list.
- Not
verify-the-instrument. That skill checks whether a test,
review, or metric already in hand was capable of reporting failure.
This skill is what sends you looking for a signal source at all, and
decides which source to trust when several disagree; the instant a
specific source returns an empty result, apply verify-the-instrument's
method to that result rather than this skill's.
- Not
sanity-check or keep-me-honest. Those operate on reasoning
and on what gets told to the user, respectively, after the answer is
already in hand. This skill runs earlier, while what is known is still
being gathered.
- Not
devils-advocate. That skill builds the strongest case against
a decision that is about to be made. This skill does not argue a side —
it establishes what the record and the live system already say, which
an opposing case then argues from or against.
Where this came from
Rationale and measured evidence are recorded in issue jonhill90/skills#191
on this repository: a stale memory fact reopening a settled
build-vs-adopt decision (#24, closed decided-build) while sixteen lanes
were visibly building the app in plain view; a ledger with 444 completion
events written and never read (0 notified, 0 acked, pr_verdicts empty);
and three instrument-blind zero-result queries (find -newermt matching
0 of 1159 files, pgrep -c returning empty against 5 live processes,
log show returning 0 lines for every window). The underlying
transcripts are private evaluation evidence, not published here.
This skill was named, alongside determine-intent, devils-advocate,
keep-me-honest, and sanity-check, in a single design pass on
2026-08-16 that set out explicit "not-this" boundaries for all five
before the three missing ones were built (jonhill90/skills#190,
jonhill90/skills#191, jonhill90/skills#192) — the boundary wording above
was checked against that design and against determine-intent and
devils-advocate as proposed in their own PRs (#193, #194), including
the devil-advocate → devils-advocate naming correction #194 made to
its own branch before merge, rather than invented independently.
1---2name: determine-signals3description: Find out what has already been said — in transcripts, issues and PRs, the ledger, the notebook, and vault facts — before asking a question or stating a fact as current, and prefer live system state over any stored record when they disagree. Use before acting on a non-trivial request, right where you would otherwise ask something you could answer by looking, or restate a fact without rechecking it. Not for what the user wants (see determine-intent, which runs on the same "before acting" moment but asks the goal, not the record); not a deliberate periodic transcript sweep for new skill candidates (see mine-transcripts, which is scheduled, not per-task); not for judging whether a check or metric can be trusted once you have its verdict (see verify-the-instrument) — this skill decides which signal source to consult and which one wins when two disagree, not whether a given source's zero result is real.4---56# Determine Signals78A question about to be asked, or a fact about to be stated, has often9already been answered somewhere: a transcript, an issue, a ledger entry,10a notebook page, a vault fact, or the live system itself. The failure11this skill targets is not lacking information — it is acting as though12the information does not exist because nobody checked. A stored signal13and a live signal can also disagree, and picking the stored one by14default because it's already in context is exactly how a settled15decision gets silently reopened.1617## Reach for this when1819- About to ask the user something answerable by looking at a transcript,20 issue, ledger, or vault entry instead.21- About to state something as current — a decision, a count, a system's22 state — that has not been rechecked since it was last recorded.23- A memory fact, a prior message, or a document disagrees with what the24 live system currently shows, and the pull is to resolve it silently in25 either direction.26- About to report "nothing found" from a source not yet confirmed capable27 of returning something.2829Do not reach for this to decide what the user wants right now — both this30skill and `determine-intent` fire at the same "before acting" moment, but31`determine-intent` asks what the goal is; this skill asks what is already32known. Run this one first when a request might already be answered by a33record, then `determine-intent` for what to do with what you found. Do34not reach for this as a scheduled sweep of your own transcripts to find35new skill material — that is `mine-transcripts`, and it is deliberate and36periodic, not per-task. Do not reach for this to decide whether a check37or metric you already have a verdict from can be trusted — that is38`verify-the-instrument`; this skill is what sends you looking for a39signal source in the first place, and it hands off to40`verify-the-instrument`'s method the moment a specific source returns41zero.4243## Enumerate sources before concluding anything4445Do not stop at the first source that returns an answer. Check what is46available and relevant, in roughly this order of currency:47481. **Live system state** — the running process, the actual file, the49 current git status, the ledger's live tables. This is what "current"50 means; everything else is a record of what someone believed at some51 earlier point.522. **This conversation's own transcript** — what was already said or53 decided in the current task, before re-deriving it.543. **Issues and PRs** on the relevant repository — a decision or55 rationale is often already written down as a closed issue or a merged56 PR description.574. **The ledger or notebook**, if the environment has one — completion58 events, verdicts, prior runs. Check whether it is actually being read59 anywhere downstream, not only written to.605. **Vault or memory facts** — durable notes from prior sessions. These61 are the most likely to be stale, because nothing forces them to be62 rechecked when the world moves.6364Not every source applies to every question. The discipline is checking65which ones do, not running all five every time.6667## Prefer live signal over stored signal, and say when they disagree6869When a stored fact (memory, a vault note, an old issue) and a live check70(current file contents, current process list, current git state)71disagree, the live one wins — but the disagreement itself is information72the user needs, not something to resolve quietly and move on from. State73both: what was recorded, what was found live, and which one is being74acted on and why.7576A stale memory fact reopening a settled build-vs-adopt decision while77sixteen lanes were visibly building the app in plain view is the shape of78this failure: the stored signal was cheaper to read, so it won by79default, not by evidence.8081## Hand off to verify-the-instrument at the first zero result8283A source returning nothing is not the same as a source with nothing in84it. The moment a specific query, search, or read comes back empty, stop85and apply `verify-the-instrument`'s check before trusting that emptiness:86confirm the query is capable of a nonzero result before believing its87zero. That skill owns the mechanics; this skill owns noticing that a88zero-result source is standing in for "no signal" without having earned89that reading. Two measured shapes this has taken:9091- A ledger with 444 completion events and 0 acknowledgements is not92 evidence the events were unimportant — it is evidence nothing93 downstream reads it. "Written but never read" and "never written" are94 different findings; which one is present is a `determine-signals`95 question, and confirming the read path is dead rather than merely quiet96 is `verify-the-instrument`'s.97- `find -newermt` matching 0 of 1159 files, `pgrep -c` returning empty98 against 5 live matching processes, and `log show` returning 0 lines for99 every window checked were each read as "nothing happened," when the100 actual finding was that each query could not report a hit.101102## State which signal supports each conclusion103104For every conclusion reported, name the source: "per issue #145," "per105the live ledger query," "per this conversation's earlier message," "no106recorded source — inferred." A conclusion with no named source is a107guess wearing a conclusion's clothes, and the reader cannot tell the108difference unless it is said.109110## What this skill is not111112- **Not `determine-intent`.** That skill works out what the user wants —113 the goal behind the request — before acting. This skill works out what114 is already known or already true before assuming or asking. They share115 a trigger moment and often run back to back: determine what is already116 known, then determine what is wanted given it. `determine-intent`'s own117 description states this ordering; this skill is the earlier half of it118 where a record, not a goal, is in question.119- **Not `mine-transcripts`.** That skill is a deliberate, periodic sweep120 of transcripts to find vocabulary worth turning into a new skill. This121 skill runs per-task, mid-work, and produces an answer to the question122 in front of you, not a candidate list.123- **Not `verify-the-instrument`.** That skill checks whether a test,124 review, or metric already in hand was capable of reporting failure.125 This skill is what sends you looking for a signal source at all, and126 decides which source to trust when several disagree; the instant a127 specific source returns an empty result, apply `verify-the-instrument`'s128 method to that result rather than this skill's.129- **Not `sanity-check` or `keep-me-honest`.** Those operate on reasoning130 and on what gets told to the user, respectively, after the answer is131 already in hand. This skill runs earlier, while what is known is still132 being gathered.133- **Not `devils-advocate`.** That skill builds the strongest case against134 a decision that is about to be made. This skill does not argue a side —135 it establishes what the record and the live system already say, which136 an opposing case then argues from or against.137138## Where this came from139140Rationale and measured evidence are recorded in issue jonhill90/skills#191141on this repository: a stale memory fact reopening a settled142build-vs-adopt decision (#24, closed decided-build) while sixteen lanes143were visibly building the app in plain view; a ledger with 444 completion144events written and never read (0 notified, 0 acked, `pr_verdicts` empty);145and three instrument-blind zero-result queries (`find -newermt` matching1460 of 1159 files, `pgrep -c` returning empty against 5 live processes,147`log show` returning 0 lines for every window). The underlying148transcripts are private evaluation evidence, not published here.149150This skill was named, alongside `determine-intent`, `devils-advocate`,151`keep-me-honest`, and `sanity-check`, in a single design pass on1522026-08-16 that set out explicit "not-this" boundaries for all five153before the three missing ones were built (jonhill90/skills#190,154jonhill90/skills#191, jonhill90/skills#192) — the boundary wording above155was checked against that design and against `determine-intent` and156`devils-advocate` as proposed in their own PRs (#193, #194), including157the `devil-advocate` → `devils-advocate` naming correction #194 made to158its own branch before merge, rather than invented independently.