Files
Patrick Casino 4be0848937 v1.0.0 — MINOR-SAFETY-1 Sprint 2C cutover (server-side moderation + manifest redaction)
Major-version release. Drops client-side prompt redaction. The
ArcVelvet arcIngest server is now the manifest-redaction authority
and the in-flight prompt-moderation gate. The node's job is to send
plaintext + the creator's opt-in flag; the server does the rest.

Wire contract changes (generation assertion):

  workflow_prompt           Always PLAINTEXT. Server walks the same
                            text-encoder catch-all pattern this node
                            uses for extraction; when
                            include_prompt_text=false (default), the
                            server replaces text-encoder text values
                            with [REDACTED:sha256:<hex>] envelopes
                            BEFORE signing the manifest.

  promptTextForModeration   NEW field. Concatenated plaintext from
                            text-encoder nodes, joined by '\n'.
                            Server scans via OpenAI moderation
                            (omni-moderation-latest, 8s timeout,
                            fail-closed). On pass: corpus is
                            DISCARDED in flight, never persists. On
                            a sexual/minors flag: preserved in a
                            sealed minor_safety_escalations doc the
                            server's operator handles via NCMEC
                            handoff pipeline. Server strips this
                            field from the generation assertion
                            BEFORE signing — it never reaches the
                            public C2PA manifest.

  include_prompt_text       Creator opt-in BOOLEAN (false by default).
                            true → server embeds plaintext
                            workflow_prompt in the signed manifest.
                            false → server redacts text-encoder text
                            values into envelopes before signing.

  redacted_prompt           No longer set by the node. Server sets it
                            based on include_prompt_text and writes
                            into the manifest assertion.

Removed (client-side redaction code retired):
  LOCKED_CATCHALL_PATTERN, DEFAULT_TEXT_INPUT_FIELDS_LOWER (renamed
    to TEXTENCODE_CATCHALL / TEXT_INPUT_FIELDS_LOWER — now used for
    EXTRACTION only, not transformation)
  _REDACTED_PREFIX, _REDACTED_SUFFIX
  _load_text_encoder_patterns, _class_type_matches,
    _redact_string_value, _redact_prompt_text
  hashlib import (no longer needed on node side)

Added:
  _is_textencode_node, _is_text_field — same walk semantics the
    server's promptModeration.ts uses, kept in lockstep so the corpus
    the node sends is byte-identical to what the server would extract
    from workflow_prompt on its own.
  _extract_prompt_text_for_moderation — replaces _redact_prompt_text.

Why server-side redaction (over client-side):
  A single canonical redaction authority avoids the trust gap where
  each node version's local walk can drift from the server's
  expectation. The walks are pinned in lockstep (substring "textencode"
  catch-all on class_type + /text|prompt/i field-name match) so a
  v1.0.0 node sending plaintext produces the same moderation corpus
  the server would extract on its own.

config example update:
  arc_config.example.json no longer accepts text_encoder_patterns
  (server handles redaction; node-side patterns have no effect).
  api_key placeholder updated to point at the Credentials tab on
  arcvelvet.com instead of the old arc-issue-key.mjs operator script.
  Inline _comment_v1_0_0_note explains the v1.0.0 cutover for users
  upgrading from a previous version.

README privacy section rewritten:
  Status line bumped to v1.0.0.
  Plain-English description of the in-flight moderation + discard
  posture, the include_prompt_text creator opt-in, what happens on
  a refusal, and why server-side redaction is the right authority.

Server side compatibility:
  Operator confirmed server arcIngest deployed revision arcingest-
  00010-yeg (today) carries: redactPromptForManifest, strip of
  promptTextForModeration before sign, firedCategories observability.
  arcVendorSign symmetric leak fix committed server-side but operator
  is gating PyPI publish on that deploy reaching a new revision via
  gcloud verification. Pre-1.0.0 nodes (no include_prompt_text field)
  are handled by the server's Case-2 branch: workflow_prompt is left
  untouched, the node's redacted_prompt is preserved.

Files:
  README.md                   +/- privacy section rewrite + status
  arc_config.example.json     remove text_encoder_patterns + add
                              v1.0.0 upgrade note
  nodes/arc_save.py           remove client-side redaction code;
                              add extraction helper; update
                              generation assertion builder; update
                              save() body
  pyproject.toml              version 0.1.0 → 1.0.0; description
                              updated to mention server-side
                              moderation

PyPI publish driven by repository operator, not this commit.
2026-06-17 00:47:48 -04:00

7 lines
837 B
JSON

{
"_comment_api_key": "Copy this file to arc_config.json and paste the plaintext key from the Credentials tab on arcvelvet.com. arc_config.json is gitignored. NEVER share, screenshot, or zip-with-share this file once populated — it holds a live API credential.",
"api_key": "arc_live_REPLACE_WITH_YOUR_KEY_FROM_arcvelvet.com_CREDENTIALS_TAB",
"_comment_v1_0_0_note": "v1.0.0 cutover: the previous 'text_encoder_patterns' field is no longer honored — the server is now the manifest-redaction authority and uses a fixed catch-all walk ('textencode' substring + text/prompt field-name match) identical to the node's extraction walk. There is nothing to configure on the node side for prompt handling. Delete arc_config.json's text_encoder_patterns field if upgrading from a previous version; the node will ignore it silently."
}