Rebrand SooSeF to FieldWitness

Complete project rebrand for better positioning in the press freedom
and digital security space. FieldWitness communicates both field
deployment and evidence testimony — appropriate for the target audience
of journalists, NGOs, and human rights organizations.

Rename mapping:
- soosef → fieldwitness (package, CLI, all imports)
- soosef.stegasoo → fieldwitness.stego
- soosef.verisoo → fieldwitness.attest
- ~/.soosef/ → ~/.fwmetadata/ (innocuous data dir name)
- SOOSEF_DATA_DIR → FIELDWITNESS_DATA_DIR
- SoosefConfig → FieldWitnessConfig
- SoosefError → FieldWitnessError

Also includes:
- License switch from MIT to GPL-3.0
- C2PA bridge module (Phase 0-2 MVP): cert.py, export.py, vendor_assertions.py
- README repositioned to lead with provenance/federation, stego backgrounded
- Threat model skeleton at docs/security/threat-model.md
- Planning docs: docs/planning/c2pa-integration.md, docs/planning/gtm-feasibility.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Aaron D. Lee
2026-04-02 15:05:13 -04:00
parent 6325e86873
commit 490f9d4a1d
188 changed files with 4588 additions and 2017 deletions

View File

@@ -1,15 +1,9 @@
# SooSeF Docker Image
#
# Requires stegasoo and verisoo source directories alongside soosef:
# Sources/
# ├── stegasoo/
# ├── verisoo/
# └── soosef/ ← build context is parent (Sources/)
# FieldWitness Docker Image
#
# Build:
# docker build -t soosef -f soosef/docker/Dockerfile .
# docker build -t fieldwitness -f docker/Dockerfile .
#
# Or use docker-compose from soosef/docker/:
# Or use docker-compose from docker/:
# docker compose up
FROM python:3.12-slim
@@ -33,35 +27,21 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
WORKDIR /app
# ── Install stegasoo ─────────────────────────────────────────────
COPY stegasoo/pyproject.toml stegasoo/pyproject.toml
COPY stegasoo/README.md stegasoo/README.md
COPY stegasoo/src/ stegasoo/src/
COPY stegasoo/data/ stegasoo/data/
COPY stegasoo/frontends/ stegasoo/frontends/
RUN pip install --no-cache-dir /app/stegasoo[web,dct,audio,cli]
# ── Install verisoo ──────────────────────────────────────────────
COPY verisoo/pyproject.toml verisoo/pyproject.toml
COPY verisoo/README.md verisoo/README.md
COPY verisoo/src/ verisoo/src/
RUN pip install --no-cache-dir /app/verisoo[cli]
# ── Install soosef ───────────────────────────────────────────────
COPY soosef/pyproject.toml soosef/pyproject.toml
COPY soosef/README.md soosef/README.md
COPY soosef/src/ soosef/src/
COPY soosef/frontends/ soosef/frontends/
RUN pip install --no-cache-dir /app/soosef[web,cli]
# ── Install fieldwitness ─────────────────────────────────────────
COPY pyproject.toml pyproject.toml
COPY README.md README.md
COPY src/ src/
COPY frontends/ frontends/
RUN pip install --no-cache-dir /app[web,cli]
# ── Runtime setup ────────────────────────────────────────────────
RUN mkdir -p /root/.soosef
RUN mkdir -p /root/.fwmetadata
COPY soosef/docker/entrypoint.sh /app/entrypoint.sh
COPY docker/entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh
ENV SOOSEF_DATA_DIR=/root/.soosef
WORKDIR /app/soosef
ENV FIELDWITNESS_DATA_DIR=/root/.fwmetadata
WORKDIR /app
EXPOSE 35811

View File

@@ -1,19 +1,19 @@
services:
soosef:
fieldwitness:
build:
context: ../.. # Sources/ directory (contains stegasoo/, verisoo/, soosef/)
dockerfile: soosef/docker/Dockerfile
container_name: soosef
context: ../.. # Sources/ directory (contains stego/, attest/, fieldwitness/)
dockerfile: fieldwitness/docker/Dockerfile
container_name: fieldwitness
ports:
- "35811:35811"
environment:
SOOSEF_DATA_DIR: /root/.soosef
SOOSEF_PORT: "35811"
SOOSEF_WORKERS: "2"
SOOSEF_HTTPS_ENABLED: "${SOOSEF_HTTPS_ENABLED:-false}"
STEGASOO_CHANNEL_KEY: "${STEGASOO_CHANNEL_KEY:-}"
FIELDWITNESS_DATA_DIR: /root/.fwmetadata
FIELDWITNESS_PORT: "35811"
FIELDWITNESS_WORKERS: "2"
FIELDWITNESS_HTTPS_ENABLED: "${FIELDWITNESS_HTTPS_ENABLED:-false}"
FIELDWITNESS_CHANNEL_KEY: "${FIELDWITNESS_CHANNEL_KEY:-}"
volumes:
- soosef-data:/root/.soosef
- fieldwitness-data:/root/.fwmetadata
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-fs", "--max-time", "3", "http://localhost:35811/"]
@@ -29,5 +29,5 @@ services:
memory: 512M
volumes:
soosef-data:
fieldwitness-data:
driver: local

View File

@@ -2,24 +2,24 @@
set -e
# Initialize if needed (generates identity + channel key + config)
if [ ! -f "$SOOSEF_DATA_DIR/config.json" ]; then
echo "First run — initializing SooSeF..."
soosef init
if [ ! -f "$FIELDWITNESS_DATA_DIR/config.json" ]; then
echo "First run — initializing FieldWitness..."
fieldwitness init
echo "Initialization complete."
fi
# Determine HTTPS mode
HTTPS_FLAG=""
if [ "${SOOSEF_HTTPS_ENABLED:-true}" = "false" ]; then
if [ "${FIELDWITNESS_HTTPS_ENABLED:-true}" = "false" ]; then
HTTPS_FLAG="--no-https"
fi
echo "Starting SooSeF on port ${SOOSEF_PORT:-35811}..."
echo "Starting FieldWitness on port ${FIELDWITNESS_PORT:-35811}..."
# Run with gunicorn for production
exec gunicorn \
--bind "0.0.0.0:${SOOSEF_PORT:-35811}" \
--workers "${SOOSEF_WORKERS:-2}" \
--bind "0.0.0.0:${FIELDWITNESS_PORT:-35811}" \
--workers "${FIELDWITNESS_WORKERS:-2}" \
--timeout 180 \
--access-logfile - \
--error-logfile - \