# Repeat a feedback review with traceable counts

Run one local command on a feedback batch. Codex proposes themes; Python checks every item ID, counts the assignments and makes a report you can inspect.

## Start

1. Edit [brief.md](feedback-workflow/files/brief.md) and [input-template.md](feedback-workflow/files/input-template.md).
2. Supply authorized inputs to your own file-capable agent with [instruction.txt](feedback-workflow/files/instruction.txt).
3. Inspect the saved outputs using [checks.md](feedback-workflow/files/checks.md) before using them. Keep original inputs.

## Inputs

- A CSV with id, date, channel, text and quote_permission columns
- A short note about how the feedback was collected and what it represents
- Python 3.10+ and an installed Codex CLI already signed in through ChatGPT

## Outputs

- An HTML report, theme summary and unclassified-item notes
- Original model JSON, per-item assignments and preserved input snapshots
- A run record, or diagnostics when no report can be completed

## Steps

- Open START.md and check the local Python and signed-in CLI prerequisites.
- Run one supplied batch, then open the HTML report and inspect its item links.
- Run the independent changed batch in a fresh folder, or substitute your own authorized feedback and collection note.

## Instruction

Read examples/feedback-workflow/START.md. For a single one-off question, first consider giving the files directly to your usual Agent. To use the repeatable local workflow, work inside examples/feedback-workflow/ with Python and an already signed-in Codex CLI. Run python3 run.py --input examples/first/feedback_export.csv --context examples/first/collection.md --out results/first. Open the saved report and follow its item links. For your own batch, replace the two input paths and choose a fresh output directory. Send only authorized material to the model. Do not publish or schedule anything. Keep ambiguous interpretations tentative; this package validates structure and computes counts, not the truth of the model's judgment.

## Decisions that need your context

- Which feedback may be sent to the model or quoted
- What the sample represents and what a theme means

## Settled by the brief

No separately annotated settled rules are supplied. Follow the instruction as written.

## Check the output

- Every source ID occurs once in the classification; themes may overlap.
- An observation is supported by its cited items; vague or injected text is not treated as a product request.
- The denominator is this batch of feedback items, not all customers.
- Restricted original wording is withheld inline, but the saved input CSV still contains it.
- Failed runs have diagnostics and no finished report; existing output folders are not overwritten.

## Limits

- Requires a local terminal, Python and an installed Codex CLI with suitable account access.
- Inputs are sent to the chosen model service through Codex, not only processed locally.
- Each batch is independent; theme IDs and shares do not establish a longitudinal trend.
- This is a manually started workflow, not a running schedule or hosted service.
- Input structure can be checked; semantic understanding still needs review.

## Materials

- [examples/feedback-workflow/classification.schema.json](feedback-workflow/files/examples/feedback-workflow/classification.schema.json)
- [examples/feedback-workflow/classify.prompt.md](feedback-workflow/files/examples/feedback-workflow/classify.prompt.md)
- [examples/feedback-workflow/examples/changed/collection.md](feedback-workflow/files/examples/feedback-workflow/examples/changed/collection.md)
- [examples/feedback-workflow/examples/changed/feedback_export.csv](feedback-workflow/files/examples/feedback-workflow/examples/changed/feedback_export.csv)
- [examples/feedback-workflow/examples/first/collection.md](feedback-workflow/files/examples/feedback-workflow/examples/first/collection.md)
- [examples/feedback-workflow/examples/first/feedback_export.csv](feedback-workflow/files/examples/feedback-workflow/examples/first/feedback_export.csv)
- [examples/feedback-workflow/recorded-run/changed/classification.json](feedback-workflow/files/examples/feedback-workflow/recorded-run/changed/classification.json) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/changed/exceptions.md](feedback-workflow/files/examples/feedback-workflow/recorded-run/changed/exceptions.md) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/changed/input/collection.md](feedback-workflow/files/examples/feedback-workflow/recorded-run/changed/input/collection.md) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/changed/input/feedback_export.csv](feedback-workflow/files/examples/feedback-workflow/recorded-run/changed/input/feedback_export.csv) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/changed/item_coding.csv](feedback-workflow/files/examples/feedback-workflow/recorded-run/changed/item_coding.csv) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/changed/report.html](feedback-workflow/files/examples/feedback-workflow/recorded-run/changed/report.html) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/changed/run-summary.json](feedback-workflow/files/examples/feedback-workflow/recorded-run/changed/run-summary.json) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/changed/themes.md](feedback-workflow/files/examples/feedback-workflow/recorded-run/changed/themes.md) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/execution.json](feedback-workflow/files/examples/feedback-workflow/recorded-run/execution.json) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/first/classification.json](feedback-workflow/files/examples/feedback-workflow/recorded-run/first/classification.json) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/first/exceptions.md](feedback-workflow/files/examples/feedback-workflow/recorded-run/first/exceptions.md) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/first/input/collection.md](feedback-workflow/files/examples/feedback-workflow/recorded-run/first/input/collection.md) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/first/input/feedback_export.csv](feedback-workflow/files/examples/feedback-workflow/recorded-run/first/input/feedback_export.csv) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/first/item_coding.csv](feedback-workflow/files/examples/feedback-workflow/recorded-run/first/item_coding.csv) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/first/report.html](feedback-workflow/files/examples/feedback-workflow/recorded-run/first/report.html) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/first/run-summary.json](feedback-workflow/files/examples/feedback-workflow/recorded-run/first/run-summary.json) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/first/themes.md](feedback-workflow/files/examples/feedback-workflow/recorded-run/first/themes.md) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/recorded-run/report.md](feedback-workflow/files/examples/feedback-workflow/recorded-run/report.md) (original recorded evidence; links retain their recorded form)
- [examples/feedback-workflow/render.py](feedback-workflow/files/examples/feedback-workflow/render.py)
- [examples/feedback-workflow/run.py](feedback-workflow/files/examples/feedback-workflow/run.py)
- [examples/feedback-workflow/START.md](feedback-workflow/files/examples/feedback-workflow/START.md)
- [examples/feedback-workflow/ui-copy.json](feedback-workflow/files/examples/feedback-workflow/ui-copy.json)
- [examples/feedback-workflow/validate.py](feedback-workflow/files/examples/feedback-workflow/validate.py)

## Evidence

[Recorded context and file identities](feedback-workflow/files/evidence.json)

Two real CLI runs · synthetic feedback

The exact packaged implementation completed two local GPT-6.1 Sol High calls on 18 and 12 fictional items on 24 October 2026. A duplicate-ID input was rejected before a model call. Internal semantic and static-HTML checks passed; execution alone does not establish browser usability, population accuracy or ordinary-user adoption.

Observed or source-checked: 2026-10-24.

## Revision and corrections

Revision: 1.0.0. Lifecycle: active.

[Current kit](https://codexwork.com/kits/feedback-workflow/) · [Changes and corrections](https://codexwork.com/changes/)

[Rights and notices](feedback-workflow/files/LICENSES.md) · [Sources](feedback-workflow/files/sources.md) · [Manifest](feedback-workflow/files/manifest.json)

Downloading these files does not run an agent, install a skill, create a schedule, or grant file or account permissions.
