Use when correcting a delivery artifact mid-ticket: answering an open question, saying the analysis read a criterion wrongly, reporting that a master prompt's run produced the wrong thing, or noting that the ticket itself has moved. Names the artifact that owns the correction before changing anything, classifies it as new information, a correction, a scope change or a preference, and lands it in the document rather than only in the reply — quoting the words it arrived in, striking the question it answers with its answer and who gave it, and appending to the revision log. Then names what has gone stale: a changed row makes the master prompt stale, along with any code already written against it, and the prompt is regenerated rather than edited. Refuses to widen scope quietly, to turn a preference into a standard, or to close a question because it was discussed.
The edge that closes every loop in the delivery flow. Something came back wrong — the
analysis misread a criterion, the exploratory round turned up a fact that changes a row,
the master prompt's run produced the wrong thing — and this phase takes the correction, in
your words, and lands it in the artifact that owns it. It writes no production code and
it decides nothing on its own.
The feedback is the argument./ticket-feedback the empty-collection case must 404, not return an empty list — product confirmed. Sentences are fine; a list is fine. With no
argument it uses the correction already in the conversation, and asks rather than guessing
if there is more than one thing there.
Why a phase at all, rather than just saying it. A correction spoken into a session is
gone next week and gone in the next session, and it was never anywhere the pull request
could quote. That is not a hypothetical: "the same clarification is requested twice on one
ticket" is already a named failure of
TICKET-ANALYSIS.md §7, and it happens because answers stay in
conversations while documents keep the questions. This phase exists to make the correction
land in a file, and to say what that correction just invalidated.
Confirm you can open
00-REFERENCE-ARCHITECTURE.md and the
guides under docs/guides/. If you cannot, stop and say so. Feedback
routinely turns into a rule — "we always translate at the edge" — and a rule applied from
memory is the failure this repository exists to prevent, arriving in the most casual
possible wrapper.
And there has to be an artifact to correct. An analysis, a master prompt, a diff, a
review. Feedback with nothing to land in is a conversation: say so, and point at
/ticket-analysis, which is where a ticket with no analysis starts.
1. Name the target
Say which artifact this feedback belongs to, in one line, before you change anything —
and say it out loud in the reply, because getting this wrong is how a scope change gets
filed as a typo.
The feedback is about
It lands in
Then
what the ticket asks for, or how it maps onto the architecture
One correction can land in two places — a misread criterion is both a wrong row and wrong
code — and then it lands in both, upstream first. Never fix the downstream artifact
alone. Code patched to match feedback the analysis still contradicts leaves two
documents disagreeing, and the next person to read them cannot tell which one is current.
Where you cannot tell which row it is, ask. Feedback you cannot place is a question,
not a mandate: guessing produces a confident rewrite of things nobody asked you to touch,
and that is worse than a clarifying question by a wide margin.
2. Classify it
Four kinds. They land differently, so name the kind explicitly:
New information — a fact the analysis did not have, usually the answer to an open
question. It closes something. Record the answer and who gave it: an answer with no
attributor cannot be re-checked when it turns out to be wrong.
A correction — the analysis had it and had it wrong. This is the expensive kind,
because things were derived from it. §4 is about that.
A scope change — the ticket itself moved: a criterion added, dropped or altered.
Not a correction to the analysis; a change to what is being analysed. The table gains or
loses a row, out-of-scope is restated, and §6's conditions are re-tested and re-decided
by a person. Say plainly that scope changed, and what it now excludes.
A preference — how, not what: a naming convention, a shape you prefer, a structure
you find clearer. Record it as a decision on this ticket, applied because you asked. It
does not become a rule. §5 is why.
If one message carries several of these — it usually does — split them and land each one,
rather than treating the whole message as the most convenient kind.
3. Landing it
The change goes in the document. The reply is the diff, not the record.
Amend, do not regenerate. Change the rows the feedback touches and leave the rest
alone. A regenerated analysis costs the decisions the earlier rounds bought, and hides
the loss behind output that looks the same (TICKET-ANALYSIS.md
§2).
Strike answered questions; do not delete them. Keep the question, its answer, and
who answered. A question that disappears is indistinguishable from one never asked.
Append to the revision log — what changed, what closed it, what is still open.
Quote the feedback in the document, in the words it arrived in. Your restatement of
it is already an interpretation; the original is what someone will want in three weeks.
Cite what the change rests on. If the feedback made a row move to another layer, the
row cites the principle that puts it there (P3), not "as discussed".
Then report, in the reply: which artifact, which rows, which questions closed, which
conditions in §6 moved, and what is now stale downstream (§4). Nothing else — this phase
does not take the opportunity to improve the parts nobody mentioned.
4. What it invalidates
A correction upstream makes everything derived from it stale. Saying so is most of this
phase's value, because staleness is silent: a master prompt generated last hour still
reads perfectly after the row it came from changed.
What changed
What is now stale
What to do
A row in the analysis table (layer, principle, guide, files)
the master prompt; any code written against that row
regenerate the prompt; name the files already written against the old row
A criterion added, removed or reworded
the prompt, and the test that proved the old wording
regenerate; the old test is a finding, not a pass
Out of scope
the prompt's block 6, and anything built into the excluded area
regenerate; say what has to come back out
An accepted risk that is now closed
the prompt's block 8
regenerate, so the implementing session stops treating it as unknown
A recorded decision reversed
the prompt, and the decision's own entry
record the reversal with the reason; do not edit the original away
Only the generated prompt
nothing upstream
regenerate; the analysis was right
The master prompt is regenerated, never hand-edited — including here, where editing it
is most tempting because the change looks like one word. An edited prompt has no source
and disagrees with its analysis silently
(GENERATE-MASTER-PROMPT.md §5).
Where code exists against a row that just changed, name the files and stop. Rewriting
them is IMPLEMENTATION-PHASE.md's job, with its pre-analysis
and its tests; doing it from inside a feedback round produces an untested edit made in the
document phase, which is how a delivery flow quietly stops having phases at all.
5. What feedback is not
Not a way to widen scope quietly. "While you're in there" is a scope change: it gets
a row, or it gets refused in writing. Both are cheap here and expensive later.
Not a source of architectural rules. A preference recorded on this ticket is a
preference. It becomes a standard when it is written into a guide and cited from there —
that is the whole difference between this estate's rules and an opinion in the
architecture's clothing.
Not a way to close a question by discussing it. A question closes on an answer, with
an attributor. "We talked about it" closes nothing.
Not authority to override a principle silently. Feedback that contradicts a principle
gets that said, with the citation, once. You may still overrule it — you own the ticket
and the estate — but it is recorded as a deviation with a reason (P14), not applied as
though the principle had never said otherwise.
Not a review. This phase lands what you said. It does not go hunting for other
problems, and it does not relitigate rows the feedback did not touch.
6. Failure modes
Symptom
Cause
The same correction is given twice, three rounds apart
It was applied to the output and never landed in the document; the artifact still says the old thing
The analysis and the implementation disagree, and both look deliberate
Feedback was landed downstream only — the code was patched, the row was not
Work is done against a master prompt that no longer matches its analysis
§4 was skipped, so nothing said the prompt was stale, and it still read fine
A round of feedback changed things nobody mentioned
The document was regenerated rather than amended, or the phase took the opportunity to improve adjacent rows
A preference from one ticket is enforced on the next as a standard
It was recorded as a rule instead of as a decision, and nothing required it to cite a guide
Scope grew and no one can point at when
A scope change was classified as a correction, so the table gained a criterion without the gate being re-decided
An answer turns out to be wrong and nobody can say who gave it
The answer was recorded without its attributor
Feedback was misfiled and the wrong artifact was rewritten
§1 was done silently, or guessed at, instead of being stated before anything changed
7. Checklist
Constitution and the needed guides confirmed readable; stopped and said so if not
An artifact to correct actually exists; otherwise said so and pointed at /ticket-analysis
Target artifact named in the reply before anything was changed; asked rather than guessed where it was unclear
Feedback classified — new information, correction, scope change, or preference — and a multi-part message split
Landed in the document, not only in the reply: rows amended not regenerated, questions struck with their answers and attributors, revision log appended
The feedback quoted in its original words
Every rule-shaped consequence citing a principle or guide section
Downstream staleness named per §4, including files already written against a row that changed
The master prompt regenerated rather than edited, where it was affected
Scope changes stated as scope changes, with §6's conditions re-tested and left to a person to re-decide
Contradictions with a principle stated once, with the citation, and recorded as a deviation with a reason if overruled
Nothing touched that the feedback did not name
Generated from docs/delivery/FEEDBACK.md by scripts/build-marketplace.mjs. Do not edit this file: change the source document, or its entry in catalog/marketplace.catalog.json, and re-run the generator.
1---2name: ticket-feedback3description: Use when correcting a delivery artifact mid-ticket: answering an open question, saying the analysis read a criterion wrongly, reporting that a master prompt's run produced the wrong thing, or noting that the ticket itself has moved. Names the artifact that owns the correction before changing anything, classifies it as new information, a correction, a scope change or a preference, and lands it in the document rather than only in the reply — quoting the words it arrived in, striking the question it answers with its answer and who gave it, and appending to the revision log. Then names what has gone stale: a changed row makes the master prompt stale, along with any code already written against it, and the prompt is regenerated rather than edited. Refuses to widen scope quietly, to turn a preference into a standard, or to close a question because it was discussed.4---56# Feedback78The edge that closes every loop in the delivery flow. Something came back wrong — the9analysis misread a criterion, the exploratory round turned up a fact that changes a row,10the master prompt's run produced the wrong thing — and this phase takes the correction, in11your words, and **lands it in the artifact that owns it**. It writes no production code and12it decides nothing on its own.1314**The feedback is the argument.** `/ticket-feedback the empty-collection case must 404,15not return an empty list — product confirmed`. Sentences are fine; a list is fine. With no16argument it uses the correction already in the conversation, and asks rather than guessing17if there is more than one thing there.1819**Why a phase at all, rather than just saying it.** A correction spoken into a session is20gone next week and gone in the next session, and it was never anywhere the pull request21could quote. That is not a hypothetical: "the same clarification is requested twice on one22ticket" is already a named failure of23[`TICKET-ANALYSIS.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/TICKET-ANALYSIS.md) §7, and it happens because answers stay in24conversations while documents keep the questions. This phase exists to make the correction25land in a file, and to say what that correction just invalidated.2627**Contents**28290. [What has to be true first](#0-what-has-to-be-true-first)301. [Name the target before changing anything](#1-name-the-target)312. [Classify it](#2-classify-it)323. [Landing it](#3-landing-it)334. [What it invalidates downstream](#4-what-it-invalidates)345. [What feedback is not](#5-what-feedback-is-not)356. [Failure modes](#6-failure-modes)367. [Checklist](#7-checklist)3738---3940## 0. What has to be true first4142Confirm you can open43[`00-REFERENCE-ARCHITECTURE.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/architecture/00-REFERENCE-ARCHITECTURE.md) and the44guides under [`docs/guides/`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/guides/). **If you cannot, stop and say so.** Feedback45routinely turns into a rule — "we always translate at the edge" — and a rule applied from46memory is the failure this repository exists to prevent, arriving in the most casual47possible wrapper.4849**And there has to be an artifact to correct.** An analysis, a master prompt, a diff, a50review. Feedback with nothing to land in is a conversation: say so, and point at51`/ticket-analysis`, which is where a ticket with no analysis starts.5253## 1. Name the target5455Say which artifact this feedback belongs to, in one line, **before you change anything** —56and say it out loud in the reply, because getting this wrong is how a scope change gets57filed as a typo.5859| The feedback is about | It lands in | Then |60|---|---|---|61| what the ticket asks for, or how it maps onto the architecture | the analysis document ([`TICKET-ANALYSIS.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/TICKET-ANALYSIS.md) §2) | re-test §6's four conditions and report them |62| a fact about the codebase the analysis got wrong or missed | the same document — the row, and the exploratory findings | as above |63| something the generated prompt lost or garbled, where the analysis is right | nothing upstream; it is a generation defect | regenerate ([`GENERATE-MASTER-PROMPT.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/GENERATE-MASTER-PROMPT.md) §7) |64| the code that came out, where the analysis and prompt are right | nothing upstream | back to [`IMPLEMENTATION-PHASE.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/IMPLEMENTATION-PHASE.md) |65| a review finding you disagree with | the pull request's recorded decisions | [`PR-REVIEW.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/PR-REVIEW.md) re-reads them |6667One correction can land in two places — a misread criterion is both a wrong row and wrong68code — and then it lands in both, upstream first. **Never fix the downstream artifact69alone.** Code patched to match feedback the analysis still contradicts leaves two70documents disagreeing, and the next person to read them cannot tell which one is current.7172**Where you cannot tell which row it is, ask.** Feedback you cannot place is a question,73not a mandate: guessing produces a confident rewrite of things nobody asked you to touch,74and that is worse than a clarifying question by a wide margin.7576## 2. Classify it7778Four kinds. They land differently, so name the kind explicitly:7980- **New information** — a fact the analysis did not have, usually the answer to an open81 question. It closes something. Record the answer *and who gave it*: an answer with no82 attributor cannot be re-checked when it turns out to be wrong.83- **A correction** — the analysis had it and had it wrong. This is the expensive kind,84 because things were derived from it. §4 is about that.85- **A scope change** — the ticket itself moved: a criterion added, dropped or altered.86 Not a correction to the analysis; a change to what is being analysed. The table gains or87 loses a row, out-of-scope is restated, and §6's conditions are re-tested and re-decided88 by a person. Say plainly that scope changed, and what it now excludes.89- **A preference** — how, not what: a naming convention, a shape you prefer, a structure90 you find clearer. Record it as a decision on this ticket, applied because you asked. It91 does not become a rule. §5 is why.9293If one message carries several of these — it usually does — split them and land each one,94rather than treating the whole message as the most convenient kind.9596## 3. Landing it9798**The change goes in the document. The reply is the diff, not the record.**99100- **Amend, do not regenerate.** Change the rows the feedback touches and leave the rest101 alone. A regenerated analysis costs the decisions the earlier rounds bought, and hides102 the loss behind output that looks the same ([`TICKET-ANALYSIS.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/TICKET-ANALYSIS.md)103 §2).104- **Strike answered questions; do not delete them.** Keep the question, its answer, and105 who answered. A question that disappears is indistinguishable from one never asked.106- **Append to the revision log** — what changed, what closed it, what is still open.107- **Quote the feedback in the document, in the words it arrived in.** Your restatement of108 it is already an interpretation; the original is what someone will want in three weeks.109- **Cite what the change rests on.** If the feedback made a row move to another layer, the110 row cites the principle that puts it there (`P3`), not "as discussed".111112Then report, in the reply: which artifact, which rows, which questions closed, which113conditions in §6 moved, and what is now stale downstream (§4). Nothing else — this phase114does not take the opportunity to improve the parts nobody mentioned.115116## 4. What it invalidates117118A correction upstream makes everything derived from it stale. Saying so is most of this119phase's value, because staleness is silent: a master prompt generated last hour still120reads perfectly after the row it came from changed.121122| What changed | What is now stale | What to do |123|---|---|---|124| A row in the analysis table (layer, principle, guide, files) | the master prompt; any code written against that row | regenerate the prompt; name the files already written against the old row |125| A criterion added, removed or reworded | the prompt, and the test that proved the old wording | regenerate; the old test is a finding, not a pass |126| Out of scope | the prompt's block 6, and anything built into the excluded area | regenerate; say what has to come back out |127| An accepted risk that is now closed | the prompt's block 8 | regenerate, so the implementing session stops treating it as unknown |128| A recorded decision reversed | the prompt, and the decision's own entry | record the reversal *with the reason*; do not edit the original away |129| Only the generated prompt | nothing upstream | regenerate; the analysis was right |130131**The master prompt is regenerated, never hand-edited** — including here, where editing it132is most tempting because the change looks like one word. An edited prompt has no source133and disagrees with its analysis silently134([`GENERATE-MASTER-PROMPT.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/GENERATE-MASTER-PROMPT.md) §5).135136Where code exists against a row that just changed, **name the files and stop**. Rewriting137them is [`IMPLEMENTATION-PHASE.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/IMPLEMENTATION-PHASE.md)'s job, with its pre-analysis138and its tests; doing it from inside a feedback round produces an untested edit made in the139document phase, which is how a delivery flow quietly stops having phases at all.140141## 5. What feedback is not142143- **Not a way to widen scope quietly.** "While you're in there" is a scope change: it gets144 a row, or it gets refused in writing. Both are cheap here and expensive later.145- **Not a source of architectural rules.** A preference recorded on this ticket is a146 preference. It becomes a standard when it is written into a guide and cited from there —147 that is the whole difference between this estate's rules and an opinion in the148 architecture's clothing.149- **Not a way to close a question by discussing it.** A question closes on an answer, with150 an attributor. "We talked about it" closes nothing.151- **Not authority to override a principle silently.** Feedback that contradicts a principle152 gets that said, with the citation, once. You may still overrule it — you own the ticket153 and the estate — but it is recorded as a deviation with a reason (P14), not applied as154 though the principle had never said otherwise.155- **Not a review.** This phase lands what you said. It does not go hunting for other156 problems, and it does not relitigate rows the feedback did not touch.157158## 6. Failure modes159160| Symptom | Cause |161|---|---|162| The same correction is given twice, three rounds apart | It was applied to the output and never landed in the document; the artifact still says the old thing |163| The analysis and the implementation disagree, and both look deliberate | Feedback was landed downstream only — the code was patched, the row was not |164| Work is done against a master prompt that no longer matches its analysis | §4 was skipped, so nothing said the prompt was stale, and it still read fine |165| A round of feedback changed things nobody mentioned | The document was regenerated rather than amended, or the phase took the opportunity to improve adjacent rows |166| A preference from one ticket is enforced on the next as a standard | It was recorded as a rule instead of as a decision, and nothing required it to cite a guide |167| Scope grew and no one can point at when | A scope change was classified as a correction, so the table gained a criterion without the gate being re-decided |168| An answer turns out to be wrong and nobody can say who gave it | The answer was recorded without its attributor |169| Feedback was misfiled and the wrong artifact was rewritten | §1 was done silently, or guessed at, instead of being stated before anything changed |170171## 7. Checklist172173- [ ] Constitution and the needed guides confirmed readable; stopped and said so if not174- [ ] An artifact to correct actually exists; otherwise said so and pointed at `/ticket-analysis`175- [ ] Target artifact named in the reply before anything was changed; asked rather than guessed where it was unclear176- [ ] Feedback classified — new information, correction, scope change, or preference — and a multi-part message split177- [ ] Landed in the document, not only in the reply: rows amended not regenerated, questions struck with their answers and attributors, revision log appended178- [ ] The feedback quoted in its original words179- [ ] Every rule-shaped consequence citing a principle or guide section180- [ ] Downstream staleness named per §4, including files already written against a row that changed181- [ ] The master prompt regenerated rather than edited, where it was affected182- [ ] Scope changes stated as scope changes, with §6's conditions re-tested and left to a person to re-decide183- [ ] Contradictions with a principle stated once, with the citation, and recorded as a deviation with a reason if overruled184- [ ] Nothing touched that the feedback did not name185186---187188Generated from [`docs/delivery/FEEDBACK.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/FEEDBACK.md) by `scripts/build-marketplace.mjs`. Do not edit this file: change the source document, or its entry in `catalog/marketplace.catalog.json`, and re-run the generator.
Run npx skillmds@latest add konradcinkusz/ticket-feedback in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Use when correcting a delivery artifact mid-ticket: answering an open question, saying the analysis read a criterion wrongly, reporting that a master prompt's run produced the wrong thing, or noting that the ticket itself has moved. Names the artifact that owns the correction before changing anything, classifies it as new information, a correction, a scope change or a preference, and lands it in the document rather than only in the reply — quoting the words it arrived in, striking the question it answers with its answer and who gave it, and appending to the revision log. Then names what has gone stale: a changed row makes the master prompt stale, along with any code already written against it, and the prompt is regenerated rather than edited. Refuses to widen scope quietly, to turn a preference into a standard, or to close a question because it was discussed. It is listed under AI & ML on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
konradcinkusz (@konradcinkusz) published this skill. Their other Agent Skills are listed on their SkillMD profile.