Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Tabellio

Tabellio product overview

Node.jsGitHubJSON SchemaSARIFgit-spiceEntireLicense

GitHub-native context and evidence for agentic development.

Tabellio gives coding agents a deterministic Git foundation: standard Git repositories, isolated worktrees, immutable commit IDs, merge previews, compare-and-swap ref updates, and context packets tied to the exact diff. GitHub stores code and provides a thin pull-request shell. Tabellio keeps agent transcripts, review state, validation results, and control refs outside that public code-storage boundary.

What It Adds

Tabellio attaches a structured evidence packet to a pull request. The packet is small enough to inspect in review and strict enough to validate in CI.

AreaEvidence
TaskSource request, issue, ticket, or manual prompt summary
GitRepository, base branch, head branch, commit SHA, and PR metadata
RuntimeHuman, CI, or agent runtime that produced the change
DiffChanged files
ValidationExact-head commands plus structural, semantic, workflow, visual, operational, and security results
ApprovalsRequired, granted, denied, or skipped approvals
Side effectsDeployment, migration, infra, billing, secret, provider, and destructive-action policy
ArtifactsEvidence files generated by the run

Native Git Foundation

The native engine runs through the installed git executable. It never constructs shell commands.

ComponentRole
GitProcessExecutes argument arrays with prompts disabled and typed failures
RepositoryStoreRepository contract for Tabellio's GitHub-backed workflow
NativeGitStoreReads commits and diffs, manages worktrees, previews merges, and updates refs safely
WorkspaceManagerGives each agent run a contained worktree path
Context packetBinds task, actor, exact commits, changed files, checkpoints, and merge status
Agent-run CLIOrchestrates start, checkpoint, validation, status, and safe promotion

Review Questions

AI-assisted pull requests should not depend on reviewer trust alone. Tabellio gives reviewers a repeatable answer to:

  • What changed?
  • Why did it change?
  • What commands ran?
  • What failed or was skipped?
  • Did the workflow try to deploy, migrate, read secrets, touch billing, or mutate infrastructure?
  • Where is the machine-readable audit packet?

Workflow Stack

LayerToolingRole
RuntimeNode.js 20+Runs the local writer and validators
Validationtabellio-validate on any trusted workerRuns exact committed command or typed product validators and stores results on a Git ref
Evidence contractJSON SchemaValidates the evidence envelope and external-action policy
Code storageGitHubStores code refs and tags; provides a thin pull-request shell
Stacked reviewgit-spiceStack engine for small dependent GitHub pull requests
Checkpoint ledgerEntire and Entire CLIRequired default for agent session and checkpoint context
Git substrateStandard Git CLI, bare repositories, and worktreesStores repositories, branches, commits, patches, and agent-created code state
Agent reviewOpenAI CodexProduces findings imported into the durable GitHub review ledger
Prior artSLSA and in-totoInspiration for provenance and supply-chain evidence, without a compliance claim

origin is the canonical GitHub code remote. Entire is the required checkpoint ledger; git-spice manages stacks; Tabellio owns validation and durable review state. Private control refs are external state and are rejected when their destination is origin.

Core Files

PathPurpose
tabellio.platform.jsonCode-storage boundary, stack, ledger, validation, review, and control-ref contract
schemas/Evidence and external-action JSON schemas
scripts/providers/native-git-store.mjsStandard Git storage provider
scripts/providers/git-spice-stack-manager.mjsRead-only git-spice stack adapter
scripts/providers/git-spice-operations.mjsApproval-gated git-spice submit, update, sync, restack, and merge adapter
scripts/providers/entire-ledger-provider.mjsMetadata-only Entire checkpoint adapter
scripts/providers/github-provider.mjsRead-only GitHub pull-request, review, comment, status, and check adapter
scripts/lib/git-json-ledger.mjsVersioned, compare-and-swap JSON state on standard Git refs
scripts/lib/review-cycle.mjsDurable GitHub and agent review/fix state machine
scripts/lib/validation-runner.mjsExact-commit, shell-free validation with bounded evidence logs
scripts/tabellio-merge-ready.mjsApproval-gated publication of one exact-validation commit status
scripts/lib/control-ref-transport.mjsApproval-gated, fast-forward-only sharing of review, validation, and Entire refs
scripts/tabellio-preflight.mjsFail-closed GitHub, Entire, hook-trust, and release-main readiness checks
scripts/tabellio-release.mjsIntegrity-bound post-merge control-ref, tag, and GitHub release orchestration
scripts/lib/Git process, repository contract, worktree, and context primitives
scripts/Dependency-free capture, writer, and validators
examples/Minimal valid context, evidence, review, validation, stack, and ledger fixtures
templates/Pull request checklist for evidence-backed review
docs/Setup, schema, workflow model, Codex review, tooling stack, and research grounding

Quick Start

Enable the required ledger, initialize stacks, and validate the canonical platform contract:

entire enable --agent codex --project
git-spice repo init
npm run tabellio:platform:check
node scripts/tabellio-validate.mjs run --repo . --commit HEAD --manifest tabellio.validation.json

Configure Entire's supported strategy_options.checkpoint_remote in .entire/settings.json to target the private GitHub control repository, and keep strategy_options.push_sessions false. Tabellio preflight fails closed when the effective checkpoint remote differs from the platform control remote or automatic checkpoint pushing could bypass release approval.

Use gate in CI. It persists the same exact-head result but exits non-zero unless the final decision is passed:

tabellio-validate gate --repo . --repo-id github.com/owner/repository --base main --commit HEAD --manifest tabellio.validation.json

Plan an integrity-bound Tabellio / exact-head-validation status from that exact validation:

tabellio-merge-ready plan \
--repo . \
--commit HEAD \
--out /secure/operator/status-intent.json

Publishing requires a separate short-lived approval and scoped GitHub credential. The status proves only that the committed validation manifest passed for that head; review clearance, other checks, policy, and merge authority remain separate. See Exact-head validation status.

Validation worktrees and isolated home directories use private system-temporary sessions. --workspace-root /absolute/external/path may select another external parent; repository-internal and .git/** paths are rejected.

Keep origin limited to ordinary code branches and tags. Configure a separate private GitHub repository under another remote name before publishing control refs. The transport refuses to target origin.

Before agent or release work, run:

node scripts/tabellio-preflight.mjs --profile agent
node scripts/tabellio-preflight.mjs --profile release

Hook trust failures identify the exact Codex /hooks action required. Release profile additionally requires clean main equal to origin/main.

Before merging a release-capable pull request, synchronize the durable review cycle and require exact-head readiness:

tabellio-review gate \
--repo . \
--repo-id github.com/owner/repository \
--owner owner \
--remote-repo repository \
--number 42 \
--token-file /secure/path/github-token \
--actor pre-merge-gate

The gate exits non-zero for untriaged feedback, unpublished fixes, failed or pending checks, missing exact-head validation, or a pull request that is already merged or closed. Merge approval remains a separate human action.

Validate the bundled fixture:

node scripts/check-tabellio-evidence-envelope.mjs --evidence examples/tabellio-evidence/minimal-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence examples/tabellio-evidence/minimal-evidence.json

Generate evidence from the current Git state:

node scripts/write-tabellio-evidence-envelope.mjs --out tabellio-pr-evidence.json
node scripts/check-tabellio-evidence-envelope.mjs --evidence tabellio-pr-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence tabellio-pr-evidence.json

Capture GitHub-bound context first, then bind evidence to it:

node scripts/capture-tabellio-context.mjs \
--repo . \
--repo-id IntelIP/Tabellio \
--base main \
--head HEAD \
--out tabellio-context.json
node scripts/check-tabellio-context.mjs --context tabellio-context.json
node scripts/write-tabellio-evidence-envelope.mjs \
--context tabellio-context.json \
--out tabellio-pr-evidence.json

Context capture requires an Entire checkpoint by default. For legacy Git-note repositories during migration, pass --ledger git-note explicitly.

Run the local agent lifecycle:

node scripts/tabellio-run.mjs start \
--run-id run-42 \
--repo . \
--base main \
--task-summary "Add deterministic import validation"# Edit and commit inside the returned workspace path, then:
node scripts/tabellio-run.mjs checkpoint --run-id run-42 --repo . --summary "Implementation committed"
node scripts/tabellio-run.mjs finish --run-id run-42 --repo . -- npm test
node scripts/tabellio-run.mjs promote --run-id run-42 --repo .

See Agent run lifecycle for state and failure behavior. See Product validation for acceptance contracts, typed evidence, cost gates, and repository adapters.

Package scripts:

npm run check
npm run tabellio:run -- status --run-id run-42
npm run tabellio:run:example:check
npm run tabellio:stack -- --repo . --repo-id IntelIP/Tabellio --out tabellio-stack.json
npm run tabellio:stack:check
npm run tabellio:stack:operation:example:check
npm run tabellio:review:example:check
npm run tabellio:validate:example:check
npm run tabellio:ledger -- --repo . --repo-id IntelIP/Tabellio --base main --head HEAD --out tabellio-ledger.json
npm run tabellio:ledger:check
npm run tabellio:context:capture
npm run tabellio:context:check
npm run tabellio:evidence:write
npm run tabellio:evidence:check
npm run tabellio:external-actions:check

Protected Action Classes

These actions require explicit approval before attempted execution:

  • deployment
  • database migration
  • infrastructure change
  • DNS or hosting change
  • billing or live-money action
  • credentialed provider read
  • secret-value read
  • destructive workspace action

The external-action checker fails when an action is marked attempted: true without approved: true.

Docs

License

Apache-2.0. See LICENSE and NOTICE.

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Tabellio

Tabellio product overview

Node.jsGitHubJSON SchemaSARIFgit-spiceEntireLicense

GitHub-native context and evidence for agentic development.

Tabellio gives coding agents a deterministic Git foundation: standard Git repositories, isolated worktrees, immutable commit IDs, merge previews, compare-and-swap ref updates, and context packets tied to the exact diff. GitHub stores code and provides a thin pull-request shell. Tabellio keeps agent transcripts, review state, validation results, and control refs outside that public code-storage boundary.

What It Adds

Tabellio attaches a structured evidence packet to a pull request. The packet is small enough to inspect in review and strict enough to validate in CI.

AreaEvidence
TaskSource request, issue, ticket, or manual prompt summary
GitRepository, base branch, head branch, commit SHA, and PR metadata
RuntimeHuman, CI, or agent runtime that produced the change
DiffChanged files
ValidationExact-head commands plus structural, semantic, workflow, visual, operational, and security results
ApprovalsRequired, granted, denied, or skipped approvals
Side effectsDeployment, migration, infra, billing, secret, provider, and destructive-action policy
ArtifactsEvidence files generated by the run

Native Git Foundation

The native engine runs through the installed git executable. It never constructs shell commands.

ComponentRole
GitProcessExecutes argument arrays with prompts disabled and typed failures
RepositoryStoreRepository contract for Tabellio's GitHub-backed workflow
NativeGitStoreReads commits and diffs, manages worktrees, previews merges, and updates refs safely
WorkspaceManagerGives each agent run a contained worktree path
Context packetBinds task, actor, exact commits, changed files, checkpoints, and merge status
Agent-run CLIOrchestrates start, checkpoint, validation, status, and safe promotion

Review Questions

AI-assisted pull requests should not depend on reviewer trust alone. Tabellio gives reviewers a repeatable answer to:

  • What changed?
  • Why did it change?
  • What commands ran?
  • What failed or was skipped?
  • Did the workflow try to deploy, migrate, read secrets, touch billing, or mutate infrastructure?
  • Where is the machine-readable audit packet?

Workflow Stack

LayerToolingRole
RuntimeNode.js 20+Runs the local writer and validators
Validationtabellio-validate on any trusted workerRuns exact committed command or typed product validators and stores results on a Git ref
Evidence contractJSON SchemaValidates the evidence envelope and external-action policy
Code storageGitHubStores code refs and tags; provides a thin pull-request shell
Stacked reviewgit-spiceStack engine for small dependent GitHub pull requests
Checkpoint ledgerEntire and Entire CLIRequired default for agent session and checkpoint context
Git substrateStandard Git CLI, bare repositories, and worktreesStores repositories, branches, commits, patches, and agent-created code state
Agent reviewOpenAI CodexProduces findings imported into the durable GitHub review ledger
Prior artSLSA and in-totoInspiration for provenance and supply-chain evidence, without a compliance claim

origin is the canonical GitHub code remote. Entire is the required checkpoint ledger; git-spice manages stacks; Tabellio owns validation and durable review state. Private control refs are external state and are rejected when their destination is origin.

Core Files

PathPurpose
tabellio.platform.jsonCode-storage boundary, stack, ledger, validation, review, and control-ref contract
schemas/Evidence and external-action JSON schemas
scripts/providers/native-git-store.mjsStandard Git storage provider
scripts/providers/git-spice-stack-manager.mjsRead-only git-spice stack adapter
scripts/providers/git-spice-operations.mjsApproval-gated git-spice submit, update, sync, restack, and merge adapter
scripts/providers/entire-ledger-provider.mjsMetadata-only Entire checkpoint adapter
scripts/providers/github-provider.mjsRead-only GitHub pull-request, review, comment, status, and check adapter
scripts/lib/git-json-ledger.mjsVersioned, compare-and-swap JSON state on standard Git refs
scripts/lib/review-cycle.mjsDurable GitHub and agent review/fix state machine
scripts/lib/validation-runner.mjsExact-commit, shell-free validation with bounded evidence logs
scripts/tabellio-merge-ready.mjsApproval-gated publication of one exact-validation commit status
scripts/lib/control-ref-transport.mjsApproval-gated, fast-forward-only sharing of review, validation, and Entire refs
scripts/tabellio-preflight.mjsFail-closed GitHub, Entire, hook-trust, and release-main readiness checks
scripts/tabellio-release.mjsIntegrity-bound post-merge control-ref, tag, and GitHub release orchestration
scripts/lib/Git process, repository contract, worktree, and context primitives
scripts/Dependency-free capture, writer, and validators
examples/Minimal valid context, evidence, review, validation, stack, and ledger fixtures
templates/Pull request checklist for evidence-backed review
docs/Setup, schema, workflow model, Codex review, tooling stack, and research grounding

Quick Start

Enable the required ledger, initialize stacks, and validate the canonical platform contract:

entire enable --agent codex --project
git-spice repo init
npm run tabellio:platform:check
node scripts/tabellio-validate.mjs run --repo . --commit HEAD --manifest tabellio.validation.json

Configure Entire's supported strategy_options.checkpoint_remote in .entire/settings.json to target the private GitHub control repository, and keep strategy_options.push_sessions false. Tabellio preflight fails closed when the effective checkpoint remote differs from the platform control remote or automatic checkpoint pushing could bypass release approval.

Use gate in CI. It persists the same exact-head result but exits non-zero unless the final decision is passed:

tabellio-validate gate --repo . --repo-id github.com/owner/repository --base main --commit HEAD --manifest tabellio.validation.json

Plan an integrity-bound Tabellio / exact-head-validation status from that exact validation:

tabellio-merge-ready plan \
--repo . \
--commit HEAD \
--out /secure/operator/status-intent.json

Publishing requires a separate short-lived approval and scoped GitHub credential. The status proves only that the committed validation manifest passed for that head; review clearance, other checks, policy, and merge authority remain separate. See Exact-head validation status.

Validation worktrees and isolated home directories use private system-temporary sessions. --workspace-root /absolute/external/path may select another external parent; repository-internal and .git/** paths are rejected.

Keep origin limited to ordinary code branches and tags. Configure a separate private GitHub repository under another remote name before publishing control refs. The transport refuses to target origin.

Before agent or release work, run:

node scripts/tabellio-preflight.mjs --profile agent
node scripts/tabellio-preflight.mjs --profile release

Hook trust failures identify the exact Codex /hooks action required. Release profile additionally requires clean main equal to origin/main.

Before merging a release-capable pull request, synchronize the durable review cycle and require exact-head readiness:

tabellio-review gate \
--repo . \
--repo-id github.com/owner/repository \
--owner owner \
--remote-repo repository \
--number 42 \
--token-file /secure/path/github-token \
--actor pre-merge-gate

The gate exits non-zero for untriaged feedback, unpublished fixes, failed or pending checks, missing exact-head validation, or a pull request that is already merged or closed. Merge approval remains a separate human action.

Validate the bundled fixture:

node scripts/check-tabellio-evidence-envelope.mjs --evidence examples/tabellio-evidence/minimal-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence examples/tabellio-evidence/minimal-evidence.json

Generate evidence from the current Git state:

node scripts/write-tabellio-evidence-envelope.mjs --out tabellio-pr-evidence.json
node scripts/check-tabellio-evidence-envelope.mjs --evidence tabellio-pr-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence tabellio-pr-evidence.json

Capture GitHub-bound context first, then bind evidence to it:

node scripts/capture-tabellio-context.mjs \
--repo . \
--repo-id IntelIP/Tabellio \
--base main \
--head HEAD \
--out tabellio-context.json
node scripts/check-tabellio-context.mjs --context tabellio-context.json
node scripts/write-tabellio-evidence-envelope.mjs \
--context tabellio-context.json \
--out tabellio-pr-evidence.json

Context capture requires an Entire checkpoint by default. For legacy Git-note repositories during migration, pass --ledger git-note explicitly.

Run the local agent lifecycle:

node scripts/tabellio-run.mjs start \
--run-id run-42 \
--repo . \
--base main \
--task-summary "Add deterministic import validation"# Edit and commit inside the returned workspace path, then:
node scripts/tabellio-run.mjs checkpoint --run-id run-42 --repo . --summary "Implementation committed"
node scripts/tabellio-run.mjs finish --run-id run-42 --repo . -- npm test
node scripts/tabellio-run.mjs promote --run-id run-42 --repo .

See Agent run lifecycle for state and failure behavior. See Product validation for acceptance contracts, typed evidence, cost gates, and repository adapters.

Package scripts:

npm run check
npm run tabellio:run -- status --run-id run-42
npm run tabellio:run:example:check
npm run tabellio:stack -- --repo . --repo-id IntelIP/Tabellio --out tabellio-stack.json
npm run tabellio:stack:check
npm run tabellio:stack:operation:example:check
npm run tabellio:review:example:check
npm run tabellio:validate:example:check
npm run tabellio:ledger -- --repo . --repo-id IntelIP/Tabellio --base main --head HEAD --out tabellio-ledger.json
npm run tabellio:ledger:check
npm run tabellio:context:capture
npm run tabellio:context:check
npm run tabellio:evidence:write
npm run tabellio:evidence:check
npm run tabellio:external-actions:check

Protected Action Classes

These actions require explicit approval before attempted execution:

  • deployment
  • database migration
  • infrastructure change
  • DNS or hosting change
  • billing or live-money action
  • credentialed provider read
  • secret-value read
  • destructive workspace action

The external-action checker fails when an action is marked attempted: true without approved: true.

Docs

License

Apache-2.0. See LICENSE and NOTICE.

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Tabellio

Tabellio product overview

Node.jsGitHubJSON SchemaSARIFgit-spiceEntireLicense

GitHub-native context and evidence for agentic development.

Tabellio gives coding agents a deterministic Git foundation: standard Git repositories, isolated worktrees, immutable commit IDs, merge previews, compare-and-swap ref updates, and context packets tied to the exact diff. GitHub stores code and provides a thin pull-request shell. Tabellio keeps agent transcripts, review state, validation results, and control refs outside that public code-storage boundary.

What It Adds

Tabellio attaches a structured evidence packet to a pull request. The packet is small enough to inspect in review and strict enough to validate in CI.

AreaEvidence
TaskSource request, issue, ticket, or manual prompt summary
GitRepository, base branch, head branch, commit SHA, and PR metadata
RuntimeHuman, CI, or agent runtime that produced the change
DiffChanged files
ValidationExact-head commands plus structural, semantic, workflow, visual, operational, and security results
ApprovalsRequired, granted, denied, or skipped approvals
Side effectsDeployment, migration, infra, billing, secret, provider, and destructive-action policy
ArtifactsEvidence files generated by the run

Native Git Foundation

The native engine runs through the installed git executable. It never constructs shell commands.

ComponentRole
GitProcessExecutes argument arrays with prompts disabled and typed failures
RepositoryStoreRepository contract for Tabellio's GitHub-backed workflow
NativeGitStoreReads commits and diffs, manages worktrees, previews merges, and updates refs safely
WorkspaceManagerGives each agent run a contained worktree path
Context packetBinds task, actor, exact commits, changed files, checkpoints, and merge status
Agent-run CLIOrchestrates start, checkpoint, validation, status, and safe promotion

Review Questions

AI-assisted pull requests should not depend on reviewer trust alone. Tabellio gives reviewers a repeatable answer to:

  • What changed?
  • Why did it change?
  • What commands ran?
  • What failed or was skipped?
  • Did the workflow try to deploy, migrate, read secrets, touch billing, or mutate infrastructure?
  • Where is the machine-readable audit packet?

Workflow Stack

LayerToolingRole
RuntimeNode.js 20+Runs the local writer and validators
Validationtabellio-validate on any trusted workerRuns exact committed command or typed product validators and stores results on a Git ref
Evidence contractJSON SchemaValidates the evidence envelope and external-action policy
Code storageGitHubStores code refs and tags; provides a thin pull-request shell
Stacked reviewgit-spiceStack engine for small dependent GitHub pull requests
Checkpoint ledgerEntire and Entire CLIRequired default for agent session and checkpoint context
Git substrateStandard Git CLI, bare repositories, and worktreesStores repositories, branches, commits, patches, and agent-created code state
Agent reviewOpenAI CodexProduces findings imported into the durable GitHub review ledger
Prior artSLSA and in-totoInspiration for provenance and supply-chain evidence, without a compliance claim

origin is the canonical GitHub code remote. Entire is the required checkpoint ledger; git-spice manages stacks; Tabellio owns validation and durable review state. Private control refs are external state and are rejected when their destination is origin.

Core Files

PathPurpose
tabellio.platform.jsonCode-storage boundary, stack, ledger, validation, review, and control-ref contract
schemas/Evidence and external-action JSON schemas
scripts/providers/native-git-store.mjsStandard Git storage provider
scripts/providers/git-spice-stack-manager.mjsRead-only git-spice stack adapter
scripts/providers/git-spice-operations.mjsApproval-gated git-spice submit, update, sync, restack, and merge adapter
scripts/providers/entire-ledger-provider.mjsMetadata-only Entire checkpoint adapter
scripts/providers/github-provider.mjsRead-only GitHub pull-request, review, comment, status, and check adapter
scripts/lib/git-json-ledger.mjsVersioned, compare-and-swap JSON state on standard Git refs
scripts/lib/review-cycle.mjsDurable GitHub and agent review/fix state machine
scripts/lib/validation-runner.mjsExact-commit, shell-free validation with bounded evidence logs
scripts/tabellio-merge-ready.mjsApproval-gated publication of one exact-validation commit status
scripts/lib/control-ref-transport.mjsApproval-gated, fast-forward-only sharing of review, validation, and Entire refs
scripts/tabellio-preflight.mjsFail-closed GitHub, Entire, hook-trust, and release-main readiness checks
scripts/tabellio-release.mjsIntegrity-bound post-merge control-ref, tag, and GitHub release orchestration
scripts/lib/Git process, repository contract, worktree, and context primitives
scripts/Dependency-free capture, writer, and validators
examples/Minimal valid context, evidence, review, validation, stack, and ledger fixtures
templates/Pull request checklist for evidence-backed review
docs/Setup, schema, workflow model, Codex review, tooling stack, and research grounding

Quick Start

Enable the required ledger, initialize stacks, and validate the canonical platform contract:

entire enable --agent codex --project
git-spice repo init
npm run tabellio:platform:check
node scripts/tabellio-validate.mjs run --repo . --commit HEAD --manifest tabellio.validation.json

Configure Entire's supported strategy_options.checkpoint_remote in .entire/settings.json to target the private GitHub control repository, and keep strategy_options.push_sessions false. Tabellio preflight fails closed when the effective checkpoint remote differs from the platform control remote or automatic checkpoint pushing could bypass release approval.

Use gate in CI. It persists the same exact-head result but exits non-zero unless the final decision is passed:

tabellio-validate gate --repo . --repo-id github.com/owner/repository --base main --commit HEAD --manifest tabellio.validation.json

Plan an integrity-bound Tabellio / exact-head-validation status from that exact validation:

tabellio-merge-ready plan \
--repo . \
--commit HEAD \
--out /secure/operator/status-intent.json

Publishing requires a separate short-lived approval and scoped GitHub credential. The status proves only that the committed validation manifest passed for that head; review clearance, other checks, policy, and merge authority remain separate. See Exact-head validation status.

Validation worktrees and isolated home directories use private system-temporary sessions. --workspace-root /absolute/external/path may select another external parent; repository-internal and .git/** paths are rejected.

Keep origin limited to ordinary code branches and tags. Configure a separate private GitHub repository under another remote name before publishing control refs. The transport refuses to target origin.

Before agent or release work, run:

node scripts/tabellio-preflight.mjs --profile agent
node scripts/tabellio-preflight.mjs --profile release

Hook trust failures identify the exact Codex /hooks action required. Release profile additionally requires clean main equal to origin/main.

Before merging a release-capable pull request, synchronize the durable review cycle and require exact-head readiness:

tabellio-review gate \
--repo . \
--repo-id github.com/owner/repository \
--owner owner \
--remote-repo repository \
--number 42 \
--token-file /secure/path/github-token \
--actor pre-merge-gate

The gate exits non-zero for untriaged feedback, unpublished fixes, failed or pending checks, missing exact-head validation, or a pull request that is already merged or closed. Merge approval remains a separate human action.

Validate the bundled fixture:

node scripts/check-tabellio-evidence-envelope.mjs --evidence examples/tabellio-evidence/minimal-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence examples/tabellio-evidence/minimal-evidence.json

Generate evidence from the current Git state:

node scripts/write-tabellio-evidence-envelope.mjs --out tabellio-pr-evidence.json
node scripts/check-tabellio-evidence-envelope.mjs --evidence tabellio-pr-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence tabellio-pr-evidence.json

Capture GitHub-bound context first, then bind evidence to it:

node scripts/capture-tabellio-context.mjs \
--repo . \
--repo-id IntelIP/Tabellio \
--base main \
--head HEAD \
--out tabellio-context.json
node scripts/check-tabellio-context.mjs --context tabellio-context.json
node scripts/write-tabellio-evidence-envelope.mjs \
--context tabellio-context.json \
--out tabellio-pr-evidence.json

Context capture requires an Entire checkpoint by default. For legacy Git-note repositories during migration, pass --ledger git-note explicitly.

Run the local agent lifecycle:

node scripts/tabellio-run.mjs start \
--run-id run-42 \
--repo . \
--base main \
--task-summary "Add deterministic import validation"# Edit and commit inside the returned workspace path, then:
node scripts/tabellio-run.mjs checkpoint --run-id run-42 --repo . --summary "Implementation committed"
node scripts/tabellio-run.mjs finish --run-id run-42 --repo . -- npm test
node scripts/tabellio-run.mjs promote --run-id run-42 --repo .

See Agent run lifecycle for state and failure behavior. See Product validation for acceptance contracts, typed evidence, cost gates, and repository adapters.

Package scripts:

npm run check
npm run tabellio:run -- status --run-id run-42
npm run tabellio:run:example:check
npm run tabellio:stack -- --repo . --repo-id IntelIP/Tabellio --out tabellio-stack.json
npm run tabellio:stack:check
npm run tabellio:stack:operation:example:check
npm run tabellio:review:example:check
npm run tabellio:validate:example:check
npm run tabellio:ledger -- --repo . --repo-id IntelIP/Tabellio --base main --head HEAD --out tabellio-ledger.json
npm run tabellio:ledger:check
npm run tabellio:context:capture
npm run tabellio:context:check
npm run tabellio:evidence:write
npm run tabellio:evidence:check
npm run tabellio:external-actions:check

Protected Action Classes

These actions require explicit approval before attempted execution:

  • deployment
  • database migration
  • infrastructure change
  • DNS or hosting change
  • billing or live-money action
  • credentialed provider read
  • secret-value read
  • destructive workspace action

The external-action checker fails when an action is marked attempted: true without approved: true.

Docs

License

Apache-2.0. See LICENSE and NOTICE.

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Tabellio

Tabellio product overview

Node.jsGitHubJSON SchemaSARIFgit-spiceEntireLicense

GitHub-native context and evidence for agentic development.

Tabellio gives coding agents a deterministic Git foundation: standard Git repositories, isolated worktrees, immutable commit IDs, merge previews, compare-and-swap ref updates, and context packets tied to the exact diff. GitHub stores code and provides a thin pull-request shell. Tabellio keeps agent transcripts, review state, validation results, and control refs outside that public code-storage boundary.

What It Adds

Tabellio attaches a structured evidence packet to a pull request. The packet is small enough to inspect in review and strict enough to validate in CI.

AreaEvidence
TaskSource request, issue, ticket, or manual prompt summary
GitRepository, base branch, head branch, commit SHA, and PR metadata
RuntimeHuman, CI, or agent runtime that produced the change
DiffChanged files
ValidationExact-head commands plus structural, semantic, workflow, visual, operational, and security results
ApprovalsRequired, granted, denied, or skipped approvals
Side effectsDeployment, migration, infra, billing, secret, provider, and destructive-action policy
ArtifactsEvidence files generated by the run

Native Git Foundation

The native engine runs through the installed git executable. It never constructs shell commands.

ComponentRole
GitProcessExecutes argument arrays with prompts disabled and typed failures
RepositoryStoreRepository contract for Tabellio's GitHub-backed workflow
NativeGitStoreReads commits and diffs, manages worktrees, previews merges, and updates refs safely
WorkspaceManagerGives each agent run a contained worktree path
Context packetBinds task, actor, exact commits, changed files, checkpoints, and merge status
Agent-run CLIOrchestrates start, checkpoint, validation, status, and safe promotion

Review Questions

AI-assisted pull requests should not depend on reviewer trust alone. Tabellio gives reviewers a repeatable answer to:

  • What changed?
  • Why did it change?
  • What commands ran?
  • What failed or was skipped?
  • Did the workflow try to deploy, migrate, read secrets, touch billing, or mutate infrastructure?
  • Where is the machine-readable audit packet?

Workflow Stack

LayerToolingRole
RuntimeNode.js 20+Runs the local writer and validators
Validationtabellio-validate on any trusted workerRuns exact committed command or typed product validators and stores results on a Git ref
Evidence contractJSON SchemaValidates the evidence envelope and external-action policy
Code storageGitHubStores code refs and tags; provides a thin pull-request shell
Stacked reviewgit-spiceStack engine for small dependent GitHub pull requests
Checkpoint ledgerEntire and Entire CLIRequired default for agent session and checkpoint context
Git substrateStandard Git CLI, bare repositories, and worktreesStores repositories, branches, commits, patches, and agent-created code state
Agent reviewOpenAI CodexProduces findings imported into the durable GitHub review ledger
Prior artSLSA and in-totoInspiration for provenance and supply-chain evidence, without a compliance claim

origin is the canonical GitHub code remote. Entire is the required checkpoint ledger; git-spice manages stacks; Tabellio owns validation and durable review state. Private control refs are external state and are rejected when their destination is origin.

Core Files

PathPurpose
tabellio.platform.jsonCode-storage boundary, stack, ledger, validation, review, and control-ref contract
schemas/Evidence and external-action JSON schemas
scripts/providers/native-git-store.mjsStandard Git storage provider
scripts/providers/git-spice-stack-manager.mjsRead-only git-spice stack adapter
scripts/providers/git-spice-operations.mjsApproval-gated git-spice submit, update, sync, restack, and merge adapter
scripts/providers/entire-ledger-provider.mjsMetadata-only Entire checkpoint adapter
scripts/providers/github-provider.mjsRead-only GitHub pull-request, review, comment, status, and check adapter
scripts/lib/git-json-ledger.mjsVersioned, compare-and-swap JSON state on standard Git refs
scripts/lib/review-cycle.mjsDurable GitHub and agent review/fix state machine
scripts/lib/validation-runner.mjsExact-commit, shell-free validation with bounded evidence logs
scripts/tabellio-merge-ready.mjsApproval-gated publication of one exact-validation commit status
scripts/lib/control-ref-transport.mjsApproval-gated, fast-forward-only sharing of review, validation, and Entire refs
scripts/tabellio-preflight.mjsFail-closed GitHub, Entire, hook-trust, and release-main readiness checks
scripts/tabellio-release.mjsIntegrity-bound post-merge control-ref, tag, and GitHub release orchestration
scripts/lib/Git process, repository contract, worktree, and context primitives
scripts/Dependency-free capture, writer, and validators
examples/Minimal valid context, evidence, review, validation, stack, and ledger fixtures
templates/Pull request checklist for evidence-backed review
docs/Setup, schema, workflow model, Codex review, tooling stack, and research grounding

Quick Start

Enable the required ledger, initialize stacks, and validate the canonical platform contract:

entire enable --agent codex --project
git-spice repo init
npm run tabellio:platform:check
node scripts/tabellio-validate.mjs run --repo . --commit HEAD --manifest tabellio.validation.json

Configure Entire's supported strategy_options.checkpoint_remote in .entire/settings.json to target the private GitHub control repository, and keep strategy_options.push_sessions false. Tabellio preflight fails closed when the effective checkpoint remote differs from the platform control remote or automatic checkpoint pushing could bypass release approval.

Use gate in CI. It persists the same exact-head result but exits non-zero unless the final decision is passed:

tabellio-validate gate --repo . --repo-id github.com/owner/repository --base main --commit HEAD --manifest tabellio.validation.json

Plan an integrity-bound Tabellio / exact-head-validation status from that exact validation:

tabellio-merge-ready plan \
--repo . \
--commit HEAD \
--out /secure/operator/status-intent.json

Publishing requires a separate short-lived approval and scoped GitHub credential. The status proves only that the committed validation manifest passed for that head; review clearance, other checks, policy, and merge authority remain separate. See Exact-head validation status.

Validation worktrees and isolated home directories use private system-temporary sessions. --workspace-root /absolute/external/path may select another external parent; repository-internal and .git/** paths are rejected.

Keep origin limited to ordinary code branches and tags. Configure a separate private GitHub repository under another remote name before publishing control refs. The transport refuses to target origin.

Before agent or release work, run:

node scripts/tabellio-preflight.mjs --profile agent
node scripts/tabellio-preflight.mjs --profile release

Hook trust failures identify the exact Codex /hooks action required. Release profile additionally requires clean main equal to origin/main.

Before merging a release-capable pull request, synchronize the durable review cycle and require exact-head readiness:

tabellio-review gate \
--repo . \
--repo-id github.com/owner/repository \
--owner owner \
--remote-repo repository \
--number 42 \
--token-file /secure/path/github-token \
--actor pre-merge-gate

The gate exits non-zero for untriaged feedback, unpublished fixes, failed or pending checks, missing exact-head validation, or a pull request that is already merged or closed. Merge approval remains a separate human action.

Validate the bundled fixture:

node scripts/check-tabellio-evidence-envelope.mjs --evidence examples/tabellio-evidence/minimal-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence examples/tabellio-evidence/minimal-evidence.json

Generate evidence from the current Git state:

node scripts/write-tabellio-evidence-envelope.mjs --out tabellio-pr-evidence.json
node scripts/check-tabellio-evidence-envelope.mjs --evidence tabellio-pr-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence tabellio-pr-evidence.json

Capture GitHub-bound context first, then bind evidence to it:

node scripts/capture-tabellio-context.mjs \
--repo . \
--repo-id IntelIP/Tabellio \
--base main \
--head HEAD \
--out tabellio-context.json
node scripts/check-tabellio-context.mjs --context tabellio-context.json
node scripts/write-tabellio-evidence-envelope.mjs \
--context tabellio-context.json \
--out tabellio-pr-evidence.json

Context capture requires an Entire checkpoint by default. For legacy Git-note repositories during migration, pass --ledger git-note explicitly.

Run the local agent lifecycle:

node scripts/tabellio-run.mjs start \
--run-id run-42 \
--repo . \
--base main \
--task-summary "Add deterministic import validation"# Edit and commit inside the returned workspace path, then:
node scripts/tabellio-run.mjs checkpoint --run-id run-42 --repo . --summary "Implementation committed"
node scripts/tabellio-run.mjs finish --run-id run-42 --repo . -- npm test
node scripts/tabellio-run.mjs promote --run-id run-42 --repo .

See Agent run lifecycle for state and failure behavior. See Product validation for acceptance contracts, typed evidence, cost gates, and repository adapters.

Package scripts:

npm run check
npm run tabellio:run -- status --run-id run-42
npm run tabellio:run:example:check
npm run tabellio:stack -- --repo . --repo-id IntelIP/Tabellio --out tabellio-stack.json
npm run tabellio:stack:check
npm run tabellio:stack:operation:example:check
npm run tabellio:review:example:check
npm run tabellio:validate:example:check
npm run tabellio:ledger -- --repo . --repo-id IntelIP/Tabellio --base main --head HEAD --out tabellio-ledger.json
npm run tabellio:ledger:check
npm run tabellio:context:capture
npm run tabellio:context:check
npm run tabellio:evidence:write
npm run tabellio:evidence:check
npm run tabellio:external-actions:check

Protected Action Classes

These actions require explicit approval before attempted execution:

  • deployment
  • database migration
  • infrastructure change
  • DNS or hosting change
  • billing or live-money action
  • credentialed provider read
  • secret-value read
  • destructive workspace action

The external-action checker fails when an action is marked attempted: true without approved: true.

Docs

License

Apache-2.0. See LICENSE and NOTICE.

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Tabellio

Tabellio product overview

Node.jsGitHubJSON SchemaSARIFgit-spiceEntireLicense

GitHub-native context and evidence for agentic development.

Tabellio gives coding agents a deterministic Git foundation: standard Git repositories, isolated worktrees, immutable commit IDs, merge previews, compare-and-swap ref updates, and context packets tied to the exact diff. GitHub stores code and provides a thin pull-request shell. Tabellio keeps agent transcripts, review state, validation results, and control refs outside that public code-storage boundary.

What It Adds

Tabellio attaches a structured evidence packet to a pull request. The packet is small enough to inspect in review and strict enough to validate in CI.

AreaEvidence
TaskSource request, issue, ticket, or manual prompt summary
GitRepository, base branch, head branch, commit SHA, and PR metadata
RuntimeHuman, CI, or agent runtime that produced the change
DiffChanged files
ValidationExact-head commands plus structural, semantic, workflow, visual, operational, and security results
ApprovalsRequired, granted, denied, or skipped approvals
Side effectsDeployment, migration, infra, billing, secret, provider, and destructive-action policy
ArtifactsEvidence files generated by the run

Native Git Foundation

The native engine runs through the installed git executable. It never constructs shell commands.

ComponentRole
GitProcessExecutes argument arrays with prompts disabled and typed failures
RepositoryStoreRepository contract for Tabellio's GitHub-backed workflow
NativeGitStoreReads commits and diffs, manages worktrees, previews merges, and updates refs safely
WorkspaceManagerGives each agent run a contained worktree path
Context packetBinds task, actor, exact commits, changed files, checkpoints, and merge status
Agent-run CLIOrchestrates start, checkpoint, validation, status, and safe promotion

Review Questions

AI-assisted pull requests should not depend on reviewer trust alone. Tabellio gives reviewers a repeatable answer to:

  • What changed?
  • Why did it change?
  • What commands ran?
  • What failed or was skipped?
  • Did the workflow try to deploy, migrate, read secrets, touch billing, or mutate infrastructure?
  • Where is the machine-readable audit packet?

Workflow Stack

LayerToolingRole
RuntimeNode.js 20+Runs the local writer and validators
Validationtabellio-validate on any trusted workerRuns exact committed command or typed product validators and stores results on a Git ref
Evidence contractJSON SchemaValidates the evidence envelope and external-action policy
Code storageGitHubStores code refs and tags; provides a thin pull-request shell
Stacked reviewgit-spiceStack engine for small dependent GitHub pull requests
Checkpoint ledgerEntire and Entire CLIRequired default for agent session and checkpoint context
Git substrateStandard Git CLI, bare repositories, and worktreesStores repositories, branches, commits, patches, and agent-created code state
Agent reviewOpenAI CodexProduces findings imported into the durable GitHub review ledger
Prior artSLSA and in-totoInspiration for provenance and supply-chain evidence, without a compliance claim

origin is the canonical GitHub code remote. Entire is the required checkpoint ledger; git-spice manages stacks; Tabellio owns validation and durable review state. Private control refs are external state and are rejected when their destination is origin.

Core Files

PathPurpose
tabellio.platform.jsonCode-storage boundary, stack, ledger, validation, review, and control-ref contract
schemas/Evidence and external-action JSON schemas
scripts/providers/native-git-store.mjsStandard Git storage provider
scripts/providers/git-spice-stack-manager.mjsRead-only git-spice stack adapter
scripts/providers/git-spice-operations.mjsApproval-gated git-spice submit, update, sync, restack, and merge adapter
scripts/providers/entire-ledger-provider.mjsMetadata-only Entire checkpoint adapter
scripts/providers/github-provider.mjsRead-only GitHub pull-request, review, comment, status, and check adapter
scripts/lib/git-json-ledger.mjsVersioned, compare-and-swap JSON state on standard Git refs
scripts/lib/review-cycle.mjsDurable GitHub and agent review/fix state machine
scripts/lib/validation-runner.mjsExact-commit, shell-free validation with bounded evidence logs
scripts/tabellio-merge-ready.mjsApproval-gated publication of one exact-validation commit status
scripts/lib/control-ref-transport.mjsApproval-gated, fast-forward-only sharing of review, validation, and Entire refs
scripts/tabellio-preflight.mjsFail-closed GitHub, Entire, hook-trust, and release-main readiness checks
scripts/tabellio-release.mjsIntegrity-bound post-merge control-ref, tag, and GitHub release orchestration
scripts/lib/Git process, repository contract, worktree, and context primitives
scripts/Dependency-free capture, writer, and validators
examples/Minimal valid context, evidence, review, validation, stack, and ledger fixtures
templates/Pull request checklist for evidence-backed review
docs/Setup, schema, workflow model, Codex review, tooling stack, and research grounding

Quick Start

Enable the required ledger, initialize stacks, and validate the canonical platform contract:

entire enable --agent codex --project
git-spice repo init
npm run tabellio:platform:check
node scripts/tabellio-validate.mjs run --repo . --commit HEAD --manifest tabellio.validation.json

Configure Entire's supported strategy_options.checkpoint_remote in .entire/settings.json to target the private GitHub control repository, and keep strategy_options.push_sessions false. Tabellio preflight fails closed when the effective checkpoint remote differs from the platform control remote or automatic checkpoint pushing could bypass release approval.

Use gate in CI. It persists the same exact-head result but exits non-zero unless the final decision is passed:

tabellio-validate gate --repo . --repo-id github.com/owner/repository --base main --commit HEAD --manifest tabellio.validation.json

Plan an integrity-bound Tabellio / exact-head-validation status from that exact validation:

tabellio-merge-ready plan \
--repo . \
--commit HEAD \
--out /secure/operator/status-intent.json

Publishing requires a separate short-lived approval and scoped GitHub credential. The status proves only that the committed validation manifest passed for that head; review clearance, other checks, policy, and merge authority remain separate. See Exact-head validation status.

Validation worktrees and isolated home directories use private system-temporary sessions. --workspace-root /absolute/external/path may select another external parent; repository-internal and .git/** paths are rejected.

Keep origin limited to ordinary code branches and tags. Configure a separate private GitHub repository under another remote name before publishing control refs. The transport refuses to target origin.

Before agent or release work, run:

node scripts/tabellio-preflight.mjs --profile agent
node scripts/tabellio-preflight.mjs --profile release

Hook trust failures identify the exact Codex /hooks action required. Release profile additionally requires clean main equal to origin/main.

Before merging a release-capable pull request, synchronize the durable review cycle and require exact-head readiness:

tabellio-review gate \
--repo . \
--repo-id github.com/owner/repository \
--owner owner \
--remote-repo repository \
--number 42 \
--token-file /secure/path/github-token \
--actor pre-merge-gate

The gate exits non-zero for untriaged feedback, unpublished fixes, failed or pending checks, missing exact-head validation, or a pull request that is already merged or closed. Merge approval remains a separate human action.

Validate the bundled fixture:

node scripts/check-tabellio-evidence-envelope.mjs --evidence examples/tabellio-evidence/minimal-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence examples/tabellio-evidence/minimal-evidence.json

Generate evidence from the current Git state:

node scripts/write-tabellio-evidence-envelope.mjs --out tabellio-pr-evidence.json
node scripts/check-tabellio-evidence-envelope.mjs --evidence tabellio-pr-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence tabellio-pr-evidence.json

Capture GitHub-bound context first, then bind evidence to it:

node scripts/capture-tabellio-context.mjs \
--repo . \
--repo-id IntelIP/Tabellio \
--base main \
--head HEAD \
--out tabellio-context.json
node scripts/check-tabellio-context.mjs --context tabellio-context.json
node scripts/write-tabellio-evidence-envelope.mjs \
--context tabellio-context.json \
--out tabellio-pr-evidence.json

Context capture requires an Entire checkpoint by default. For legacy Git-note repositories during migration, pass --ledger git-note explicitly.

Run the local agent lifecycle:

node scripts/tabellio-run.mjs start \
--run-id run-42 \
--repo . \
--base main \
--task-summary "Add deterministic import validation"# Edit and commit inside the returned workspace path, then:
node scripts/tabellio-run.mjs checkpoint --run-id run-42 --repo . --summary "Implementation committed"
node scripts/tabellio-run.mjs finish --run-id run-42 --repo . -- npm test
node scripts/tabellio-run.mjs promote --run-id run-42 --repo .

See Agent run lifecycle for state and failure behavior. See Product validation for acceptance contracts, typed evidence, cost gates, and repository adapters.

Package scripts:

npm run check
npm run tabellio:run -- status --run-id run-42
npm run tabellio:run:example:check
npm run tabellio:stack -- --repo . --repo-id IntelIP/Tabellio --out tabellio-stack.json
npm run tabellio:stack:check
npm run tabellio:stack:operation:example:check
npm run tabellio:review:example:check
npm run tabellio:validate:example:check
npm run tabellio:ledger -- --repo . --repo-id IntelIP/Tabellio --base main --head HEAD --out tabellio-ledger.json
npm run tabellio:ledger:check
npm run tabellio:context:capture
npm run tabellio:context:check
npm run tabellio:evidence:write
npm run tabellio:evidence:check
npm run tabellio:external-actions:check

Protected Action Classes

These actions require explicit approval before attempted execution:

  • deployment
  • database migration
  • infrastructure change
  • DNS or hosting change
  • billing or live-money action
  • credentialed provider read
  • secret-value read
  • destructive workspace action

The external-action checker fails when an action is marked attempted: true without approved: true.

Docs

License

Apache-2.0. See LICENSE and NOTICE.

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Tabellio

Tabellio product overview

Node.jsGitHubJSON SchemaSARIFgit-spiceEntireLicense

GitHub-native context and evidence for agentic development.

Tabellio gives coding agents a deterministic Git foundation: standard Git repositories, isolated worktrees, immutable commit IDs, merge previews, compare-and-swap ref updates, and context packets tied to the exact diff. GitHub stores code and provides a thin pull-request shell. Tabellio keeps agent transcripts, review state, validation results, and control refs outside that public code-storage boundary.

What It Adds

Tabellio attaches a structured evidence packet to a pull request. The packet is small enough to inspect in review and strict enough to validate in CI.

AreaEvidence
TaskSource request, issue, ticket, or manual prompt summary
GitRepository, base branch, head branch, commit SHA, and PR metadata
RuntimeHuman, CI, or agent runtime that produced the change
DiffChanged files
ValidationExact-head commands plus structural, semantic, workflow, visual, operational, and security results
ApprovalsRequired, granted, denied, or skipped approvals
Side effectsDeployment, migration, infra, billing, secret, provider, and destructive-action policy
ArtifactsEvidence files generated by the run

Native Git Foundation

The native engine runs through the installed git executable. It never constructs shell commands.

ComponentRole
GitProcessExecutes argument arrays with prompts disabled and typed failures
RepositoryStoreRepository contract for Tabellio's GitHub-backed workflow
NativeGitStoreReads commits and diffs, manages worktrees, previews merges, and updates refs safely
WorkspaceManagerGives each agent run a contained worktree path
Context packetBinds task, actor, exact commits, changed files, checkpoints, and merge status
Agent-run CLIOrchestrates start, checkpoint, validation, status, and safe promotion

Review Questions

AI-assisted pull requests should not depend on reviewer trust alone. Tabellio gives reviewers a repeatable answer to:

  • What changed?
  • Why did it change?
  • What commands ran?
  • What failed or was skipped?
  • Did the workflow try to deploy, migrate, read secrets, touch billing, or mutate infrastructure?
  • Where is the machine-readable audit packet?

Workflow Stack

LayerToolingRole
RuntimeNode.js 20+Runs the local writer and validators
Validationtabellio-validate on any trusted workerRuns exact committed command or typed product validators and stores results on a Git ref
Evidence contractJSON SchemaValidates the evidence envelope and external-action policy
Code storageGitHubStores code refs and tags; provides a thin pull-request shell
Stacked reviewgit-spiceStack engine for small dependent GitHub pull requests
Checkpoint ledgerEntire and Entire CLIRequired default for agent session and checkpoint context
Git substrateStandard Git CLI, bare repositories, and worktreesStores repositories, branches, commits, patches, and agent-created code state
Agent reviewOpenAI CodexProduces findings imported into the durable GitHub review ledger
Prior artSLSA and in-totoInspiration for provenance and supply-chain evidence, without a compliance claim

origin is the canonical GitHub code remote. Entire is the required checkpoint ledger; git-spice manages stacks; Tabellio owns validation and durable review state. Private control refs are external state and are rejected when their destination is origin.

Core Files

PathPurpose
tabellio.platform.jsonCode-storage boundary, stack, ledger, validation, review, and control-ref contract
schemas/Evidence and external-action JSON schemas
scripts/providers/native-git-store.mjsStandard Git storage provider
scripts/providers/git-spice-stack-manager.mjsRead-only git-spice stack adapter
scripts/providers/git-spice-operations.mjsApproval-gated git-spice submit, update, sync, restack, and merge adapter
scripts/providers/entire-ledger-provider.mjsMetadata-only Entire checkpoint adapter
scripts/providers/github-provider.mjsRead-only GitHub pull-request, review, comment, status, and check adapter
scripts/lib/git-json-ledger.mjsVersioned, compare-and-swap JSON state on standard Git refs
scripts/lib/review-cycle.mjsDurable GitHub and agent review/fix state machine
scripts/lib/validation-runner.mjsExact-commit, shell-free validation with bounded evidence logs
scripts/tabellio-merge-ready.mjsApproval-gated publication of one exact-validation commit status
scripts/lib/control-ref-transport.mjsApproval-gated, fast-forward-only sharing of review, validation, and Entire refs
scripts/tabellio-preflight.mjsFail-closed GitHub, Entire, hook-trust, and release-main readiness checks
scripts/tabellio-release.mjsIntegrity-bound post-merge control-ref, tag, and GitHub release orchestration
scripts/lib/Git process, repository contract, worktree, and context primitives
scripts/Dependency-free capture, writer, and validators
examples/Minimal valid context, evidence, review, validation, stack, and ledger fixtures
templates/Pull request checklist for evidence-backed review
docs/Setup, schema, workflow model, Codex review, tooling stack, and research grounding

Quick Start

Enable the required ledger, initialize stacks, and validate the canonical platform contract:

entire enable --agent codex --project
git-spice repo init
npm run tabellio:platform:check
node scripts/tabellio-validate.mjs run --repo . --commit HEAD --manifest tabellio.validation.json

Configure Entire's supported strategy_options.checkpoint_remote in .entire/settings.json to target the private GitHub control repository, and keep strategy_options.push_sessions false. Tabellio preflight fails closed when the effective checkpoint remote differs from the platform control remote or automatic checkpoint pushing could bypass release approval.

Use gate in CI. It persists the same exact-head result but exits non-zero unless the final decision is passed:

tabellio-validate gate --repo . --repo-id github.com/owner/repository --base main --commit HEAD --manifest tabellio.validation.json

Plan an integrity-bound Tabellio / exact-head-validation status from that exact validation:

tabellio-merge-ready plan \
--repo . \
--commit HEAD \
--out /secure/operator/status-intent.json

Publishing requires a separate short-lived approval and scoped GitHub credential. The status proves only that the committed validation manifest passed for that head; review clearance, other checks, policy, and merge authority remain separate. See Exact-head validation status.

Validation worktrees and isolated home directories use private system-temporary sessions. --workspace-root /absolute/external/path may select another external parent; repository-internal and .git/** paths are rejected.

Keep origin limited to ordinary code branches and tags. Configure a separate private GitHub repository under another remote name before publishing control refs. The transport refuses to target origin.

Before agent or release work, run:

node scripts/tabellio-preflight.mjs --profile agent
node scripts/tabellio-preflight.mjs --profile release

Hook trust failures identify the exact Codex /hooks action required. Release profile additionally requires clean main equal to origin/main.

Before merging a release-capable pull request, synchronize the durable review cycle and require exact-head readiness:

tabellio-review gate \
--repo . \
--repo-id github.com/owner/repository \
--owner owner \
--remote-repo repository \
--number 42 \
--token-file /secure/path/github-token \
--actor pre-merge-gate

The gate exits non-zero for untriaged feedback, unpublished fixes, failed or pending checks, missing exact-head validation, or a pull request that is already merged or closed. Merge approval remains a separate human action.

Validate the bundled fixture:

node scripts/check-tabellio-evidence-envelope.mjs --evidence examples/tabellio-evidence/minimal-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence examples/tabellio-evidence/minimal-evidence.json

Generate evidence from the current Git state:

node scripts/write-tabellio-evidence-envelope.mjs --out tabellio-pr-evidence.json
node scripts/check-tabellio-evidence-envelope.mjs --evidence tabellio-pr-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence tabellio-pr-evidence.json

Capture GitHub-bound context first, then bind evidence to it:

node scripts/capture-tabellio-context.mjs \
--repo . \
--repo-id IntelIP/Tabellio \
--base main \
--head HEAD \
--out tabellio-context.json
node scripts/check-tabellio-context.mjs --context tabellio-context.json
node scripts/write-tabellio-evidence-envelope.mjs \
--context tabellio-context.json \
--out tabellio-pr-evidence.json

Context capture requires an Entire checkpoint by default. For legacy Git-note repositories during migration, pass --ledger git-note explicitly.

Run the local agent lifecycle:

node scripts/tabellio-run.mjs start \
--run-id run-42 \
--repo . \
--base main \
--task-summary "Add deterministic import validation"# Edit and commit inside the returned workspace path, then:
node scripts/tabellio-run.mjs checkpoint --run-id run-42 --repo . --summary "Implementation committed"
node scripts/tabellio-run.mjs finish --run-id run-42 --repo . -- npm test
node scripts/tabellio-run.mjs promote --run-id run-42 --repo .

See Agent run lifecycle for state and failure behavior. See Product validation for acceptance contracts, typed evidence, cost gates, and repository adapters.

Package scripts:

npm run check
npm run tabellio:run -- status --run-id run-42
npm run tabellio:run:example:check
npm run tabellio:stack -- --repo . --repo-id IntelIP/Tabellio --out tabellio-stack.json
npm run tabellio:stack:check
npm run tabellio:stack:operation:example:check
npm run tabellio:review:example:check
npm run tabellio:validate:example:check
npm run tabellio:ledger -- --repo . --repo-id IntelIP/Tabellio --base main --head HEAD --out tabellio-ledger.json
npm run tabellio:ledger:check
npm run tabellio:context:capture
npm run tabellio:context:check
npm run tabellio:evidence:write
npm run tabellio:evidence:check
npm run tabellio:external-actions:check

Protected Action Classes

These actions require explicit approval before attempted execution:

  • deployment
  • database migration
  • infrastructure change
  • DNS or hosting change
  • billing or live-money action
  • credentialed provider read
  • secret-value read
  • destructive workspace action

The external-action checker fails when an action is marked attempted: true without approved: true.

Docs

License

Apache-2.0. See LICENSE and NOTICE.

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Tabellio

Tabellio product overview

Node.jsGitHubJSON SchemaSARIFgit-spiceEntireLicense

GitHub-native context and evidence for agentic development.

Tabellio gives coding agents a deterministic Git foundation: standard Git repositories, isolated worktrees, immutable commit IDs, merge previews, compare-and-swap ref updates, and context packets tied to the exact diff. GitHub stores code and provides a thin pull-request shell. Tabellio keeps agent transcripts, review state, validation results, and control refs outside that public code-storage boundary.

What It Adds

Tabellio attaches a structured evidence packet to a pull request. The packet is small enough to inspect in review and strict enough to validate in CI.

AreaEvidence
TaskSource request, issue, ticket, or manual prompt summary
GitRepository, base branch, head branch, commit SHA, and PR metadata
RuntimeHuman, CI, or agent runtime that produced the change
DiffChanged files
ValidationExact-head commands plus structural, semantic, workflow, visual, operational, and security results
ApprovalsRequired, granted, denied, or skipped approvals
Side effectsDeployment, migration, infra, billing, secret, provider, and destructive-action policy
ArtifactsEvidence files generated by the run

Native Git Foundation

The native engine runs through the installed git executable. It never constructs shell commands.

ComponentRole
GitProcessExecutes argument arrays with prompts disabled and typed failures
RepositoryStoreRepository contract for Tabellio's GitHub-backed workflow
NativeGitStoreReads commits and diffs, manages worktrees, previews merges, and updates refs safely
WorkspaceManagerGives each agent run a contained worktree path
Context packetBinds task, actor, exact commits, changed files, checkpoints, and merge status
Agent-run CLIOrchestrates start, checkpoint, validation, status, and safe promotion

Review Questions

AI-assisted pull requests should not depend on reviewer trust alone. Tabellio gives reviewers a repeatable answer to:

  • What changed?
  • Why did it change?
  • What commands ran?
  • What failed or was skipped?
  • Did the workflow try to deploy, migrate, read secrets, touch billing, or mutate infrastructure?
  • Where is the machine-readable audit packet?

Workflow Stack

LayerToolingRole
RuntimeNode.js 20+Runs the local writer and validators
Validationtabellio-validate on any trusted workerRuns exact committed command or typed product validators and stores results on a Git ref
Evidence contractJSON SchemaValidates the evidence envelope and external-action policy
Code storageGitHubStores code refs and tags; provides a thin pull-request shell
Stacked reviewgit-spiceStack engine for small dependent GitHub pull requests
Checkpoint ledgerEntire and Entire CLIRequired default for agent session and checkpoint context
Git substrateStandard Git CLI, bare repositories, and worktreesStores repositories, branches, commits, patches, and agent-created code state
Agent reviewOpenAI CodexProduces findings imported into the durable GitHub review ledger
Prior artSLSA and in-totoInspiration for provenance and supply-chain evidence, without a compliance claim

origin is the canonical GitHub code remote. Entire is the required checkpoint ledger; git-spice manages stacks; Tabellio owns validation and durable review state. Private control refs are external state and are rejected when their destination is origin.

Core Files

PathPurpose
tabellio.platform.jsonCode-storage boundary, stack, ledger, validation, review, and control-ref contract
schemas/Evidence and external-action JSON schemas
scripts/providers/native-git-store.mjsStandard Git storage provider
scripts/providers/git-spice-stack-manager.mjsRead-only git-spice stack adapter
scripts/providers/git-spice-operations.mjsApproval-gated git-spice submit, update, sync, restack, and merge adapter
scripts/providers/entire-ledger-provider.mjsMetadata-only Entire checkpoint adapter
scripts/providers/github-provider.mjsRead-only GitHub pull-request, review, comment, status, and check adapter
scripts/lib/git-json-ledger.mjsVersioned, compare-and-swap JSON state on standard Git refs
scripts/lib/review-cycle.mjsDurable GitHub and agent review/fix state machine
scripts/lib/validation-runner.mjsExact-commit, shell-free validation with bounded evidence logs
scripts/tabellio-merge-ready.mjsApproval-gated publication of one exact-validation commit status
scripts/lib/control-ref-transport.mjsApproval-gated, fast-forward-only sharing of review, validation, and Entire refs
scripts/tabellio-preflight.mjsFail-closed GitHub, Entire, hook-trust, and release-main readiness checks
scripts/tabellio-release.mjsIntegrity-bound post-merge control-ref, tag, and GitHub release orchestration
scripts/lib/Git process, repository contract, worktree, and context primitives
scripts/Dependency-free capture, writer, and validators
examples/Minimal valid context, evidence, review, validation, stack, and ledger fixtures
templates/Pull request checklist for evidence-backed review
docs/Setup, schema, workflow model, Codex review, tooling stack, and research grounding

Quick Start

Enable the required ledger, initialize stacks, and validate the canonical platform contract:

entire enable --agent codex --project
git-spice repo init
npm run tabellio:platform:check
node scripts/tabellio-validate.mjs run --repo . --commit HEAD --manifest tabellio.validation.json

Configure Entire's supported strategy_options.checkpoint_remote in .entire/settings.json to target the private GitHub control repository, and keep strategy_options.push_sessions false. Tabellio preflight fails closed when the effective checkpoint remote differs from the platform control remote or automatic checkpoint pushing could bypass release approval.

Use gate in CI. It persists the same exact-head result but exits non-zero unless the final decision is passed:

tabellio-validate gate --repo . --repo-id github.com/owner/repository --base main --commit HEAD --manifest tabellio.validation.json

Plan an integrity-bound Tabellio / exact-head-validation status from that exact validation:

tabellio-merge-ready plan \
--repo . \
--commit HEAD \
--out /secure/operator/status-intent.json

Publishing requires a separate short-lived approval and scoped GitHub credential. The status proves only that the committed validation manifest passed for that head; review clearance, other checks, policy, and merge authority remain separate. See Exact-head validation status.

Validation worktrees and isolated home directories use private system-temporary sessions. --workspace-root /absolute/external/path may select another external parent; repository-internal and .git/** paths are rejected.

Keep origin limited to ordinary code branches and tags. Configure a separate private GitHub repository under another remote name before publishing control refs. The transport refuses to target origin.

Before agent or release work, run:

node scripts/tabellio-preflight.mjs --profile agent
node scripts/tabellio-preflight.mjs --profile release

Hook trust failures identify the exact Codex /hooks action required. Release profile additionally requires clean main equal to origin/main.

Before merging a release-capable pull request, synchronize the durable review cycle and require exact-head readiness:

tabellio-review gate \
--repo . \
--repo-id github.com/owner/repository \
--owner owner \
--remote-repo repository \
--number 42 \
--token-file /secure/path/github-token \
--actor pre-merge-gate

The gate exits non-zero for untriaged feedback, unpublished fixes, failed or pending checks, missing exact-head validation, or a pull request that is already merged or closed. Merge approval remains a separate human action.

Validate the bundled fixture:

node scripts/check-tabellio-evidence-envelope.mjs --evidence examples/tabellio-evidence/minimal-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence examples/tabellio-evidence/minimal-evidence.json

Generate evidence from the current Git state:

node scripts/write-tabellio-evidence-envelope.mjs --out tabellio-pr-evidence.json
node scripts/check-tabellio-evidence-envelope.mjs --evidence tabellio-pr-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence tabellio-pr-evidence.json

Capture GitHub-bound context first, then bind evidence to it:

node scripts/capture-tabellio-context.mjs \
--repo . \
--repo-id IntelIP/Tabellio \
--base main \
--head HEAD \
--out tabellio-context.json
node scripts/check-tabellio-context.mjs --context tabellio-context.json
node scripts/write-tabellio-evidence-envelope.mjs \
--context tabellio-context.json \
--out tabellio-pr-evidence.json

Context capture requires an Entire checkpoint by default. For legacy Git-note repositories during migration, pass --ledger git-note explicitly.

Run the local agent lifecycle:

node scripts/tabellio-run.mjs start \
--run-id run-42 \
--repo . \
--base main \
--task-summary "Add deterministic import validation"# Edit and commit inside the returned workspace path, then:
node scripts/tabellio-run.mjs checkpoint --run-id run-42 --repo . --summary "Implementation committed"
node scripts/tabellio-run.mjs finish --run-id run-42 --repo . -- npm test
node scripts/tabellio-run.mjs promote --run-id run-42 --repo .

See Agent run lifecycle for state and failure behavior. See Product validation for acceptance contracts, typed evidence, cost gates, and repository adapters.

Package scripts:

npm run check
npm run tabellio:run -- status --run-id run-42
npm run tabellio:run:example:check
npm run tabellio:stack -- --repo . --repo-id IntelIP/Tabellio --out tabellio-stack.json
npm run tabellio:stack:check
npm run tabellio:stack:operation:example:check
npm run tabellio:review:example:check
npm run tabellio:validate:example:check
npm run tabellio:ledger -- --repo . --repo-id IntelIP/Tabellio --base main --head HEAD --out tabellio-ledger.json
npm run tabellio:ledger:check
npm run tabellio:context:capture
npm run tabellio:context:check
npm run tabellio:evidence:write
npm run tabellio:evidence:check
npm run tabellio:external-actions:check

Protected Action Classes

These actions require explicit approval before attempted execution:

  • deployment
  • database migration
  • infrastructure change
  • DNS or hosting change
  • billing or live-money action
  • credentialed provider read
  • secret-value read
  • destructive workspace action

The external-action checker fails when an action is marked attempted: true without approved: true.

Docs

License

Apache-2.0. See LICENSE and NOTICE.

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Tabellio

Tabellio product overview

Node.jsGitHubJSON SchemaSARIFgit-spiceEntireLicense

GitHub-native context and evidence for agentic development.

Tabellio gives coding agents a deterministic Git foundation: standard Git repositories, isolated worktrees, immutable commit IDs, merge previews, compare-and-swap ref updates, and context packets tied to the exact diff. GitHub stores code and provides a thin pull-request shell. Tabellio keeps agent transcripts, review state, validation results, and control refs outside that public code-storage boundary.

What It Adds

Tabellio attaches a structured evidence packet to a pull request. The packet is small enough to inspect in review and strict enough to validate in CI.

AreaEvidence
TaskSource request, issue, ticket, or manual prompt summary
GitRepository, base branch, head branch, commit SHA, and PR metadata
RuntimeHuman, CI, or agent runtime that produced the change
DiffChanged files
ValidationExact-head commands plus structural, semantic, workflow, visual, operational, and security results
ApprovalsRequired, granted, denied, or skipped approvals
Side effectsDeployment, migration, infra, billing, secret, provider, and destructive-action policy
ArtifactsEvidence files generated by the run

Native Git Foundation

The native engine runs through the installed git executable. It never constructs shell commands.

ComponentRole
GitProcessExecutes argument arrays with prompts disabled and typed failures
RepositoryStoreRepository contract for Tabellio's GitHub-backed workflow
NativeGitStoreReads commits and diffs, manages worktrees, previews merges, and updates refs safely
WorkspaceManagerGives each agent run a contained worktree path
Context packetBinds task, actor, exact commits, changed files, checkpoints, and merge status
Agent-run CLIOrchestrates start, checkpoint, validation, status, and safe promotion

Review Questions

AI-assisted pull requests should not depend on reviewer trust alone. Tabellio gives reviewers a repeatable answer to:

  • What changed?
  • Why did it change?
  • What commands ran?
  • What failed or was skipped?
  • Did the workflow try to deploy, migrate, read secrets, touch billing, or mutate infrastructure?
  • Where is the machine-readable audit packet?

Workflow Stack

LayerToolingRole
RuntimeNode.js 20+Runs the local writer and validators
Validationtabellio-validate on any trusted workerRuns exact committed command or typed product validators and stores results on a Git ref
Evidence contractJSON SchemaValidates the evidence envelope and external-action policy
Code storageGitHubStores code refs and tags; provides a thin pull-request shell
Stacked reviewgit-spiceStack engine for small dependent GitHub pull requests
Checkpoint ledgerEntire and Entire CLIRequired default for agent session and checkpoint context
Git substrateStandard Git CLI, bare repositories, and worktreesStores repositories, branches, commits, patches, and agent-created code state
Agent reviewOpenAI CodexProduces findings imported into the durable GitHub review ledger
Prior artSLSA and in-totoInspiration for provenance and supply-chain evidence, without a compliance claim

origin is the canonical GitHub code remote. Entire is the required checkpoint ledger; git-spice manages stacks; Tabellio owns validation and durable review state. Private control refs are external state and are rejected when their destination is origin.

Core Files

PathPurpose
tabellio.platform.jsonCode-storage boundary, stack, ledger, validation, review, and control-ref contract
schemas/Evidence and external-action JSON schemas
scripts/providers/native-git-store.mjsStandard Git storage provider
scripts/providers/git-spice-stack-manager.mjsRead-only git-spice stack adapter
scripts/providers/git-spice-operations.mjsApproval-gated git-spice submit, update, sync, restack, and merge adapter
scripts/providers/entire-ledger-provider.mjsMetadata-only Entire checkpoint adapter
scripts/providers/github-provider.mjsRead-only GitHub pull-request, review, comment, status, and check adapter
scripts/lib/git-json-ledger.mjsVersioned, compare-and-swap JSON state on standard Git refs
scripts/lib/review-cycle.mjsDurable GitHub and agent review/fix state machine
scripts/lib/validation-runner.mjsExact-commit, shell-free validation with bounded evidence logs
scripts/tabellio-merge-ready.mjsApproval-gated publication of one exact-validation commit status
scripts/lib/control-ref-transport.mjsApproval-gated, fast-forward-only sharing of review, validation, and Entire refs
scripts/tabellio-preflight.mjsFail-closed GitHub, Entire, hook-trust, and release-main readiness checks
scripts/tabellio-release.mjsIntegrity-bound post-merge control-ref, tag, and GitHub release orchestration
scripts/lib/Git process, repository contract, worktree, and context primitives
scripts/Dependency-free capture, writer, and validators
examples/Minimal valid context, evidence, review, validation, stack, and ledger fixtures
templates/Pull request checklist for evidence-backed review
docs/Setup, schema, workflow model, Codex review, tooling stack, and research grounding

Quick Start

Enable the required ledger, initialize stacks, and validate the canonical platform contract:

entire enable --agent codex --project
git-spice repo init
npm run tabellio:platform:check
node scripts/tabellio-validate.mjs run --repo . --commit HEAD --manifest tabellio.validation.json

Configure Entire's supported strategy_options.checkpoint_remote in .entire/settings.json to target the private GitHub control repository, and keep strategy_options.push_sessions false. Tabellio preflight fails closed when the effective checkpoint remote differs from the platform control remote or automatic checkpoint pushing could bypass release approval.

Use gate in CI. It persists the same exact-head result but exits non-zero unless the final decision is passed:

tabellio-validate gate --repo . --repo-id github.com/owner/repository --base main --commit HEAD --manifest tabellio.validation.json

Plan an integrity-bound Tabellio / exact-head-validation status from that exact validation:

tabellio-merge-ready plan \
--repo . \
--commit HEAD \
--out /secure/operator/status-intent.json

Publishing requires a separate short-lived approval and scoped GitHub credential. The status proves only that the committed validation manifest passed for that head; review clearance, other checks, policy, and merge authority remain separate. See Exact-head validation status.

Validation worktrees and isolated home directories use private system-temporary sessions. --workspace-root /absolute/external/path may select another external parent; repository-internal and .git/** paths are rejected.

Keep origin limited to ordinary code branches and tags. Configure a separate private GitHub repository under another remote name before publishing control refs. The transport refuses to target origin.

Before agent or release work, run:

node scripts/tabellio-preflight.mjs --profile agent
node scripts/tabellio-preflight.mjs --profile release

Hook trust failures identify the exact Codex /hooks action required. Release profile additionally requires clean main equal to origin/main.

Before merging a release-capable pull request, synchronize the durable review cycle and require exact-head readiness:

tabellio-review gate \
--repo . \
--repo-id github.com/owner/repository \
--owner owner \
--remote-repo repository \
--number 42 \
--token-file /secure/path/github-token \
--actor pre-merge-gate

The gate exits non-zero for untriaged feedback, unpublished fixes, failed or pending checks, missing exact-head validation, or a pull request that is already merged or closed. Merge approval remains a separate human action.

Validate the bundled fixture:

node scripts/check-tabellio-evidence-envelope.mjs --evidence examples/tabellio-evidence/minimal-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence examples/tabellio-evidence/minimal-evidence.json

Generate evidence from the current Git state:

node scripts/write-tabellio-evidence-envelope.mjs --out tabellio-pr-evidence.json
node scripts/check-tabellio-evidence-envelope.mjs --evidence tabellio-pr-evidence.json
node scripts/check-tabellio-external-actions.mjs --evidence tabellio-pr-evidence.json

Capture GitHub-bound context first, then bind evidence to it:

node scripts/capture-tabellio-context.mjs \
--repo . \
--repo-id IntelIP/Tabellio \
--base main \
--head HEAD \
--out tabellio-context.json
node scripts/check-tabellio-context.mjs --context tabellio-context.json
node scripts/write-tabellio-evidence-envelope.mjs \
--context tabellio-context.json \
--out tabellio-pr-evidence.json

Context capture requires an Entire checkpoint by default. For legacy Git-note repositories during migration, pass --ledger git-note explicitly.

Run the local agent lifecycle:

node scripts/tabellio-run.mjs start \
--run-id run-42 \
--repo . \
--base main \
--task-summary "Add deterministic import validation"# Edit and commit inside the returned workspace path, then:
node scripts/tabellio-run.mjs checkpoint --run-id run-42 --repo . --summary "Implementation committed"
node scripts/tabellio-run.mjs finish --run-id run-42 --repo . -- npm test
node scripts/tabellio-run.mjs promote --run-id run-42 --repo .

See Agent run lifecycle for state and failure behavior. See Product validation for acceptance contracts, typed evidence, cost gates, and repository adapters.

Package scripts:

npm run check
npm run tabellio:run -- status --run-id run-42
npm run tabellio:run:example:check
npm run tabellio:stack -- --repo . --repo-id IntelIP/Tabellio --out tabellio-stack.json
npm run tabellio:stack:check
npm run tabellio:stack:operation:example:check
npm run tabellio:review:example:check
npm run tabellio:validate:example:check
npm run tabellio:ledger -- --repo . --repo-id IntelIP/Tabellio --base main --head HEAD --out tabellio-ledger.json
npm run tabellio:ledger:check
npm run tabellio:context:capture
npm run tabellio:context:check
npm run tabellio:evidence:write
npm run tabellio:evidence:check
npm run tabellio:external-actions:check

Protected Action Classes

These actions require explicit approval before attempted execution:

  • deployment
  • database migration
  • infrastructure change
  • DNS or hosting change
  • billing or live-money action
  • credentialed provider read
  • secret-value read
  • destructive workspace action

The external-action checker fails when an action is marked attempted: true without approved: true.

Docs

License

Apache-2.0. See LICENSE and NOTICE.

Releases

Packages

Contributors

Languages