# Ticket Feedback

> 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.

- Skill: `konradcinkusz/ticket-feedback` (Agent Skill)
- Install (CLI): `npx skillmds@latest add konradcinkusz/ticket-feedback`
- Raw SKILL.md: https://api.skillmd.com/api/skills/konradcinkusz/ticket-feedback/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: konradcinkusz (https://skillmd.com/u/konradcinkusz)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/konradcinkusz/ticket-feedback

---


# Feedback

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`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/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.

**Contents**

0. [What has to be true first](#0-what-has-to-be-true-first)
1. [Name the target before changing anything](#1-name-the-target)
2. [Classify it](#2-classify-it)
3. [Landing it](#3-landing-it)
4. [What it invalidates downstream](#4-what-it-invalidates)
5. [What feedback is not](#5-what-feedback-is-not)
6. [Failure modes](#6-failure-modes)
7. [Checklist](#7-checklist)

---

## 0. What has to be true first

Confirm you can open
[`00-REFERENCE-ARCHITECTURE.md`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/architecture/00-REFERENCE-ARCHITECTURE.md) and the
guides under [`docs/guides/`](https://github.com/konradcinkusz/architecture-standards/blob/main/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 | 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 |
| a fact about the codebase the analysis got wrong or missed | the same document — the row, and the exploratory findings | as above |
| 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) |
| 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) |
| 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 |

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`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/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`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/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`](https://github.com/konradcinkusz/architecture-standards/blob/main/docs/delivery/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`](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.

