Skip to main content

throughline-ms-copilot

Work on a throughline requirements graph with Microsoft 365 Copilot, in an environment where Copilot is the only assistant you have: it reads at most fifty files, runs no command and answers only in text. tl-ms-copilot writes the graph as a folder Copilot reads whole, and carries the changes Copilot sends back into the graph as proposals, through tl apply, all or nothing.

pipx install throughline-ms-copilot
tl-ms-copilot export -C idd ~/OneDrive/graph-exchange      # the folder Copilot reads
#   … give Copilot every file in graph-exchange/export/, ask for changes,
#   save each answer into graph-exchange/inbox/ …
tl-ms-copilot ingest -C idd ~/OneDrive/graph-exchange --dry-run
tl-ms-copilot ingest -C idd ~/OneDrive/graph-exchange      # carried out by tl apply
tl -C idd check

The graph's content moves only between your computer and GitHub. The package runs tl in-process and starts no process, so it runs unchanged under Pyodide in a browser tab beside the folder you chose — which is how sync.iddn.uk offers it on a laptop where nothing can be installed.

The exchange folder

graph-exchange/
├── export/                written by `export`, replaced whole each time
│   ├── manifest.json      what the export was true of, and how to answer
│   ├── INT.json  REQ.json  TEST.json …   one file per register
│   └── source-<ns>.json   the clauses an adopted source lends
└── inbox/                 Copilot's answers, saved by you
    ├── new/REQ.md         new items for one register
    ├── updates/REQ.md     amend, link, unlink, delete on one register's items
    ├── anything.md        a whole change set, any registers
    └── applied/<when>/    where `ingest` moves what it carried out

Why one file per register. Copilot's cap counts files, not items. A graph holds hundreds of item files but fewer than fifty registers, so one file per register is the smallest layout Copilot can read whole. --wrap md writes each file as Markdown holding one fenced JSON block, for a Copilot that will not read .json files. --only UID,… narrows the export to the items named.

Why changes come back as a change set, not as files. Copilot's answer is length-capped: a rewritten register file cut off half-way would read as the deletion of everything after the cut. A change set names only what changes, and tl apply refuses the whole set if any item it touches changed since the export. The manifest carries the form, as tl apply --describe states it, and tells Copilot to answer in one fenced json block.

Why answers are saved by register. For long work, ask Copilot for one register at a time — the new items for REQ, then the changes to REQ's items — and save each answer as inbox/new/REQ.md or inbox/updates/REQ.md. Paste the whole answer; the change set is found inside it. ingest gathers every file into one change set: new items first, each after any new item it links to, then the updates, then whole sets. It checks each file holds what its place says, and moves what it applied into inbox/applied/ so nothing is applied twice.

Why there are no ID conflicts. Copilot never chooses a UID. A new item is named by a label, and another item in any answer links to it as $label; tl allocates the real UID when the set is carried out, against the graph as it then stands.

Everything Copilot drafts arrives with origin ai and waits as proposed: a person decides. Decisions — ratifying, withdrawing — are never in a change set.

Commands

Command What it does
export [-C DIR] EXCHANGE [--wrap json|md] [--only UID,…] Writes EXCHANGE/export/ and creates EXCHANGE/inbox/new and inbox/updates.
ingest [-C DIR] EXCHANGE [--dry-run] Gathers EXCHANGE/inbox/ into one change set and has tl apply carry it out.
apply [-C DIR] [REPLY|-] [--dry-run] [--extract] The same for one saved reply. --extract prints the change set found and stops.

export reads the repository, ref, commit and working-tree state from git; --repository, --ref, --commit and --tree state them instead, as a host with no git — the browser — does.

Working on it

Its requirements live in idd/; see AGENTS.md.

python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
pytest -q
tl -C idd check

Apache-2.0. Microsoft 365 Copilot is a product of Microsoft Corporation; this project is not affiliated with or endorsed by Microsoft.

Metadata

Release files for throughline-ms-copilot 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for throughline-ms-copilot 0.1.0
File Size Uploaded Provenance
throughline_ms_copilot-0.1.0.tar.gz 31.4 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for throughline-ms-copilot 0.1.0
File Interpreter ABI Platform
throughline_ms_copilot-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 56.2 kB

Release files / throughline_ms_copilot-0.1.0.tar.gz

Download URL throughline_ms_copilot-0.1.0.tar.gz
Size 31.4 kB
Tags Source
SHA-256 checksum
How to use checksums
0f7d6f2fbb74133d4a8868618aa6e286da085d8989ebd50b00c709d366dffd83
BLAKE2b-256 checksum
How to use checksums
f233c395bda190d3cc887b3f2e22b4b49ac6e4a9ee42be2b0c54fb597dcd0179
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / throughline_ms_copilot-0.1.0-py3-none-any.whl

Download URL throughline_ms_copilot-0.1.0-py3-none-any.whl
Size 24.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
40a743738287a1b1d40821c8fe92a7a0255b9893edd246146f42ee9870fa80e3
BLAKE2b-256 checksum
How to use checksums
1f093b21382d4babc489bc35525a6f4945accf2518392ae39d6fa4b242944da3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Security for throughline-ms-copilot 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for throughline_ms_copilot-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page