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
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ body:
id: version
attributes:
label: Package version and source commit
description: Include tabellio-version output fields, not private machine paths.
description: Include writset-version output fields, not private machine paths.
placeholder: "0.7.0; source commit if known"
validations:
required: true
Expand Down
3 changes: 2 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

WritSet helps teams understand and track context across coding-agent work.
Serve teams trying and connecting WritSet before adding operator detail.
The published package, CLI commands, and stored formats retain their Tabellio names.
The package is `@intelip/writset`; `writset-*` commands have compatible `tabellio-*` aliases.
Existing configuration names and stored formats remain compatible.

## Find the right guide

Expand Down
11 changes: 10 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
# Changelog

All notable changes to Tabellio are recorded here.
All notable changes to WritSet, previously Tabellio, are recorded here.

## Unreleased

### 0.7.1 — WritSet package migration

- Rename the npm package to `@intelip/writset` and add `writset-*` commands.
- Keep every existing `tabellio-*` command as a compatibility alias.
- Accept both package identities in validation records while retaining the
existing schema identifiers, configuration files, Git refs, and stored data.
- Update installation, version checks, and migration instructions. Publication
remains a separate release action; the existing package is unchanged.

## 0.7.0 - 2026-09-13

This release combines the published v0.6.0 runner-identity contract with the
Expand Down
3 changes: 2 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ CI uses Node.js 22.23.1. PostgreSQL client/server binaries are required for the
provenance integration suite; git-spice 0.18 or later is needed for stack work.
The package has no runtime npm dependencies. Named npm scripts below belong to
this checkout; installed users start at [Try WritSet](docs/try-tabellio.md).
The published package and CLI commands still use the earlier Tabellio name.
The package is `@intelip/writset`. Use `writset-*` commands; existing `tabellio-*`
commands remain supported aliases.

```bash
git clone https://github.com/IntelIP/WritSet.git
Expand Down
13 changes: 7 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,21 @@ that the next session can use.
**Requirements:** macOS or Linux, Node.js 20+, Git 2.38+, and PostgreSQL client/server
tools on `PATH`. See the [setup guide](docs/try-tabellio.md#requirements).

In a new directory:
After v0.7.1 is published, run in a new directory:

```bash
npm install --save-dev @intelip/tabellio@0.7.0
npx tabellio-version --expect-version 0.7.0
npx tabellio-provenance-demo
npm install --save-dev @intelip/writset@0.7.1
npx writset-version --expect-version 0.7.1
npx writset-provenance-demo
```

The demo records source observations, restarts its temporary database, and rebuilds
the stored context. A successful receipt ends with `status: "passed"` and
`cleanup: "passed"`.

**Naming transition:** WritSet was previously Tabellio. The published package and
commands still use the earlier name; the commands above are the supported install.
**Naming transition:** The new package is `@intelip/writset`. Existing `tabellio-*`
commands remain supported aliases. Until publication, use the
[v0.7.0 installation](docs/releases/v0.7.0.md). See the [migration guide](docs/releases/v0.7.1.md).

## Current scope

Expand Down
5 changes: 3 additions & 2 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
Understand and track the context behind coding-agent work: tasks, source versions,
checkpoints, results, and handoffs. Choose the outcome you need below.

WritSet was previously Tabellio. The published package, CLI commands, configuration
files, and stored formats keep their existing names during this transition.
WritSet was previously Tabellio. The package is `@intelip/writset`, with `writset-*`
commands and compatible `tabellio-*` aliases. Configuration names and stored formats
remain compatible. See the [package migration](releases/v0.7.1.md).

| Route | Start here | Result |
| --- | --- | --- |
Expand Down
5 changes: 3 additions & 2 deletions docs/brand.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ The [Space Grotesk license](assets/fonts/space-grotesk-LICENSE.txt) and original
| Muted | `#96A4BF` | Secondary text on dark surfaces |

The product name is **WritSet**. Use **WritSet** for the GitHub repository and
public-facing prose. The existing `@intelip/tabellio` package, CLI names, schemas,
Git refs, and stored records remain compatible during the transition. Historical
public-facing prose. Use lowercase `@intelip/writset` for the npm package and
`writset-*` for commands. Legacy `tabellio-*` commands, schemas, Git refs, and stored
records remain compatible during the transition. Historical
Tabellio assets and release records are retained as history, not current branding.
18 changes: 11 additions & 7 deletions docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,17 @@ results, and unresolved work behind an agent session. Try the

## Installed-package setup

In the target repository, install the published package on a trusted worker:
After v0.7.1 is published, install the package in the target repository on a trusted worker:

```bash
npm install --save-dev @intelip/tabellio@0.7.0
npx tabellio-version --expect-version 0.7.0
npm install --save-dev @intelip/writset@0.7.1
npx writset-version --expect-version 0.7.1
```

Existing users should remove the old package first; follow the
[migration guide](releases/v0.7.1.md). Until publication, use the
[v0.7.0 installation](releases/v0.7.0.md).

Use installed CLIs with `npx`. Commands beginning `node scripts/` or `npm run`
in operator guides refer to a WritSet source checkout. Source contributors use
[CONTRIBUTING.md](../CONTRIBUTING.md); do not copy WritSet's development scripts
Expand All @@ -38,7 +42,7 @@ Enable genuine checkpoints before making agent commits:

```bash
entire enable --agent codex --project --skip-push-sessions
npx tabellio-preflight --profile agent
npx writset-preflight --profile agent
```

Keep `strategy_options.push_sessions: false`. Never push
Expand All @@ -60,15 +64,15 @@ acceptance criteria, and data boundaries. WritSet ships
Run the committed manifest against one exact candidate:

```bash
npx tabellio-validate run --repo . --repo-id github.com/example/repository --commit HEAD --manifest tabellio.validation.json
npx writset-validate run --repo . --repo-id github.com/example/repository --commit HEAD --manifest tabellio.validation.json
```

The trusted worker creates an isolated worktree and executes only committed argv
arrays. Results go to `refs/tabellio/validations`. Use `gate` in CI when anything
other than a `passed` decision must fail the job:

```bash
npx tabellio-validate gate --repo . --repo-id github.com/example/repository --base main --commit HEAD --manifest tabellio.validation.json
npx writset-validate gate --repo . --repo-id github.com/example/repository --base main --commit HEAD --manifest tabellio.validation.json
```

## Optional stacked branches
Expand All @@ -77,7 +81,7 @@ Initialize git-spice in the working repository, then capture the local graph:

```bash
git-spice repo init
npx tabellio-stack --repo . --repo-id example/repository --out tabellio-stack.json
npx writset-stack --repo . --repo-id example/repository --out tabellio-stack.json
```

Capture reads the documented local JSON output without querying GitHub status or
Expand Down
8 changes: 4 additions & 4 deletions docs/operate-and-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Use a trusted **source checkout** for the `node scripts/...` and `npm run ...`
commands below. Installed-package users can invoke the named public CLIs with
`npx tabellio-...` and the same arguments; repository npm scripts belong to this
`npx writset-...` and the same arguments; repository npm scripts belong to this
source checkout. Start with [Connect a repository](getting-started.md).

Passing evidence is tied to its code version. Sharing private evidence, publishing
Expand Down Expand Up @@ -30,7 +30,7 @@ Inspect the local runner identity before trusting a version claim:

```bash
npm run tabellio:version -- \
--expect-version 0.7.0 \
--expect-version 0.7.1 \
--expect-ref HEAD
```

Expand Down Expand Up @@ -67,8 +67,8 @@ node scripts/tabellio-release.mjs plan \
--owner example \
--remote-repo repository \
--number 42 \
--version 0.7.0 \
--notes docs/releases/v0.7.0.md \
--version 0.7.1 \
--notes docs/releases/v0.7.1.md \
--out /tmp/tabellio-release-intent.json
```

Expand Down
2 changes: 1 addition & 1 deletion docs/provenance.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

For the installed-package demo, use [Try Tabellio](try-tabellio.md). Commands with
`node scripts/...` and `npm run ...` below are for a trusted source checkout.
Installed operators use `npx tabellio-provenance` and `npx tabellio-local-store`
Installed operators use `npx writset-provenance` and `npx writset-local-store`
with the corresponding CLI arguments. Follow [Operate and release](operate-and-release.md)
before publishing statuses or sharing private evidence.

Expand Down
42 changes: 42 additions & 0 deletions docs/releases/v0.7.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# WritSet v0.7.1 package migration

This release target lets users install WritSet under its own name:
`@intelip/writset@0.7.1`. npm package names are lowercase. The product name remains
**WritSet**.

These instructions apply after publication. The existing
[`@intelip/tabellio@0.7.0` release](v0.7.0.md) remains available meanwhile.
Renaming source metadata does not rename or remove that published package.

## Migrate an existing installation

In the consumer repository, replace the dependency:

```bash
npm uninstall @intelip/tabellio
npm install --save-dev @intelip/writset@0.7.1
npx writset-version --expect-version 0.7.1
npx writset-provenance-demo
```

The version receipt must report `packageName: "@intelip/writset"` and
`packageVersion: "0.7.1"`. Install one package at a time: both packages expose the
legacy command names, so keeping both can make those commands resolve ambiguously.

## Compatibility

- Every `writset-*` command uses the same implementation as its `tabellio-*` alias.
- Existing `.tabellio/` data, `tabellio.*.json` configuration, environment variables,
Git refs, and schema identifiers keep their names. No data migration is required.
- New validators accept both WritSet and historical Tabellio package identities.
Upgrade older validators before asking them to read WritSet-labeled results.
- Existing releases, tags, checkpoints, and stored receipts are not rewritten.

## Verification and publication

Verify package identity, both command names, a clean consumer installation, the
documented demo and cleanup, and rejection of unrelated runner identities. Run
the required repository checks and committed product-validation gate.

Merge, release-tag creation, and npm publication require their own approval.
No old-package deprecation or removal is included in this change.
18 changes: 10 additions & 8 deletions docs/try-tabellio.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
# Try WritSet

Run the published package in a new directory to see how source context is recorded,
Run the package in a new directory to see how source context is recorded,
rebuilt, and checked for stale or missing evidence. This sample needs no provider
account or credentials.

WritSet was previously Tabellio. Version 0.7.0 remains published as
`@intelip/tabellio`; use the existing commands below during the naming transition.
WritSet was previously Tabellio. Version 0.7.1 uses `@intelip/writset` and
`writset-*` commands, with compatible `tabellio-*` aliases. The instructions below
apply after publication; until then, use the [v0.7.0 installation](releases/v0.7.0.md).
Existing users can follow the [migration guide](releases/v0.7.1.md).

## Requirements

Expand All @@ -30,20 +32,20 @@ Entire and git-spice are integration tools, not prerequisites for this sample.
In a new directory, run:

```bash
npm install --save-dev @intelip/tabellio@0.7.0
npx tabellio-version --expect-version 0.7.0
npx tabellio-provenance-demo
npm install --save-dev @intelip/writset@0.7.1
npx writset-version --expect-version 0.7.1
npx writset-provenance-demo
```

The version receipt identifies `@intelip/tabellio` and `packageVersion: "0.7.0"`.
The version receipt identifies `@intelip/writset` and `packageVersion: "0.7.1"`.
The demo receipt ends with `status: "passed"` and `cleanup: "passed"`. Its failure
matrix lists expected and actual decisions. A moved base, missing independent
security evidence, and changed replay inputs must remain blocked.

To retain the full receipt in this consumer directory:

```bash
npx tabellio-provenance-demo --out demo-receipt.json
npx writset-provenance-demo --out demo-receipt.json
```

Git operations and the temporary local database are real. Plane, Entire, GitHub,
Expand Down
32 changes: 30 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@intelip/tabellio",
"version": "0.7.0",
"name": "@intelip/writset",
"version": "0.7.1",
"description": "WritSet helps teams understand and track context across coding-agent work.",
"type": "module",
"license": "Apache-2.0",
Expand All @@ -11,6 +11,34 @@
"url": "git+https://github.com/IntelIP/WritSet.git"
},
"bin": {
"writset-run": "scripts/tabellio-run.mjs",
"writset-stack": "scripts/tabellio-stack.mjs",
"writset-stack-operation": "scripts/tabellio-stack-operation.mjs",
"writset-review": "scripts/tabellio-review.mjs",
"writset-validate": "scripts/tabellio-validate.mjs",
"writset-version": "scripts/tabellio-version.mjs",
"writset-merge-ready": "scripts/tabellio-merge-ready.mjs",
"writset-validator": "scripts/tabellio-validator.mjs",
"writset-design-memory": "scripts/check-tabellio-design-memory.mjs",
"writset-design-captures": "scripts/finalize-tabellio-visual-captures.mjs",
"writset-control-ref": "scripts/tabellio-control-ref.mjs",
"writset-ledger": "scripts/tabellio-ledger.mjs",
"writset-preflight": "scripts/tabellio-preflight.mjs",
"writset-release": "scripts/tabellio-release.mjs",
"writset-analytics": "scripts/tabellio-analytics.mjs",
"writset-analytics-validator": "scripts/tabellio-analytics-validator.mjs",
"writset-buildkite-builds": "scripts/tabellio-buildkite-builds.mjs",
"writset-github-releases": "scripts/tabellio-github-releases.mjs",
"writset-analytics-releases": "scripts/tabellio-analytics-releases.mjs",
"writset-plane-work-items": "scripts/tabellio-plane-work-items.mjs",
"writset-wave-admit": "scripts/tabellio-wave-admit.mjs",
"writset-deployment-check": "scripts/check-tabellio-deployment-receipt.mjs",
"writset-cloud-run-deployment": "scripts/tabellio-cloud-run-deployment.mjs",
"writset-vercel-deployment": "scripts/tabellio-vercel-deployment.mjs",
"writset-local-store": "scripts/tabellio-local-store.mjs",
"writset-provenance": "scripts/tabellio-provenance.mjs",
"writset-provenance-demo": "scripts/demo-provenance.mjs",
"writset-checkpoint-proof": "scripts/tabellio-checkpoint-proof.mjs",
"tabellio-run": "scripts/tabellio-run.mjs",
"tabellio-stack": "scripts/tabellio-stack.mjs",
"tabellio-stack-operation": "scripts/tabellio-stack-operation.mjs",
Expand Down
2 changes: 1 addition & 1 deletion schemas/validation-result.v0.4.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
"properties": {
"id": { "type": "string", "minLength": 1 },
"runtime": { "type": "string", "minLength": 1 },
"packageName": { "const": "@intelip/tabellio" },
"packageName": { "enum": ["@intelip/writset", "@intelip/tabellio"] },
"packageVersion": {
"type": "string",
"pattern": "^(?:0|[1-9][0-9]*)\\.(?:0|[1-9][0-9]*)\\.(?:0|[1-9][0-9]*)(?:-(?:0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*))*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$"
Expand Down
10 changes: 8 additions & 2 deletions schemas/validation-result.v0.5.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,10 @@
"minLength": 1
},
"packageName": {
"const": "@intelip/tabellio"
"enum": [
"@intelip/writset",
"@intelip/tabellio"
]
},
"packageVersion": {
"type": "string",
Expand Down Expand Up @@ -348,7 +351,10 @@
"minLength": 1
},
"packageName": {
"const": "@intelip/tabellio"
"enum": [
"@intelip/writset",
"@intelip/tabellio"
]
},
"packageVersion": {
"type": "string",
Expand Down
2 changes: 1 addition & 1 deletion scripts/check-docs.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ async function markdownFiles(root) {

function checkVersions(text, name, version, errors) {
for (const line of text.split(/\r?\n/)) {
const installation = /\bnpm\s+(?:install|i|add)\b/.test(line) ? line.match(/@intelip\/tabellio(?:@([^\s`"']+))?/) : null;
const installation = /\bnpm\s+(?:install|i|add)\b/.test(line) ? line.match(/@intelip\/(?:writset|tabellio)(?:@([^\s`"']+))?/) : null;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reject the legacy package in current installation checks

When an onboarding file contains npm install @intelip/tabellio@0.7.1, this regex accepts it because it validates only the shared version suffix, even though 0.7.1 is being released exclusively as @intelip/writset and the old package remains at 0.7.0. Consequently npm run docs:check can certify an installation command that cannot install the intended release; distinguish the current WritSet package from historical Tabellio references rather than treating both names interchangeably.

AGENTS.md reference: AGENTS.md:L3-L6

Useful? React with 👍 / 👎.

if (installation && installation[1] !== version) errors.push(`${name}: installation version must be ${version}, found ${installation[1] ?? "unpinned"}`);
for (const match of line.matchAll(/--expect-version\s+["']?([^\s`"']+)/g)) {
if (match[1] !== version) errors.push(`${name}: expected installation version must be ${version}, found ${match[1]}`);
Expand Down
4 changes: 3 additions & 1 deletion scripts/lib/validation-runner.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,9 @@ function validateResultRunner(value, schemaVersion) {
}

function validateRunnerIdentity(value) {
equals(value.packageName, "@intelip/tabellio", "validation result.runner.packageName");
if (!["@intelip/writset", "@intelip/tabellio"].includes(value.packageName)) {
throw new Error("validation result.runner.packageName must be @intelip/writset or @intelip/tabellio.");
}
if (typeof value.packageVersion !== "string" || !SEMANTIC_VERSION.test(value.packageVersion)) {
throw new Error("validation result.runner.packageVersion must be a semantic version.");
}
Expand Down
4 changes: 3 additions & 1 deletion tests/docs-check.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ const failures = [
["missing heading", "README.md", "[broken](docs/README.md#missing)\n", /missing local heading/],
["incorrect installation version", "docs/try-tabellio.md", "npm install --save-dev @intelip/tabellio@0.6.0\n", /installation version/],
["unpinned installation", "README.md", "npm install @intelip/tabellio\n", /found unpinned/],
["incorrect WritSet installation version", "README.md", "npm install @intelip/writset@0.6.0\n", /installation version/],
["unpinned WritSet installation", "README.md", "npm install @intelip/writset\n", /found unpinned/],
["incorrect runner version", "docs/getting-started.md", "npx tabellio-version --expect-version 0.6.0\n", /expected installation version/],
["mismatched templates", ".github/pull_request_template.md", "Different template\n", /differs from/],
["oversized README", "README.md", "line\n".repeat(151), /exceeds limit 150/],
Expand All @@ -64,7 +66,7 @@ test("docs check keeps historical release versions valid", async (t) => {
const root = await fixture(t);
await mkdir(join(root, "docs/releases"));
await writeFile(join(root, "docs/releases/v0.1.0.md"), "npm install @intelip/tabellio@0.1.0\n");
await writeFile(join(root, "README.md"), "npm install --save-dev @intelip/tabellio@0.7.0\nnpx tabellio-version --expect-version 0.7.0\n");
await writeFile(join(root, "README.md"), "npm install --save-dev @intelip/writset@0.7.0\nnpx writset-version --expect-version 0.7.0\n");
assert.deepEqual((await checkDocs(root)).errors, []);
});

Expand Down
Loading
Loading