Skip to content

docs: reclassify Tier 5 -> Tier 2 (Platform) with Tier-5 dashboard surface#110

Merged
chitcommit merged 4 commits into
feat/meta-executors-registryfrom
docs/tier-2-reclassification
Jun 4, 2026
Merged

docs: reclassify Tier 5 -> Tier 2 (Platform) with Tier-5 dashboard surface#110
chitcommit merged 4 commits into
feat/meta-executors-registryfrom
docs/tier-2-reclassification

Conversation

@chitcommit

Copy link
Copy Markdown
Contributor

Stacked follow-on to PR #106 (feat/meta-executors-registry — ADR-001 + executor registry). Documentation-only change that brings the compliance triad and /api/v1/status in line with the ADR-001 amendment that landed in #106.

Summary

  • Reclassify ChittyCommand from Tier 5 (Application) to Tier 2 (Platform) with Tier-5 dashboard surface across CHARTER.md, CHITTY.md, CLAUDE.md.
  • Rewrite RY (Authority) language: sovereign meta-orchestrator (intent execution, sovereignty enforcement, channel fanout) — no longer a pure consumer of upstream data.
  • Add the one real new endpoint from feat(meta): extract executor registry, wire executeIntent, ADR-001 amendment (PR-A) #106 to the API contract: POST /api/v1/intents/:id/execute.
  • Add an Executor Registry subsection in CHARTER.md with canonical URIs (chittycanon://core/services/chittycommand/executors/{intent_type}). Lists update_obligation_status (the only currently registered executor). mercury_payment is flagged as a tracked future executor with REAL-MONEY constraints — explicitly NOT documented as registered until its file lands.
  • Add a Cluster Runtime subsection: daemon is launchd/systemd, NOT a Worker; per-node L-type ChittyIDs register as sub-channels via agent.chitty.cc/api/v1/channels, NOT in the main ChittyRegister service payload.
  • Expand Dependencies with ChittyTrust, ChittyID, chittyagent-orchestrator, chittyagent-tasks, chittyagent-ch1tty. Expand ChittyConnect entry to call out ContextConsciousness + MemoryCloude (forever context) + sensitive-intent secret brokerage.
  • /api/v1/status returns tier: 2, tierSurface: \"Tier 2 (Platform) with Tier-5 dashboard surface\", and a meta.endpoints array. /api/v1/canon updated identically for consistency.
  • MCP tool count reconciled to 50 (counted via grep -nE \"name:\\s*'[a-z_]+'\" src/routes/mcp.ts = 50). CLAUDE.md was already correct; CHARTER/CHITTY had stale "48".

Compliance audit coverage

Per the ChittyOS-compliance audit verdict on this service, this PR addresses items 1, 4, 5, 7, 8:

  1. ✅ Tier classification reflects ADR-001 reclassification
  2. ✅ RY (Authority) language matches new sovereign-meta posture
  3. ✅ API contract enumerates the new meta endpoint
  4. ✅ Cluster daemon explicitly declared as sub-channel surface, not Worker compute
  5. ✅ Dependency graph reflects new upstream surface (Trust/ID/orchestrator/tasks/ch1tty)

Remaining (out of scope for this PR):

  • Item 2: ChittyRegister payload submission — operational, requires re-mint
  • Item 3: real /health dependency probes (db / chittyconnect / daemon-heartbeat) — separate PR
  • Item 6: tail_consumers: [{ service: chittytrack }] — separate observability PR
  • Item 9: ChittyID re-mint from T-type to P-Synthetic — operator action, blocks formal ChittyCertify at Tier 2 (flagged in CHARTER Compliance section)

Not in this PR

  • No business-logic changes. Only /api/v1/status and /api/v1/canon tier values + tierSurface field touched in source.
  • No new routes registered. Intent CRUD (POST /api/v1/intents, GET /api/v1/intents/:id, GET /api/v1/intents, GET /api/v1/executors) is NOT documented because it isn't implemented; per the global no-fake-endpoints rule, those rows will be added when the routes land.
  • No ChittyID re-mint (operator action, flagged in CHARTER).
  • No ChittyRegister submission.
  • No wrangler / deploy / domain changes.
  • ADR-001 itself is untouched (it landed in feat(meta): extract executor registry, wire executeIntent, ADR-001 amendment (PR-A) #106).

Validation

  • npm run typecheck — clean
  • SKIP_INTEGRATION=1 npm test — 15 passed / 12 skipped (integration tests require Neon branch)
  • grep -rn \"Tier 5\\|tier: 5\\|tier 5\" CHARTER.md CHITTY.md CLAUDE.md src/ — no remaining stale references (the only "Tier-5" matches are intentional surface-name uses: "Tier-5 dashboard surface")

Test plan

  • Confirm /api/v1/status returns tier: 2 + tierSurface after deploy
  • Confirm /api/v1/canon returns tier: 2 + tierSurface after deploy
  • Confirm CHARTER/CHITTY/CLAUDE render correctly on GitHub (tables, links to ADR-001)

🤖 Generated with Claude Code

… Tier-5 surface; add meta endpoints and dependencies

Stacked follow-on to PR #106 (ADR-001 + executor registry). Documentation-only
PR that brings the compliance triad and `/api/v1/status` in line with the
ADR-001 amendment that landed on `feat/meta-executors-registry`.

CHARTER.md / CHITTY.md / CLAUDE.md
- Canonical phrasing: "Tier 2 (Platform) with Tier-5 dashboard surface"
  everywhere a tier is declared.
- RY (Authority) row rewritten to reflect sovereignty enforcement + intent
  execution + multi-source ingest. No longer a pure consumer.
- API contract gains the one real new endpoint introduced by #106:
  POST /api/v1/intents/:id/execute. Per the global no-fake-endpoints rule,
  the planned intent CRUD (POST /api/v1/intents, GET .../:id, GET ...,
  GET /api/v1/executors) is NOT documented here because it isn't implemented;
  it will be added when the routes are.
- New Executor Registry table with canonical URI
  chittycanon://core/services/chittycommand/executors/{intent_type}. Lists
  the one executor that actually self-registers today
  (update_obligation_status). mercury_payment is flagged as a tracked future
  executor with REAL-MONEY constraints (fresh autonomous sovereignty,
  USD 500 per-intent cap) and explicitly NOT documented as registered.
- New Cluster Runtime section: daemon is launchd/systemd, NOT a Worker;
  per-node L-type ChittyIDs register as sub-channels via
  agent.chitty.cc/api/v1/channels, NOT in the main ChittyRegister payload.
- Dependencies expanded: ChittyTrust, ChittyID, chittyagent-orchestrator,
  chittyagent-tasks, chittyagent-ch1tty added. ChittyConnect entry expanded
  to call out ContextConsciousness + MemoryCloude (forever context) and
  sensitive-intent secret brokerage.
- Compliance section flags the ChittyID re-mint as required operator
  action (T → P-Synthetic) and explicitly defers /health real-probes and
  tail_consumers wiring to separate PRs.
- MCP tool count reconciled to 50 (CLAUDE.md was already correct; CHARTER/
  CHITTY updated from stale "48").

src/index.ts
- /api/v1/status returns tier: 2 plus tierSurface phrasing and a
  meta.endpoints array listing the registered intent-execute route.
  No other route, middleware, or handler touched.

src/routes/meta.ts
- /api/v1/canon returns tier: 2 + tierSurface so the public canon view
  matches /status and the docs. Same handler signature; no behavior change.

Not in this PR (deferred):
- Real-dependency /health probes (separate PR).
- tail_consumers wiring to chittytrack (separate observability PR).
- ChittyRegister payload submission (operator action; blocked on re-mint).
- Re-mint of service ChittyID as P-Synthetic (operator action).
- Intent CRUD endpoints and /api/v1/executors enumeration (future PRs).

Compliance coverage:
- Addresses: tier reclassification, RY language, meta endpoint surface,
  executor URI registry, dependency expansion, cluster sub-channel
  declaration (items 1, 4, 5, 7, 8 of the registration-readiness audit).
- Remaining (out of scope): registration submission (item 2, operational),
  real /health (item 3, separate PR), tail_consumers (item 6, separate PR),
  P-type ChittyID re-mint (item 9, operator action).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 4, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
chittycommand f67f303 Jun 04 2026, 01:00 PM

@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 2275b8be-1347-4c41-9766-bcd325f2e136

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/tier-2-reclassification

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown
  1. @coderabbitai review
  2. @copilot review
  3. @codex review
  4. @claude review
    Adversarial review request: evaluate security, policy bypass paths, regression risk, and merge-gating bypass attempts.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dade6fe8de

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread CHARTER.md Outdated
- **Organization**: CHITTYOS
- **Domain**: command.chitty.cc

Per [ADR-001](docs/architecture/ADR-001-meta-orchestrator-extension.md), ChittyCommand is reclassified from Tier 5 Application to **Tier 2 (Platform) with Tier-5 dashboard surface**. The platform tier covers the meta-orchestrator (`meta/`), executor registry, sovereignty gate, and cluster daemon (`daemon/`). The Tier-5 surface is the existing user-facing dashboard + ActionAgent + MCP at `command.chitty.cc`. Both run from the same worker; the dashboard is one consumer of the platform among many.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Correct the worker placement in classification

This sentence says the platform daemon and Tier-5 surface “both run from the same worker,” but the new Cluster Runtime section added below states the persistent daemon/ is not a Cloudflare Worker and runs as a supervised launchd/systemd process on ChittyServ nodes. In the compliance charter this gives operators two conflicting deployment models for the Tier-2 reclassification, and following the classification text would incorrectly model the daemon as part of the Worker deploy artifact.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fixed in 4eba80a. Charter Classification now explicitly states the Worker (src/, meta/ HTTP, dashboard, ActionAgent, MCP) and the persistent daemon (daemon/, supervised launchd/systemd, not a Worker) are two distinct runtimes that share the same Neon DB — removing the contradiction with the Cluster Runtime section.

Addresses Codex P2 on PR #110: the previous wording said the Tier-2
platform and Tier-5 surface 'both run from the same worker', which
contradicts the Cluster Runtime section stating daemon/ runs as a
supervised launchd/systemd process, not as a Worker.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown
  1. @coderabbitai review
  2. @copilot review
  3. @codex review
  4. @claude review
    Adversarial review request: evaluate security, policy bypass paths, regression risk, and merge-gating bypass attempts.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown
  1. @coderabbitai review
  2. @copilot review
  3. @codex review
  4. @claude review
    Adversarial review request: evaluate security, policy bypass paths, regression risk, and merge-gating bypass attempts.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

@chitcommit chitcommit merged commit 747a995 into feat/meta-executors-registry Jun 4, 2026
7 of 9 checks passed
@chitcommit chitcommit deleted the docs/tier-2-reclassification branch June 4, 2026 12:59
@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown
  1. @coderabbitai review
  2. @copilot review
  3. @codex review
  4. @claude review
    Adversarial review request: evaluate security, policy bypass paths, regression risk, and merge-gating bypass attempts.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e77033e9f4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

The actual injection uses `op run` per the operator manifest. The template below shows the request shape — do NOT run it verbatim with raw env vars.

```bash
jq '.registrationToken="$CHITTY_REGISTER_TOKEN" | .service.chittyId="$NEW_CHITTYID"' \

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Pass jq variables with --arg before submission

If an operator follows the production instruction below to wrap this command under op run, this jq filter writes the literal strings $CHITTY_REGISTER_TOKEN and $NEW_CHITTYID into the JSON; shell variables are not expanded inside the single-quoted jq program, and jq --help shows --arg name value is the supported way to bind string values into $name. That means the registration payload would be submitted with the placeholder token/id rather than the minted P-Synthetic ChittyID, causing registration rejection or bad service metadata.

Useful? React with 👍 / 👎.

{ "path": "/api/v1/connect/discover", "method": "POST", "description": "Resolve service URL via ChittyConnect", "authenticated": true },
{ "path": "/api/v1/ledger/evidence", "method": "GET", "description": "List evidence for a case via ChittyLedger", "authenticated": true },
{ "path": "/api/v1/ledger/record-custody", "method": "POST", "description": "Record custody entry for an evidence_id", "authenticated": true },
{ "path": "/api/v1/timeline/:caseId", "method": "GET", "description": "Unified case timeline (facts, deadlines, disputes, docs)", "authenticated": true },

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Register the implemented timeline route

This payload registers /api/v1/timeline/:caseId, but the route mounted under /api/v1 is timelineRoutes.get('/cases/:caseId/timeline', ...) in src/routes/timeline.ts:20 via src/index.ts:162, so clients discovering this registration entry will hit a 404. The payload should advertise /api/v1/cases/:caseId/timeline unless the worker route is changed too.

Useful? React with 👍 / 👎.

Comment on lines +28 to +30
{ "path": "/api/v1/litigation/synthesize", "method": "POST", "description": "AI fact synthesis from raw notes", "authenticated": true },
{ "path": "/api/v1/litigation/draft", "method": "POST", "description": "AI email drafting from synthesized facts", "authenticated": true },
{ "path": "/api/v1/litigation/qc", "method": "POST", "description": "AI risk scan of draft vs source notes", "authenticated": true },

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Use the mounted litigation prefix

These registration entries put the litigation endpoints under /api/v1/litigation/*, but src/index.ts:147 mounts litigationRoutes at /api/litigation and the route file defines paths such as post('/synthesize') in src/routes/litigation.ts:28. As submitted, the registry would publish three authenticated endpoints that do not exist on the worker.

Useful? React with 👍 / 👎.

{ "path": "/api/v1/jobs", "method": "POST", "description": "Enqueue scrape job", "authenticated": true },
{ "path": "/api/v1/jobs/:id", "method": "GET", "description": "Scrape job details", "authenticated": true },
{ "path": "/api/v1/jobs/:id/retry", "method": "POST", "description": "Retry failed scrape job", "authenticated": true },
{ "path": "/api/v1/jobs/dead-letters", "method": "GET", "description": "Dead letter queue", "authenticated": true },

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Publish the real dead-letter path

The implemented dead-letter route is mounted under /api/v1 and defined as jobRoutes.get('/jobs/queue/dead-letter', ...) in src/routes/jobs.ts:39, not /api/v1/jobs/dead-letters. Registering this path will make the service catalog point operators to a 404 for dead-letter inspection.

Useful? React with 👍 / 👎.

{ "path": "/api/v1/jobs/:id", "method": "GET", "description": "Scrape job details", "authenticated": true },
{ "path": "/api/v1/jobs/:id/retry", "method": "POST", "description": "Retry failed scrape job", "authenticated": true },
{ "path": "/api/v1/jobs/dead-letters", "method": "GET", "description": "Dead letter queue", "authenticated": true },
{ "path": "/api/dashboard/summary", "method": "GET", "description": "Dashboard summary with urgency scores", "authenticated": true },

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Advertise the existing dashboard endpoint

dashboardRoutes only defines get('/') in src/routes/dashboard.ts:8 and is mounted at /api/dashboard in src/index.ts:132; there is no /summary child route. Registering /api/dashboard/summary means registry consumers will call a non-existent dashboard endpoint instead of the implemented aggregate view.

Useful? React with 👍 / 👎.

Comment on lines +44 to +45
{ "path": "/api/cashflow", "method": "GET", "description": "Cash flow analysis and projections", "authenticated": true },
{ "path": "/api/sync", "method": "POST", "description": "Manual data sync trigger", "authenticated": true },

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Point cashflow and sync entries at concrete routes

The worker mounts cashflowRoutes at /api/cashflow and syncRoutes at /api/sync, but those routers only expose concrete children such as GET /projections (src/routes/cashflow.ts:10) and POST /trigger/:source (src/routes/sync.ts:20). Registering bare GET /api/cashflow and POST /api/sync will publish two endpoints that return 404 for catalog-driven clients.

Useful? React with 👍 / 👎.

"version": "0.1.0",
"baseUrl": "https://command.chitty.cc",
"endpoints": [
{ "path": "/health", "method": "GET", "description": "Real-dependency health probe (db + chittyconnect + daemon heartbeat)", "authenticated": false },

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Don't claim dependency-aware health before it exists

This new registration payload describes /health as a real dependency probe for db, ChittyConnect, and daemon heartbeat, but the worker still returns only the static JSON in src/index.ts:96-101. If this payload is submitted before the separate health-probe work lands, registry and certification checks will treat a simple liveness response as proof that Tier-2 dependencies are healthy.

Useful? React with 👍 / 👎.

chitcommit added a commit that referenced this pull request Jun 10, 2026
…rface (#110)

* docs(charter,chitty,claude): reclassify Tier 5 → Tier 2 platform with Tier-5 surface; add meta endpoints and dependencies

Stacked follow-on to PR #106 (ADR-001 + executor registry). Documentation-only
PR that brings the compliance triad and `/api/v1/status` in line with the
ADR-001 amendment that landed on `feat/meta-executors-registry`.

CHARTER.md / CHITTY.md / CLAUDE.md
- Canonical phrasing: "Tier 2 (Platform) with Tier-5 dashboard surface"
  everywhere a tier is declared.
- RY (Authority) row rewritten to reflect sovereignty enforcement + intent
  execution + multi-source ingest. No longer a pure consumer.
- API contract gains the one real new endpoint introduced by #106:
  POST /api/v1/intents/:id/execute. Per the global no-fake-endpoints rule,
  the planned intent CRUD (POST /api/v1/intents, GET .../:id, GET ...,
  GET /api/v1/executors) is NOT documented here because it isn't implemented;
  it will be added when the routes are.
- New Executor Registry table with canonical URI
  chittycanon://core/services/chittycommand/executors/{intent_type}. Lists
  the one executor that actually self-registers today
  (update_obligation_status). mercury_payment is flagged as a tracked future
  executor with REAL-MONEY constraints (fresh autonomous sovereignty,
  USD 500 per-intent cap) and explicitly NOT documented as registered.
- New Cluster Runtime section: daemon is launchd/systemd, NOT a Worker;
  per-node L-type ChittyIDs register as sub-channels via
  agent.chitty.cc/api/v1/channels, NOT in the main ChittyRegister payload.
- Dependencies expanded: ChittyTrust, ChittyID, chittyagent-orchestrator,
  chittyagent-tasks, chittyagent-ch1tty added. ChittyConnect entry expanded
  to call out ContextConsciousness + MemoryCloude (forever context) and
  sensitive-intent secret brokerage.
- Compliance section flags the ChittyID re-mint as required operator
  action (T → P-Synthetic) and explicitly defers /health real-probes and
  tail_consumers wiring to separate PRs.
- MCP tool count reconciled to 50 (CLAUDE.md was already correct; CHARTER/
  CHITTY updated from stale "48").

src/index.ts
- /api/v1/status returns tier: 2 plus tierSurface phrasing and a
  meta.endpoints array listing the registered intent-execute route.
  No other route, middleware, or handler touched.

src/routes/meta.ts
- /api/v1/canon returns tier: 2 + tierSurface so the public canon view
  matches /status and the docs. Same handler signature; no behavior change.

Not in this PR (deferred):
- Real-dependency /health probes (separate PR).
- tail_consumers wiring to chittytrack (separate observability PR).
- ChittyRegister payload submission (operator action; blocked on re-mint).
- Re-mint of service ChittyID as P-Synthetic (operator action).
- Intent CRUD endpoints and /api/v1/executors enumeration (future PRs).

Compliance coverage:
- Addresses: tier reclassification, RY language, meta endpoint surface,
  executor URI registry, dependency expansion, cluster sub-channel
  declaration (items 1, 4, 5, 7, 8 of the registration-readiness audit).
- Remaining (out of scope): registration submission (item 2, operational),
  real /health (item 3, separate PR), tail_consumers (item 6, separate PR),
  P-type ChittyID re-mint (item 9, operator action).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(charter): clarify Worker vs daemon runtime split in Classification

Addresses Codex P2 on PR #110: the previous wording said the Tier-2
platform and Tier-5 surface 'both run from the same worker', which
contradicts the Cluster Runtime section stating daemon/ runs as a
supervised launchd/systemd process, not as a Worker.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(registration): draft chittycommand Tier-2 registration payload + submission runbook (#111)

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: chitcommit <noreply@chitty.cc>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant