Skip to content
This repository was archived by the owner on Oct 15, 2026. It is now read-only.

The feed pipeline, seed records, CI, and docs - #1

Closed
Defilan wants to merge 5 commits into
mainfrom
feed/pipeline
Closed

Defilan wants to merge 5 commits into
mainfrom
feed/pipeline

Conversation

@Defilan

@Defilan Defilan commented Oct 14, 2026

Copy link
Copy Markdown
Member

This is the pipeline, seed data, CI, and docs for Socair's open reference feed (defilantech/socair#159). Nothing is signed or released: the first signed release needs the maintainer's key, decisions, and template reviews. See "To cut the first release" below.

What is here

  • sources/: one JSON record per entry, each with what it is, its evidence class, a citation to a primary source with the date it was read, and, for a text, the upstream repo at a pinned commit and its licence.
    • Known-bad hashes (11). Only evidence classes 1 and 2: a hash printed in a primary report, or returned by the Hub API for a named file in a repo the report names.
      • Rapid7 (2025-07-01): four.
      • HiddenLayer (2026-05-07): three.
      • Hub API hashes for repos named by JFrog (two) and ReversingLabs (two).
      • Every hash was re-checked against its live source on 2026-10-14, and again from CI (81 of 81 checks).
    • Templates (13), all pending review. Qwen2.5-Instruct (two revisions), Qwen3, gpt-oss, Phi-4, Phi-3-mini, DeepSeek-R1, DeepSeek-V3-0324, three Mistral models, and two Gemma 4 texts.
      • Each is byte-identical to upstream at a pinned revision, and each passes Socair's template check.
      • No template ships until a named person reviews it, so the CI candidate carries none yet.
    • Tokenizers (11): ten canonical tables, rebuilt byte for byte with socair feed tokenizer-table, and Phi-3-mini by hash only.
  • tools/feedbuild: a deterministic builder (Go standard library only, with tests) that validates the records and writes the feed directory Socair reads. The same inputs give byte-identical output: CI's Linux build equals a macOS build of the same commit.
  • CI (actions pinned by commit SHA, read-only permissions):
    • ci validates the records, builds the candidate twice and compares the builds, checks that the candidate loads in Socair v0.1.0-rc.3 and on main, and uploads it unsigned;
    • upstream re-checks every citation and pinned file;
    • dco checks sign-offs on pull requests.
  • Docs: README, CONTRIBUTING (how to propose an entry, the evidence classes, and what is refused), RELEASING (the offline signing steps, the 90-day expiry, and how to withdraw a release given Socair's rollback protection, #232), and DECISIONS.
  • Licences: Apache-2.0 for the tooling, CC0 for the hashes and citations, and each text under its upstream licence (DATA-LICENSE.md, NOTICE, LICENSES/).

End to end

The agent built the feed, signed it with a throwaway key (since deleted), and scanned Qwen's own qwen2.5-0.5b-instruct-q4_0.gguf with Socair main:

Row Without the feed With it
Known-bad hash match NOT_TESTED: no denylist PASS: no entry matched among 11 known-bad hashes
Tokenizer config PASS, not compared PASS, compared with the canonical qwen2.5 table: every id agrees, 0 ordinary tokens changed
Chat template PASS, no reviewed text Byte-identical to the reviewed qwen2.5-instruct-2024-09-18 (only once its review is done)

socair feed verify passes under rc.3 and main. With a store, a newer signed feed was accepted and then the older one was refused as a rollback, which is what RELEASING relies on to withdraw a release.

Runs: https://github.com/defilantech/socair-feed/actions/runs/38544311681 (ci) and https://github.com/defilantech/socair-feed/actions/runs/38544311691 (upstream).

Decisions for the maintainer (DECISIONS.md has each one, with reasons)

  • D1: the issuer is "Socair project feed"; tooling Apache-2.0, records CC0, texts under their upstream licences. Counsel should read this.
  • D2: one offline Ed25519 key held by the maintainer; CI never holds one.
  • D3: monthly releases, each expiring 90 days after issue, plus out-of-cycle emergency releases.
  • D4: evidence classes 1 and 2 only. The seven hashes only scanners flagged are left out, because a wrong denylist entry is a FAIL nobody can override.
  • D6: non-model payloads that sat in a Hub repo are in. Attacker-hosted payloads are listed but left out.
  • D8: Llama, Gemma 2/3/3n, restricted Qwen and Mistral models, the original DeepSeek-V3 template, and the R1 distills are left out. Gemma 4 is in (Apache-2.0).
  • D10: reports of a wrong entry are acknowledged in 3 business days, assessed in 10, and the entry removed in 5. New entries get a 7-day comment period; do the seed entries?
  • D11: open to outside contributors from the start.
  • D13: no site-local way to switch one entry off; a fast removal release is the remedy.
  • L3 / L4: no template ships until a named person reviews it, and every template record carries the same definition of "review".
  • L6 / L7: release assets are the tarball, its .sha256, and feed.dsse.json; versions are YYYY.MM.N, tagged v<version>.

To cut the first release

  1. Confirm or change the decisions (D1 and D8 with counsel).
  2. Review the 13 templates and set each record's review fields, or ship the first release without templates.
  3. Create the key offline with socair key gen --issuer "Socair project feed". Publish its id in keys/, in Socair's docs/feed.md, and in the release notes.
  4. Turn on immutable releases and a v* tag ruleset here, as on Socair.
  5. Follow RELEASING steps 2–6: rebuild the candidate and compare it with CI's, sign offline with a 90-day expiry, verify, tag v2026.10.1, and upload.

Part of defilantech/socair#159

Assisted-by: Claude Code (re-checked every source, built the records, the builder, CI, and docs, and ran a signed build end to end with Socair; the maintainer's review is pending)

…even tokenizers

Each record cites its source and was re-checked against it on 2026-10-14.
The denylist holds seven hashes printed by Rapid7 and HiddenLayer and four
LFS ids the Hugging Face API gives for files in repositories JFrog and
ReversingLabs name, each tied to the listed blob id by the pointer check.

The templates are byte-identical to Qwen, gpt-oss, Phi, DeepSeek, Mistral
and Gemma 4 texts at pinned revisions, all Apache-2.0 or MIT. Every one is
awaiting a person's review, so none is built into a release yet. The
tokenizer tables were written by socair feed tokenizer-table from the pinned
upstream tokenizer.json files; Phi-3-mini's tokenizer is listed by hash
only. NOTICE and the upstream license texts cover what is copied.

Signed-off-by: Christopher Maher <chris@mahercode.io>
feedbuild check holds every record to its evidence class, recomputes the
LFS pointer check, hashes every text and table, keeps goodware and the
feed's own templates and tokenizers off the denylist, and requires the
committed NOTICE to match the records. feedbuild build writes the directory
Socair reads, with NOTICE and the license texts beside it, and gives the
same bytes for the same records. Templates no person has reviewed stay out
of every release build. pack, diff and expiry support the release steps,
and upstream re-checks each record against its live source. The builder
uses only the Go standard library and never signs.

Signed-off-by: Christopher Maher <chris@mahercode.io>
The ci workflow validates every record, builds the unsigned candidate twice
and fails on any byte difference, uploads it as a workflow artifact, and
signs it with a throwaway key to load it in Socair v0.1.0-rc.3 and main,
checking that a scan's Known-bad row is never NOT_TESTED. The upstream
workflow re-checks every record against its source weekly and fails when
the latest published feed nears expiry. The dco workflow is Socair's. Every
action is pinned by commit, and every job has read-only permissions.

Signed-off-by: Christopher Maher <chris@mahercode.io>
…e decisions

README says what the feed holds and claims, and how a site uses it with
Socair. CONTRIBUTING sets the evidence classes, what is refused, and what a
template review means. RELEASING gives the maintainer's offline signing
steps, the monthly cadence with a 90-day expiry, and how to withdraw a
release given Socair's rollback protection. DECISIONS records each decision
with its reason and whether the maintainer must confirm it.

Signed-off-by: Christopher Maher <chris@mahercode.io>
CI ran only on main and on pull requests, so a branch got no run until a
pull request was opened. It now runs on every push. The upstream check also
runs on a push that changes a record or text, so a new entry's sources are
read once by a machine other than the contributor's.

Signed-off-by: Christopher Maher <chris@mahercode.io>
@Defilan

Defilan commented Oct 15, 2026

Copy link
Copy Markdown
Member Author

Closing: the Socair project will not publish or sign a reference feed (see defilantech/socair#159 and #280). A feed is an organization's own, built and signed with the socair CLI (docs/feed.md). This repository is being archived.

@Defilan Defilan closed this Oct 15, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant