Support for post annotation label reassignement.

This commit is contained in:
sebastien committed 2026-10-11 19:03:04 +02:00
1 parent 698ac4240c
commit 370f3252ef
10 files changed
+242 -36

No files matched your search

+30
View File
@@ -256,3 +256,33 @@ ones. Weighting and the final overall mark belong to the separate grading flow.
- [ODS export](../copienator/commands/update_ods.py)
- [Final-mark stamping](../copienator/commands/add_final_score.py)
- [Cleanup retention](../copienator/commands/clean.py)
## Manual modifications after annotation reading
`modify-annotations EVALUATION --annotation-dir BGnot` (or `Bnot`) applies
`annotation_modifications.txt`. The GUI exposes it between annotation reading
and return preparation. Its `### Source: BGnot`/`Bnot` line must match the mode.
Instruction operators follow manual resolution syntax but act on reviewed raster
**bodies**, excluding headers and all supplementary pages. Headers and scores stay
with their labels. Missing target bodies are allowed; their new header identifies
the target and its existing score, without inventing feedback or a score.
Both readers record `annotation_baseline.json` and lossless hidden
`.annotation-base-*.png` images in each copy's annotation directory. The JSON
stores the exact header height, baseline answer metadata, and filtered membership.
Older outputs require one full annotation read before body editing. Legacy
selective redo still works, but cannot infer missing header boundaries.
Each application rebuilds from that baseline and publishes all affected copies
and the mode's `annotation_modifications_applied.txt` in one rollback-capable
transaction. Reapplying is idempotent; removing an instruction restores its prior
content and membership. Annotation rereads refresh the baseline and replay the
applied snapshot, not the draft. Selective redo preserves unaffected baseline
layers so previous transfers are never included twice.
The operation rebuilds per-label JPEGs, `info.json`, `Concat.jpg`, and the filtered
BGnot PDF or Bnot JPEG. Every changed non-empty body is included in the filtered
output, with its destination label's supplementary material. `score.json` is not
modified. The GUI marks downstream return preparation stale. Rerun `giving-names`
without `--update` to refresh both full outputs and individual answer exports.