|
| 1 | +# Sending feedback |
| 2 | + |
| 3 | +Read this when the user asks to send feedback on the skill: `send-feedback` after the skill's name, or in plain |
| 4 | +words ("report this to the skill's maintainers"). Never start it yourself. `REPO`, `OUT`, `SKILL_DIR` and `PY` are |
| 5 | +as in `SKILL.md`. It needs a scan in `OUT` (`structure.json` from step 1 at least): the text is checked against |
| 6 | +the repository's names, and without a scan there is nothing to check against. |
| 7 | + |
| 8 | +The feedback becomes a public GitHub issue. The user decides twice: first whether to go on, then on the exact text. |
| 9 | +Nothing is posted by you: the last step opens GitHub's new-issue form, filled in, and the user submits it there. |
| 10 | + |
| 11 | +1. **Say what will happen, before writing anything.** Tell the user, in these points: |
| 12 | + - **Where:** a new issue on https://github.com/si1verwind17/codebase-map, read by its maintainers to improve |
| 13 | + the skill. |
| 14 | + - **Your account:** it is posted from your own GitHub account, under your name, so anyone reading it sees who |
| 15 | + sent it and can link it to your employer. |
| 16 | + - **Public:** anyone can read it. Deleting it later does not undo copies already made. |
| 17 | + - **Your review:** a check catches names from this repository's map, but not every private detail (a |
| 18 | + customer's name, the business domain, logic a snippet shows). You read the whole text before it goes, and |
| 19 | + you are the last check. |
| 20 | + - **What goes in:** a title and a description you write together, in general terms; then map facts that |
| 21 | + `feedback.py` adds: the skill's versions, the operating system, the Python version, whether Node is |
| 22 | + installed, counts (files, modules, nodes and relations by kind, pins, examples, warnings by id, drawing check |
| 23 | + results), the languages, and the names of the skill's own patterns that matched. |
| 24 | + - **What never goes in:** code, file paths, the names of services, classes, methods, tables, topics, fields or |
| 25 | + config keys, example values, the repository's name or address, and the text of `map-notes.md`, `problems` or |
| 26 | + the audit's messages. |
| 27 | + - **How it is sent:** you open a filled-in form in their browser; it is posted only when they press Submit |
| 28 | + there. |
| 29 | + |
| 30 | + Ask whether to go on. On anything but yes, stop. |
| 31 | +2. **Draft `OUT/feedback.md`:** a `# title` line, then what happened, what they expected, and how the code |
| 32 | + involved is shaped. Read that code first (and what `summary.md` says of it): the shape you describe must be the |
| 33 | + one in the code, with its real mechanism — a decorator, a base class, a registration call, the database call — |
| 34 | + never a guess. Describe the shape, never the code: "a consumer registered through a factory method is |
| 35 | + missing", not the class's name. Technical words (`decorator`, `INSERT`, the database library's name) are not |
| 36 | + private; names from the repository are. When the shape needs code, write a minimal made-up snippet in the same language |
| 37 | + with placeholder names (`Foo`, `handle`, `items`). Leave out the business domain, and anything the user calls |
| 38 | + confidential. |
| 39 | +3. **Check it:** `$PY SKILL_DIR/scripts/feedback.py preview REPO --out-dir OUT`. It prints the whole issue, |
| 40 | + then the words that match a name from this repository's map (it exits 1 while any remain), then common words |
| 41 | + that are also names in the map (never blocking). Rewrite each matching word and preview again. After two |
| 42 | + rewrites with words still matching, stop rewriting: show the user those words and ask. A word stays only when |
| 43 | + the user, shown it, says it may go: add `--allow WORD` for it (the words as printed). Never allow one yourself. |
| 44 | +4. **Show the issue and ask.** Paste the preview output from `Title:` to the end into your reply as a code block, |
| 45 | + unchanged and in full: never retype, reformat, summarise or cut it (no `head` or `sed` on the preview). When you |
| 46 | + ask again and the digest is one whose full text you already showed, you may say so instead ("the same text as |
| 47 | + above, digest …"); any other text is shown in full. Say the text above the `---` line is exactly what the form |
| 48 | + will hold, public and under their account, and point to any common words listed below it. Ask them to read all of it for anything private, then: "Open this as a GitHub issue?" |
| 49 | + Only a yes to this text counts: not the yes from step 1, not a yes to an earlier draft. After any change, go |
| 50 | + back to step 3. |
| 51 | +5. **Open the form:** `$PY SKILL_DIR/scripts/feedback.py send REPO --out-dir OUT --digest DIGEST`, with the |
| 52 | + digest of the preview the user said yes to and the same `--allow` words. It refuses any other text. Never open |
| 53 | + or post the issue any other way (`gh`, a link you build, an API): when `send` refuses, fix the cause and go back |
| 54 | + to step 3. Tell the user the form is open, filled in, and that nothing is posted until they press Submit; they |
| 55 | + can still edit it there or close the tab. If no browser opened, give them the link it printed. |
| 56 | + |
| 57 | +`OUT/feedback.md` is a working file, already gitignored. |
0 commit comments