Report a recording: per-voice review link, desk, and lifecycle
Every recording card links to /report/<digest>. Filing opens a redoal_reports record; the Reports desk decides — Remove it acts for real (the relay deletes the recording everywhere), Keep it closes with the voice in place. Pins portal v0.3.17 for markdown in cards. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y42TyF8Zu7NGRR2893vNcZ
This commit is contained in:
co-authored by
Claude Fable 5
parent
02d3901610
commit
c2f2fdb546
@@ -18,7 +18,7 @@ on:
|
|||||||
- .gitea/workflows/deploy.yml
|
- .gitea/workflows/deploy.yml
|
||||||
|
|
||||||
env:
|
env:
|
||||||
PORTAL_RELEASE: v0.3.16
|
PORTAL_RELEASE: v0.3.17
|
||||||
INSTANCE: redoal-portal
|
INSTANCE: redoal-portal
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|||||||
@@ -26,3 +26,15 @@ aggregates:
|
|||||||
transitions:
|
transitions:
|
||||||
pending: [open, unsubscribed]
|
pending: [open, unsubscribed]
|
||||||
open: [unsubscribed]
|
open: [unsubscribed]
|
||||||
|
# Reports on recordings. The relay watches this bucket: a record
|
||||||
|
# moved to "removed" deletes the recording from its store, the varde
|
||||||
|
# pin, and discovery. "kept" closes the report with the recording in
|
||||||
|
# place. Decisions are human, never automatic.
|
||||||
|
- bucket: redoal_reports
|
||||||
|
initial: open
|
||||||
|
states:
|
||||||
|
open: { event: reported }
|
||||||
|
removed: { event: removed }
|
||||||
|
kept: { event: kept }
|
||||||
|
transitions:
|
||||||
|
open: [removed, kept]
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# One recording, held up for human review: /report/<digest>. Reached
|
||||||
|
# from the place page's per-recording link. Filing creates an open
|
||||||
|
# record in redoal_reports; the desk decides, and a removal decision
|
||||||
|
# deletes the recording from the relay, varde, and discovery.
|
||||||
|
name: Should this stay?
|
||||||
|
description: >
|
||||||
|
Every voice here was left by a person, and a person looks at every
|
||||||
|
report. Tell us what you heard and why it needs eyes on it — the
|
||||||
|
recording stays reachable until someone has listened and decided.
|
||||||
|
alternatives:
|
||||||
|
- name: Ask for a review
|
||||||
|
description: >
|
||||||
|
Goes straight to the review desk. If the recording breaks
|
||||||
|
something — a person's privacy, the law, basic decency — it is
|
||||||
|
removed everywhere this network keeps it.
|
||||||
|
action: /reported
|
||||||
|
consequence: [Send it to review]
|
||||||
|
record_as: redoal_reports
|
||||||
|
encouragements:
|
||||||
|
- A person will listen.
|
||||||
|
features:
|
||||||
|
- name: What you heard
|
||||||
|
description: >
|
||||||
|
A sentence or two is plenty. Leave an email if you want to
|
||||||
|
hear what was decided.
|
||||||
|
icon: lucide:flag
|
||||||
|
requirements:
|
||||||
|
- name: digest
|
||||||
|
label: Recording
|
||||||
|
type: hidden
|
||||||
|
value: "{digest}"
|
||||||
|
- name: reason
|
||||||
|
label: Why
|
||||||
|
type: textarea
|
||||||
|
placeholder: What is wrong with this recording?
|
||||||
|
- name: email
|
||||||
|
label: Email
|
||||||
|
type: email
|
||||||
|
optional: true
|
||||||
|
- name: Go back to listening
|
||||||
|
description: >
|
||||||
|
The place you came from holds the rest of its voices.
|
||||||
|
features:
|
||||||
|
- name: Nothing sent
|
||||||
|
description: >
|
||||||
|
Leaving this page files nothing — only the button does.
|
||||||
|
icon: lucide:undo-2
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Landing after filing a report.
|
||||||
|
name: What happens now?
|
||||||
|
description: >
|
||||||
|
Your report is on the review desk. A person listens, decides, and
|
||||||
|
the decision acts everywhere this network keeps the recording.
|
||||||
|
alternatives:
|
||||||
|
- name: Draw another
|
||||||
|
description: >
|
||||||
|
The paper keeps listening.
|
||||||
|
action: /
|
||||||
@@ -52,6 +52,30 @@ alternatives:
|
|||||||
bucket: redoal_voices
|
bucket: redoal_voices
|
||||||
requires_group: owners
|
requires_group: owners
|
||||||
|
|
||||||
|
- name: Reports
|
||||||
|
description: >
|
||||||
|
Recordings a visitor asked a person to listen to. "Remove it"
|
||||||
|
acts for real: the relay watches this bucket and deletes the
|
||||||
|
recording from its store, the varde pin, and discovery. "Keep
|
||||||
|
it" closes the report with the voice in place.
|
||||||
|
action: /review
|
||||||
|
consequence: [Decide]
|
||||||
|
features:
|
||||||
|
- name: ""
|
||||||
|
description: ""
|
||||||
|
resource:
|
||||||
|
source:
|
||||||
|
kind: kv
|
||||||
|
bucket: redoal_reports
|
||||||
|
requires_group: owners
|
||||||
|
transitions:
|
||||||
|
- from: open
|
||||||
|
to: removed
|
||||||
|
label: Remove it
|
||||||
|
- from: open
|
||||||
|
to: kept
|
||||||
|
label: Keep it
|
||||||
|
|
||||||
- name: Watchers
|
- name: Watchers
|
||||||
description: >
|
description: >
|
||||||
Who asked to hear from one exact address. Unsubscribing is
|
Who asked to hear from one exact address. Unsubscribing is
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ alternatives:
|
|||||||
empty: Nothing has been left at this address yet — yours could be the first voice here.
|
empty: Nothing has been left at this address yet — yours could be the first voice here.
|
||||||
jq: >
|
jq: >
|
||||||
.recordings[] | {name: ((.duration_ms / 1000 | round | tostring) + " seconds of voice"),
|
.recordings[] | {name: ((.duration_ms / 1000 | round | tostring) + " seconds of voice"),
|
||||||
description: ("sealed by " + .author[0:8] + "…"),
|
description: ("sealed by " + .author[0:8] + "… · [have it reviewed](/report/" + .digest + ")"),
|
||||||
audio: ("https://relay.redoal.com" + .audio)}
|
audio: ("https://relay.redoal.com" + .audio)}
|
||||||
|
|
||||||
- name: Leave your voice here
|
- name: Leave your voice here
|
||||||
|
|||||||
Reference in New Issue
Block a user