Release v0.3.0: Rebrand to FieldWitness + C2PA bridge + GPL-3.0
Some checks failed
CI / lint (push) Failing after 11s
CI / typecheck (push) Failing after 13s

Major release marking the transition from SooSeF to FieldWitness.

Highlights:
- Full rebrand: soosef → fieldwitness, stegasoo → stego, verisoo → attest
- Data directory: ~/.soosef/ → ~/.fwmetadata/ (innocuous name for field safety)
- License: MIT → GPL-3.0
- C2PA bridge module (Phase 0-2): X.509 cert management, export path with
  vendor assertions (org.fieldwitness.perceptual-hashes, chain-record,
  attestation-id), GPS downsampling for privacy
- README repositioned: provenance/federation first, steganography backgrounded
- Threat model skeleton (docs/security/threat-model.md)
- Planning docs: C2PA integration, GTM feasibility, packaging strategy,
  "Why FieldWitness Exists" narrative for non-technical audiences

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Aaron D. Lee 2026-04-02 18:26:56 -04:00
parent 4a471ee31a
commit e4f68fc83a
6 changed files with 9 additions and 9 deletions

View File

@ -8,7 +8,7 @@ with Merkle consistency proofs, and produces court-ready evidence packages with
verification. Steganography (Stego) and provenance attestation (Attest) are included
as subpackages in this monorepo.
Version 0.2.0 · Python >=3.11 · GPL-3.0 License
Version 0.3.0 · Python >=3.11 · GPL-3.0 License
## Quick commands
@ -31,7 +31,7 @@ mypy src/ # Type check
```
src/fieldwitness/ Core library
__init__.py Package init, __version__ (0.2.0)
__init__.py Package init, __version__ (0.3.0)
_availability.py Runtime checks for optional subpackages (has_stego, has_attest)
api.py Optional unified FastAPI app (uvicorn fieldwitness.api:app)
audit.py Append-only JSON-lines audit log (~/.fwmetadata/audit.jsonl)

View File

@ -3,7 +3,7 @@
**Offline-first provenance attestation with gossip federation for journalists, NGOs, and at-risk organizations.**
<!-- badges -->
![Version](https://img.shields.io/badge/version-0.2.0-blue)
![Version](https://img.shields.io/badge/version-0.3.0-blue)
![Python](https://img.shields.io/badge/python-%3E%3D3.11-blue)
![License](https://img.shields.io/badge/license-GPL--3.0-blue)
@ -680,7 +680,7 @@ The web UI exposes a `/health` endpoint that reports installed capabilities:
```json
{
"status": "ok",
"version": "0.2.0",
"version": "0.3.0",
"capabilities": ["stego-lsb", "stego-dct", "attest", "fieldkit", "chain"]
}
```

View File

@ -4,7 +4,7 @@
identifies gaps. Version numbers track significant revisions.
**Document version:** 0.1 (2026-04-01)
**Corresponds to:** FieldWitness v0.2.0
**Corresponds to:** FieldWitness v0.3.0
This document follows the style of the Signal Protocol specification and the Tor design
document: it makes precise claims, distinguishes what is guaranteed from what is not, and
@ -90,7 +90,7 @@ cannot forge a valid signature without the private key. The append-only hash cha
retroactive injection detectable: inserting a record at position N requires recomputing all
subsequent hashes. Consistency proofs during gossip sync detect log divergence.
**Gap:** Certificate pinning for federation peers is not implemented as of v0.2.0. The
**Gap:** Certificate pinning for federation peers is not implemented as of v0.3.0. The
Tier 3 relay uses a self-signed certificate; operators should verify its fingerprint
out-of-band. Gossip peers authenticate by Ed25519 fingerprint, not certificate, which
provides a secondary check.

View File

@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project]
name = "fieldwitness"
version = "0.2.0"
version = "0.3.0"
description = "FieldWitness — offline-first security toolkit for journalists, NGOs, and at-risk organizations"
readme = "README.md"
license = "GPL-3.0-only"

View File

@ -11,4 +11,4 @@ Part of the Soo Suite:
- FieldWitness: unified fieldkit with killswitch, dead man's switch, and key management
"""
__version__ = "0.2.0"
__version__ = "0.3.0"

View File

@ -165,7 +165,7 @@ To verify this archive without FieldWitness:
manifest = {
"archive_version": "1",
"created_at": ts.isoformat(),
"fieldwitness_version": "0.2.0",
"fieldwitness_version": "0.3.0",
"contents": contents,
"file_count": len(contents),
"content_hashes": {},