Part of #66. Depends on the derivation module (#68) and storage (#69).
Scope
grans label export <meeting> [--out <path>] writes a self-contained HTML file: the labeling template with a JSON payload embedded. Opened locally in a browser; no server, no network (real meeting content never leaves the machine).
Payload (the contract between granz and the template):
- Meeting metadata: id, title, date,
segmentation_version.
- Candidate speakers from
document_people (name, email/id, role), plus the fixed unknown and media sentinels. The local user is implicit (mic channel).
- Utterances in order:
id, channel, start/end as seconds from meeting start, text, sentences[], tick (bool), bridge (bool), gap seconds (raw material alongside the derived flags, for display and threshold experimentation).
- Existing labels, if any: speakers,
label_source, confidence (drives the review-queue state).
Also --json to emit the payload alone (scripting, debugging).
Template
Seeded from docs/prototypes/labeling-ui.html with its semantic JS (sentences(), tick/bridge/timeline computation) deleted in favor of payload fields. Interaction behavior is specified by the prototype: queue of unlabeled runs and low-confidence flags, number keys label-and-advance, Shift stacks co-speakers, S splits an utterance into per-sentence labels, drag-select, undo, JSON export download.
Constraints
- Only meetings whose utterances have
source IS NOT NULL can be labeled; fail with a clear message otherwise.
- Update README (new command) per repo docs policy.
Part of #66. Depends on the derivation module (#68) and storage (#69).
Scope
grans label export <meeting> [--out <path>]writes a self-contained HTML file: the labeling template with a JSON payload embedded. Opened locally in a browser; no server, no network (real meeting content never leaves the machine).Payload (the contract between granz and the template):
segmentation_version.document_people(name, email/id, role), plus the fixedunknownandmediasentinels. The local user is implicit (mic channel).id,channel, start/end as seconds from meeting start,text,sentences[],tick(bool),bridge(bool), gap seconds (raw material alongside the derived flags, for display and threshold experimentation).label_source, confidence (drives the review-queue state).Also
--jsonto emit the payload alone (scripting, debugging).Template
Seeded from
docs/prototypes/labeling-ui.htmlwith its semantic JS (sentences(), tick/bridge/timeline computation) deleted in favor of payload fields. Interaction behavior is specified by the prototype: queue of unlabeled runs and low-confidence flags, number keys label-and-advance, Shift stacks co-speakers,Ssplits an utterance into per-sentence labels, drag-select, undo, JSON export download.Constraints
source IS NOT NULLcan be labeled; fail with a clear message otherwise.