Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions notations/CONTRACT.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,10 @@ derived_from: # optional; typed IDs of the artefacts this one deri

A zone MAY record additional checks beyond its standard set; codex artefacts additionally carry zone-specific frontmatter defined in the codex notation spec.

**New Field records.** Use [Ingest](../transitrix/skills/ingest/README.md) for every new record in `field/`. Ingest accepts a source file or notes supplied directly in chat. A chat submission is valid when it contains enough evidence and provenance for the assistant to produce a conforming Field record. Before publication, verify who recorded the evidence, when and in what context, and verify that the intended team members can access the evidence independently of the submitter's workspace. The record may contain the evidence itself or cite a specific revision at an organisation-managed location with appropriate access.

An authorised contributor's explicit request to add their own notes is sufficient approval for Field publication once these checks pass and the substance is preserved. If the intended publication is unclear or the evidence has been materially changed, resolve that before publication.

### 6.1 Pre-admission lifecycle — `proposed → active | rejected`

The admission record above describes an artefact that **has** passed its zone gate. Some artefacts are produced by an **automated harvest** — a scanner / collector that extracts candidate canon from a source (a `REQUIREMENT` from a regulation, an `ASSERTION` of impact) — and **must not enter admitted canon until a human reviews them**. The collector never writes admitted canon directly: it emits *proposed* drafts plus a review digest, and a human gate admits or rejects each.
Expand Down
10 changes: 8 additions & 2 deletions transitrix/skills/ingest/README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
# Transitrix Ingest Skill

The **front door** of a Transitrix repository: it turns raw organisational material — interviews, policies, org charts, spreadsheets, notes — into `field`-zone artefacts and typed `canon` *candidates*, at scale, and routes everything through a human review gate. It is the operational counterpart to the onboarding skill's per-layer extraction prompts: the part that converts documents, scores source trust, runs the validators, and stages a review queue.
The **front door** of a Transitrix repository: it turns raw organisational material — interviews, policies, org charts, spreadsheets, notes — into `field`-zone artefacts and prepares typed `canon` *candidates* for human review. It is the operational counterpart to the onboarding skill's per-layer extraction prompts: the part that converts documents, scores source trust, runs the validators, and stages a review queue.

This directory is the **`ingest` skill** within the `transitrix` plugin (the plugin root is [`transitrix/`](../../), which carries the shared [`.claude-plugin/plugin.json`](../../.claude-plugin/plugin.json) manifest, with one `skills/<name>/` directory per skill). Invoked as `/transitrix:ingest`.

> **Status — operational.** Beyond the agent-facing protocol ([`SKILL.md`](SKILL.md)), JSON schemas ([`schemas/`](schemas/)), and the `_intake/` convention ([`templates/_intake.README.md`](templates/_intake.README.md)), the deterministic CLI ([`@transitrix/ingest-cli`](../../../packages/ingest-cli/)) implements all subcommands and is covered by a no-API-key integrity test (see [Roadmap](#roadmap)). The skill's Step 0 pre-check still stops cleanly if the CLI is not installed in a given environment.

## Add a Field record

Use Ingest for new records in `field/`. Supply a file or tell the assistant to add your notes and paste them in chat. Include who recorded the evidence, when, and in what context. Before publication, Ingest checks provenance and verifies that the intended team can access the evidence independently of your workspace. If the Field record contains the evidence itself, its shared copy provides that access. A separate original requires a reference to a specific revision in organisation-managed storage.

An authorised contributor's explicit request to add their own notes is sufficient approval once the checks pass and the substance is preserved. See the [Field admission steps](SKILL.md#step-3--emit-the-field-artefact-with-proposed-source_quality).

## Intake profile selection

Choose `ingest` for the ordinary ingest/reg-intel workflow (private processed raw
Expand All @@ -32,7 +38,7 @@ central admission and catalogue publication remain the central maintainer's work

## Two axes of trust, never merged

- **`source_quality`** — trust in the *source* (signed policy → `authoritative`; meeting note → `single_source`). A closed ordinal label on the field artefact's admission record ([CONTRACT §11.2](../../../notations/CONTRACT.md)). The skill proposes it from document type; a human confirms.
- **`source_quality`** — trust in the *source* (signed policy → `authoritative`; meeting note → `single_source`). A closed ordinal label on the field artefact's admission record ([CONTRACT §11.2](../../../notations/CONTRACT.md)). The skill proposes it from document type and provenance. An explicit submission of firsthand notes supports `single_source`. A stronger rating requires evidence and human confirmation.
- **`extraction_confidence`** — "did the model read the document correctly". A separate review flag on each candidate. It surfaces in the review queue and is **never** folded into `source_quality`, and **never** persisted into canon ([CONTRACT §11.8](../../../notations/CONTRACT.md)).

## What it ships
Expand Down
14 changes: 10 additions & 4 deletions transitrix/skills/ingest/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
---
name: Transitrix Ingest
description: Turn raw organisational material (interviews, policies, org charts, spreadsheets, notes) into Transitrix field artefacts and typed canon candidates at scale, with source-quality scoring and a human review queue. Also set up catalogue federation and prepare recognition or promotion proposals for human review. Never writes canon directly.
when_to_use: User says "ingest these documents", "extract a model from this interview / policy / spreadsheet", "fill the field zone from raw material", "turn these notes into canon candidates", "set up the intake pipeline", or drops raw files into an adopter repo's `_intake/inbox/` and wants them processed into field artefacts + reviewable canon candidates. BA-facing shortcut — user says "extract requirements from this interview / project brief / SOP", "get REQUIREMENT / CONSTRAINT candidates out of this writeup", or "run the ingest pipeline motivation-only" — same pipeline, agent runs only `prompts/01_motivation.md` (see [BA quickstart](#ba-quickstart--requirements-from-an-interview)). Also use for "join the decision-log network", "pin a shared catalogue", "recognise local elements", or "promote this element to the central catalogue".
when_to_use: User says "add these interview notes to field", "ingest these documents", "extract a model from this interview / policy / spreadsheet", "fill the field zone from raw material", "turn these notes into canon candidates", "set up the intake pipeline", or drops raw files into an adopter repo's `_intake/inbox/` and wants them processed into field artefacts + reviewable canon candidates. BA-facing shortcut — user says "extract requirements from this interview / project brief / SOP", "get REQUIREMENT / CONSTRAINT candidates out of this writeup", or "run the ingest pipeline motivation-only" — same pipeline, agent runs only `prompts/01_motivation.md` (see [BA quickstart](#ba-quickstart--requirements-from-an-interview)). Also use for "join the decision-log network", "pin a shared catalogue", "recognise local elements", or "promote this element to the central catalogue".
min_version: "1.0.0"
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch
---

# Transitrix Ingest Skill

The **front door** to a Transitrix repository: it turns raw material into `field`-zone artefacts and typed `canon` *candidates*, at scale, and routes everything through a human review gate. It is the operational counterpart to the per-layer extraction prompts — the part that converts documents, scores source trust, runs the validators, and stages a review queue.
The **front door** to a Transitrix repository: it turns raw material into `field`-zone artefacts and prepares typed `canon` *candidates* for human review. It is the operational counterpart to the per-layer extraction prompts — the part that converts documents, scores source trust, runs the validators, and stages a review queue.

> **Status — operational.** The deterministic CLI (`@transitrix/ingest-cli`, see [§ The CLI](#the-cli)) implements every subcommand below — `scaffold-intake`, `convert`, `privacy-scan`, `admit-source` (field + codex routes), `emit-candidates`, `validate`, `review-queue`, `suggest-profile`, `check-placement`, `resolve-placement` — and is exercised end-to-end by the bundle's integrity test. Run the **CLI-presence pre-check** (Step 0) first; if the CLI is not on PATH in this install, install it before proceeding.

Expand Down Expand Up @@ -82,6 +82,8 @@ Idempotent — it never overwrites existing intake content. A source file flows

## Step 2 — Convert the source to Markdown

For an explicit request to add notes supplied in chat, stage the supplied text as a Markdown file in the private `_intake/inbox/` after Step 1. Preserve the substance and collect any missing provenance from the contributor. Treat chat notes as a complete submission once the evidence and provenance are sufficient to produce a conforming record. The assistant handles the working file. Continue with the same conversion, privacy scan, and Field admission steps used for file uploads.

Office documents are converted to Markdown with **MS Markitdown** before extraction (per project convention), unless illustrations must be preserved. The CLI shells out to Markitdown; `.md` / `.txt` inputs pass through unchanged.

```
Expand Down Expand Up @@ -172,7 +174,11 @@ The report lists every document scanned with its outcome. For `STRIPPED` and `RE

## Step 3 — Emit the field artefact (with proposed source_quality)

Each converted document becomes one `field` artefact carrying a complete **admission record** — provenance (who / when / in what setting) and a **proposed** `source_quality`. The field artefact is what lives in `field/`; the original raw bytes stay in `_intake/processed/` so the artefact is traceable to its source.
Each converted document becomes one `field` artefact carrying a complete **admission record** — provenance (who / when / in what setting) and a **proposed** `source_quality`. The field artefact lives in `field/`. The local input stays in `_intake/processed/` for traceability on that workstation.

Before invoking `admit-source --zone field`, check provenance and verify that the intended team members will have access to the evidence independently of this workspace. If the Field record will contain the full evidence used, verify that it can be published in the shared repository. If a separate source is needed, verify that the team can open its specific revision at an organisation-managed location and record that reference on the Field record before publication. A local `raw_source` path alone cannot satisfy this check.

An authorised contributor's explicit request to add their own notes authorises publication of those notes after the checks pass. Proceed without a second approval for formatting or faithful transcription. Clarify ambiguous publication intent and confirm substantive changes to the evidence, including redactions that change its meaning. For a Field-only request, stop after preparing the Field record for the requested publication.

```
transitrix-ingest admit-source --zone field <processing/file.md> \
Expand All @@ -192,7 +198,7 @@ The same `source_hash` deduplicates: if the identical content was already admitt
| One uncorroborated informant or observation | `single_source` | 0.5 |
| Draft, assumption, inference, hearsay | `unverified` | 0.25 |

The skill **proposes**; a human **confirms**. Never silently bake a higher trust than the source warrants.
The skill proposes a rating for human confirmation. For a contributor explicitly submitting their own firsthand notes, their account supports `single_source` without a separate approval prompt. Use `unverified` for hearsay or assumptions. A stronger rating requires supporting evidence and human confirmation.

**Codex sources — laws, regulations, externally issued standards, policies, internal standards — take the parallel `codex` route:** `transitrix-ingest admit-source --zone codex <processing/file.md> --type LAW|REGULATION|STANDARD|POLICY|INTERNAL_STANDARD|PRINCIPLE --effective-date YYYY-MM-DD [--jurisdiction <code>] [--source-authority <who>] [--issuing-authority <body>]`. A codex artefact is *authoritative by construction* — it carries **no** `source_quality`, records a snapshot of the source + a `source_hash`, and lands in `codex/external/<jurisdiction>/` (LAW/REGULATION/STANDARD) or `codex/internal/` (POLICY/INTERNAL_STANDARD/PRINCIPLE) per [14-codex.md](https://raw.githubusercontent.com/transitrix/methodology/main/notations/elements/14-codex.md). Its obligations are derived in Step 4 as `REQUIREMENT` + `ASSERTION` candidates that cite it via `derived_from`. STANDARD requires `--jurisdiction` and `--issuing-authority` (the issuing body).

Expand Down
8 changes: 4 additions & 4 deletions transitrix/skills/onboard/templates/INGEST.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ This file tells **any AI coding assistant** — Claude Code, Cursor, GitHub Copi

## 1. Activity scope

The Ingest role turns raw organisational material — interviews, policies, org charts, spreadsheets, notes — into `field`-zone artefacts and typed `canon` **candidates**, at scale, by running the `/transitrix:ingest` skill. It is the repository's **front door**: source in, candidate elements out, always through a human review gate. It is not a modelling role — it never authors admitted canon directly.
The Ingest role turns raw organisational material — interviews, policies, org charts, spreadsheets, notes — into `field`-zone artefacts and typed `canon` **candidates**, at scale, by running the `/transitrix:ingest` skill. It is the repository's **front door**: source in, Field evidence recorded, canon candidates prepared for human review. It is not a modelling role — it never authors admitted canon directly.

| In scope | Out of scope |
|---|---|
| Converting raw documents dropped in `_intake/inbox/` into `field` artefacts with a provenance record | Authoring or editing admitted `canon/` files directly — that's the Modeler (`AGENTS.md`) |
| Preparing `field` artefacts from files or notes supplied in chat, with provenance and a team-accessible source | Authoring or editing admitted `canon/` files directly — that's the Modeler (`AGENTS.md`) |
| Running the privacy pre-admission scan before any document is admitted | Answering questions about the organisation — that's the Analyst (`ANALYST.md`) |
| Extracting typed candidate elements and conservative relations, each citing its field source | Reviewing a change before it merges — that's the Validator (`VALIDATOR.md`) |
| Running the coverage-profile-aware validator pass on candidates | Deciding a candidate's business-value correctness — the human reviewer's call |
Expand All @@ -32,12 +32,12 @@ The one documented exception: the role MAY write **`proposed`** (non-admitted) e

## 3. The pipeline — source in → candidate elements → through the gates

Run the `/transitrix:ingest` skill, which sequences the deterministic `@transitrix/ingest-cli`:
Run the `/transitrix:ingest` skill for new `field/` records. It accepts a source file or notes supplied in chat. An authorised contributor's explicit request to add their own notes is sufficient approval when the checks pass and the substance is preserved. The skill stages chat notes as Markdown and sequences the deterministic `@transitrix/ingest-cli`:

1. **`scaffold-intake`** — set up the private, per-user `_intake/inbox/ → processing/ → processed/` workspace (git-ignored; not shared with other modellers).
2. **`convert`** — Office documents to Markdown via MS Markitdown; `.md` / `.txt` pass through unchanged.
3. **`privacy-scan`** — fail-closed PII/medical detection gate. A document must exit `CLEAN` or `STRIPPED` before it can be admitted; `REJECTED` / `ERROR` halts the pipeline.
4. **`admit-source`** — emit the `field` artefact (or, for laws/regulations/policies/standards, the `codex` artefact) with a full provenance record and a **proposed** `source_quality`, which a human confirms.
4. **`admit-source`** — emit the `field` artefact (or, for laws/regulations/policies/standards, the `codex` artefact) with a full provenance record. Before Field admission, verify that the evidence will be accessible to the intended team independently of the submitter's workspace. An explicit submission of firsthand notes supports `single_source`. A stronger rating requires evidence and human confirmation. Stop here for a Field-only request.
5. **Extract typed candidates** — run the per-layer extraction prompts (`transitrix/skills/ingest/prompts/`) over the field artefact; `emit-candidates` turns the result into typed canon candidates, each carrying `derived_from`, `admitted_to: pending`, and an `extraction_confidence` flag. Entity extraction runs normally; relation extraction is conservative — only high-confidence relations become candidates, everything else is a review-queue suggestion.
6. **`validate`** — run candidates through the canonical validators and the adopter's coverage profile; out-of-profile or invalid candidates are flagged, never silently emitted or dropped.
7. **`review-queue`** — stage everything (field artefacts, candidates, relation suggestions, flags) for the human gate. Nothing in this list writes to `canon/` except the `canon/unresolved/` exception in §4.
Expand Down
Loading