Skip to content
Back to skills

Rebind Manifest

ASecurity

Pipeline stage 2 of report-regeneration (detect -> strip -> rebind): turn an RSG + the OLD template + the new dataset into a schema-valid Binding Manifest and a taint dictionary. Enforces the earned-frozen rule (a data-shaped literal / old-taint / new-dataset value demotes a candidate-frozen node to needs-review), forces raster/embedded-cache nodes to regenerate, and proposes each node's data_query. Reach for this when building or amending a Binding Manifest.

  • 7 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 23, 2026
ai-agentspythonshellnode

Works with

  • cli

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 23, 2026

npx -y skills add mcorbett51090/RavenClaude --skill rebind-manifest --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Rebind Manifest?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Rebind Manifest
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mcorbett51090-rebind-manifest/badge)](https://www.skillsdirectory.com/skills/mcorbett51090-rebind-manifest)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: rebind-manifest
description: "Pipeline stage 2 of report-regeneration (detect -> strip -> rebind): turn an RSG + the OLD template + the new dataset into a schema-valid Binding Manifest and a taint dictionary. Enforces the earned-frozen rule (a data-shaped literal / old-taint / new-dataset value demotes a candidate-frozen node to needs-review), forces raster/embedded-cache nodes to regenerate, and proposes each node's data_query. Reach for this when building or amending a Binding Manifest."
---

# Skill: rebind-manifest (report-regeneration stage 2)

The **surgeon planning the transplant.** Given a Report Structure Graph (RSG), the OLD
template, and the new dataset, this stage builds a versioned, human-reviewable **Binding
Manifest** plus the **taint dictionary** that the V4 egress leg scans against. It addresses +
classifies + proposes queries — it never renders.

> **The honest guarantee (verbatim — never soften it):** the plugin GUARANTEES only (a) **no
> old-client-data leak** and (b) **every low-confidence classification is surfaced for human
> review**. It does NOT guarantee a human-free-correct report. `needs-review` is guarantee (b)
> made mechanical.

## Run it

```shell
python3 build_manifest.py \
    --rsg <rsg.json> --template <old-template.html> --new-data <data.json> \
    --out <manifest.json> [--taint-out <taint-dict.json>] \
    [--manifest-version 0.1.0] [--confidence-threshold 0.7] [--format json|text] [--pretty]
```

Exit codes: `0` valid manifest; `2` usage / path-guard / parse error / **input RSG failed
`rsg.schema.json`** (fail-closed); `3` manifest built but **failed** `binding-manifest.schema.json`.

`--new-data` shape: `{"source_ref": "...", "source_period": "...", "values": [...] | {...}}`.
`values` is the new value domain the earned-frozen rule tests against; if omitted, every scalar
leaf (minus reserved metadata keys) is the domain.

## What it does (mirrors `knowledge/core-architecture-spec.md` §3/§4/§6)

1. **Taint dictionary** from the OLD template — distinct rendered value literals (via the
   pinned, non-inference data-shaped-literal detector) + identity strings (author / company /
   title / source-filename), including a declared prior-artifact taint block
   (`old_company: "..."` comment convention) when present.
2. **Earned-`frozen` rule.** `frozen` is never the default. A candidate-`frozen` node is
   demoted to `needs-review` if an **independent re-run** of the detector over its rendered
   text fires (or the RSG already flagged it), OR the text carries an old-taint value, OR it
   carries a new-dataset value. A **data-shaped literal force-demotes regardless of classifier
   confidence.** (The RSG is already schema-forbidden from carrying `frozen` + `data_shaped_literal:true`,
   so the demotion authority here is the independent detector, not the RSG flag.)
3. **Raster / embedded-cache force.** Any node that renders as a raster or carries an embedded
   binary/data cache is forced to `regenerate` — a transplanted blob cannot be proven data-free.
4. **Propose one binding per NON-static node:** `node_id`, `anchor`, `class`, `confidence`,
   `provenance {source, source_period, method, pbi_route}`, `data_query`. A `frozen` binding
   carries **no** `data_query`; every non-frozen class **must** carry one.
5. **Validate** the manifest against `binding-manifest.schema.json` (stdlib-only validator).

## Conservative-by-design note

The detector is deliberately non-inference: it fires on `"100%"` in a marketing tagline exactly
as on a KPI's `"100%"`. Over-flagging a candidate-`frozen` node to `needs-review` is the **safe**
direction (guarantee (b)); under-flagging a data-bound node classed `frozen` is what a leak
looks like.

## Constraints

Stdlib only (`argparse` / `html.parser` / `re` / `json` / `pathlib`), Python 3.9.6, no pip, no
network, no subprocess. Path-guarded (rejects `..` traversal). Code is written to the schemas in
[`../../knowledge/`](../../knowledge/).

## Tests

`python3 -m unittest tests.test_manifest` (run from this skill directory) — demotion, taint dict
(inline + real corpus), raster→regenerate, and schema-validity.

Files in this skill

  • SKILL.md4.1 KB
  • build_manifest.py41.2 KB
  • tests/test_manifest.py9.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…