{"id":34599124,"url":"https://github.com/flyingrobots/wesley","last_synced_at":"2026-05-14T06:07:22.883Z","repository":{"id":320141920,"uuid":"1049014142","full_name":"flyingrobots/wesley","owner":"flyingrobots","description":"Wesley: The Data Layer Compiler. GraphQL in, provably safe Postgres out - with tests!  Zero-downtime. Zero drift. Go ahead, deploy on a Friday.","archived":false,"fork":false,"pushed_at":"2025-12-19T07:09:27.000Z","size":5235,"stargazers_count":0,"open_issues_count":230,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-19T19:08:03.348Z","etag":null,"topics":["cli-tool","compiler","data-layer","graphql","migrations","pgtap","rls","schema-first","sha-lock","supabase","testing","typescript","wesley","zero-downtime","zod"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flyingrobots.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":"docs/governance/labels.md","roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-09-02T11:09:19.000Z","updated_at":"2025-11-01T20:31:46.000Z","dependencies_parsed_at":"2025-10-22T07:24:47.463Z","dependency_job_id":"64fa3ae4-8be2-4004-ac2f-4410372e929c","html_url":"https://github.com/flyingrobots/wesley","commit_stats":null,"previous_names":["flyingrobots/wesley"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/flyingrobots/wesley","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingrobots%2Fwesley","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingrobots%2Fwesley/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingrobots%2Fwesley/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingrobots%2Fwesley/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flyingrobots","download_url":"https://codeload.github.com/flyingrobots/wesley/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingrobots%2Fwesley/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28002250,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli-tool","compiler","data-layer","graphql","migrations","pgtap","rls","schema-first","sha-lock","supabase","testing","typescript","wesley","zero-downtime","zod"],"created_at":"2025-12-24T12:07:27.388Z","updated_at":"2026-05-09T08:13:05.593Z","avatar_url":"https://github.com/flyingrobots.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- docs-truth: status=experimental owner=@flyingrobots --\u003e\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"https://github.com/user-attachments/assets/0c03a527-dc36-466f-a212-a3a24731acf8\" /\u003e\n\u003c/div\u003e\n\nA schema-first compiler kernel for trustworthy change. Wesley turns authored\nGraphQL into derived artifacts through explicit target modules, while keeping\nsource identity, lowering, artifact emission, and evidence separate.\n\nWesley itself is the core `GraphQL -\u003e whatever` compiler and assurance\ntoolchain. The `whatever` is brought by modules outside the core repo. Domain\nsystems such as Continuum and PostgreSQL are not Wesley product surfaces; their\ngenerators, policies, witnesses, and runtime conventions belong in external\nmodule repos such as Continuum itself or `wesley-postgres`.\n\n## Entry Point\n\nStart with the Rust-native surface:\n\n```bash\ncargo xtask preflight\ncargo wesley --help\n```\n\nWesley currently has legacy Node packages and a newer Rust kernel in the same\nrepository. They are not equal product fronts.\n\n- `crates/wesley-core/` is the compiler truth for new work.\n- `crates/wesley-cli/` is the native `wesley` command for Rust-backed compiler\n  facts.\n- `xtask/` is repository automation.\n- `packages/` is the historical Node toolchain: old commands, generators,\n  hosts, module loading, evidence tooling, package tests, and docs support.\n- `package.json` keeps that old Node workspace installable; it is not the\n  product entry point.\n\nFor the full map, read [ENTRYPOINTS.md](./docs/ENTRYPOINTS.md).\n\n## Why Wesley?\n\nUnlike traditional code-generators that treat schemas as suggestions, Wesley treats the schema as the sovereign system of record.\n\n- **Contract Sovereignty**: Authored GraphQL SDL is the single source of truth. Generated artifacts are derived surfaces that are never allowed to become peer authorities.\n- **Admission Discipline**: Authored source, lowered IR, realization shells, and witness output are kept distinct so Wesley can certify explicit properties without overstating runtime truth.\n- **Module-Brought Targets**: Wesley owns parsing, lowering, dispatch, artifact bookkeeping, and assurance plumbing. Modules own target semantics, generators, policy, witness scopes, and release conventions.\n- **Evidence-Backed Change**: Toolchain surfaces can produce machine-readable evidence that a proposed artifact bundle is coherent with the authored source and selected modules.\n- **Cross-Language Inevitability**: By generating bit-exact codecs and IR envelopes, Wesley prevents the \"adapter spaghetti\" that typically causes multi-repo platforms to rot.\n- **Local-First Operation**: The compiler and witness suite run entirely on the local developer workstation, ensuring that contract verification is part of the fast inner-loop.\n\n## Quick Start\n\n### 1. Verify The Rust Workspace\n```bash\ncargo xtask preflight\n```\n\n### 2. Inspect The Native Command\n```bash\ncargo wesley --help\n```\n\nThe native command can lower schema SDL to L1 IR, compute schema hashes, diff\nschema structure, list schema root operations, emit Rust models and TypeScript\ndeclarations with root operation bindings, resolve operation selections, and\nextract operation directive arguments.\n\n```bash\ncargo wesley schema lower --schema test/fixtures/ir-parity/small-schema.graphql --json\ncargo wesley schema hash --schema test/fixtures/ir-parity/small-schema.graphql\ncargo wesley schema operations --schema test/fixtures/consumer-models/jedit-hot-text-runtime.graphql --json\ncargo wesley schema diff --old old.graphql --new new.graphql --format summary --exit-code\ncargo wesley schema diff --schema schema.graphql --against HEAD --format summary\ncargo wesley emit rust --schema test/fixtures/consumer-models/jedit-hot-text-runtime.graphql --out generated/model.rs\ncargo wesley emit typescript --schema test/fixtures/consumer-models/jedit-hot-text-runtime.graphql --out generated/types.ts\n```\n\nEcho-owned tooling owns Echo-specific footprint honesty checks.\n\n## What's New in v0.0.2\n\nWesley's `0.0.2` alpha hardens the Rust-native crates.io release path. The\nGitHub Actions release workflow now keeps temporary GitHub Release notes and\ndraft-state files outside the repository checkout, so the real-publish\nclean-worktree guard can run immediately before registry mutation.\n\nThe native alpha line still centers the Rust front door: it lowers GraphQL SDL\nto domain-empty L1 IR, hashes schemas, diffs schema structure, lists schema root\noperations, emits Rust and TypeScript model/operation bindings, resolves\noperation selection paths, and extracts operation directive arguments without\nrequiring an npm entry point. See [CHANGELOG.md](./CHANGELOG.md) for the full\nrelease notes.\n\n## Rust-Native Front Door\n\nWesley core work now starts from Cargo.\n\n- `cargo wesley ...` runs the native Rust `wesley` binary from\n  `crates/wesley-cli`.\n- `cargo xtask ...` runs repository automation from `xtask`.\n- `cargo xtask docs-check` runs Rust-native documentation hygiene checks.\n- `cargo xtask preflight` is the normal Rust-native health check: docs checks,\n  Rust tests, and native CLI help.\n- `cargo xtask release-check` builds the optimized native binary and packages\n  the Rust library crate without publishing anything.\n- `cargo xtask legacy-preflight` runs the historical npm/package preflight\n  while the old package surfaces are being retired.\n\nThe distinction matters: `wesley` is the user-facing compiler command, while\n`xtask` is for maintaining this repository. Avoid adding new core workflows to\n`pnpm wesley`; new compiler behavior should land in Rust first.\n\n### Extending Wesley\n\nExtend Wesley at the narrowest boundary that owns the meaning:\n\n- Add generic GraphQL compiler facts in `crates/wesley-core`.\n- Add user-facing Rust commands in `crates/wesley-cli`.\n- Add generic Rust or TypeScript projections in the existing Rust emitter crates\n  when the projection is domain-empty and broadly reusable.\n- Put domain targets, policies, witnesses, and runtime conventions in external\n  modules or crates owned by that domain.\n\nThe practical extension guide is [docs/guides/extending.md](./docs/guides/extending.md).\n\n### Native Install And Release\n\nInstall the published alpha native binary from crates.io.\n```bash\ncargo install wesley-cli --version 0.0.2\nwesley --help\n```\n\nInstall the local native binary directly from the Rust workspace when working\ninside this checkout.\n```bash\ncargo install --locked --path crates/wesley-cli\nwesley --help\n```\n\nBefore cutting or attaching a native release artifact, run the Rust release\ncheck.\n```bash\ncargo xtask release-check\n./target/release/wesley --help\n```\n\nThis path does not require an npm entry point. The native CLI is distributed as\nthe `wesley-cli` crate on crates.io, which installs a `wesley` binary. The\nhistorical Node packages remain available only for legacy package projections\nand surrounding tooling until those surfaces are extracted, retired, or\nreimplemented in Rust.\n\n### Legacy Repository Tooling Preflight\nThe repo still carries historical Node package tooling while the Rust-native\nfront door takes over. Use preflight when changing docs, package boundaries, or\nlegacy package surfaces.\n```bash\npnpm install\ncargo xtask legacy-preflight\n```\n\n### Legacy Package Projection\nGenerate TypeScript from an authored GraphQL schema.\n```bash\npnpm wesley typescript \\\n  --schema ./schema.graphql \\\n  --out-file ./generated/types.generated.ts\n```\n\n### Legacy Target Module Loading\nSelect target behavior explicitly from project config or `WESLEY_MODULES`.\n```bash\nWESLEY_MODULES=/path/to/my-wesley-module.mjs pnpm wesley --help\n```\nModules are trusted Node code. Use `WESLEY_DISABLE_MODULES=1` for a no-module\ndiagnostic run, or set `WESLEY_MODULE_ALLOWLIST` to path-delimited config/module\npaths in CI environments that must refuse unapproved module imports.\n\nThe current repo still carries historical Continuum and PostgreSQL surfaces.\nThey are extraction debt, not Wesley identity. New target semantics should land\nin external modules rather than in this repository.\n\n## Overall Status\n\n\u003c!-- BEGIN:OVERALL_STATUS --\u003e\nStage: MVP  \\\nProgress: 61% → Alpha\n\u003c!-- END:OVERALL_STATUS --\u003e\n\n## Package Matrix\n\n\u003c!-- BEGIN:PACKAGE_MATRIX --\u003e\n| Package | Status | Stage | Progress | CI | Notes |\n| --- | --- | --- | --- | --- | --- |\n| `@wesley/core` | Active | MVP | 45% → Alpha | — | Pure domain logic, no Node builtins |\n| `@wesley/cli` | Active | Alpha | 50% → Beta | — | CLI + Bats suites |\n| `@wesley/host-node` | Active | MVP | 50% → Alpha | — | Node adapters + binary |\n| `@wesley/host-browser` | Experimental | MVP | 40% → Alpha | — | Pure ESM; in-memory FS; minimal parser; smoke-level only |\n| `@wesley/generator-js` | Active | MVP | 50% → Alpha | — | TS/Zod emitters |\n| `@wesley/generator-vue` | Experimental | MVP | 0% → Alpha | — | Vue-facing TS/composable emitters |\n| `@wesley/holmes` | Active | Alpha | 50% → Beta | — | Evidence scoring |\n| `@wesley/runtime-node` | Active | MVP | 0% → Alpha | — | Shared Node runtime adapters |\n| `@wesley/tasks` | Active | MVP | 50% → Alpha | — | Planner utilities |\n| `@wesley/host-deno` | Experimental | Alpha | 50% → Beta | — | Deno host runtime (demo) |\n| `@wesley/host-bun` | Experimental | Alpha | 50% → Beta | — | Bun host runtime (demo) |\n| `@wesley/scaffold-multitenant` | Too soon | Prototype | 50% → MVP | — | Early scaffold, no CI yet |\n| `@wesley/test-fixtures` | Active | MVP | 20% → Alpha | — | Private shared fixtures + schema builders |\n\u003c!-- END:PACKAGE_MATRIX --\u003e\n\n## Documentation\n\n- **[Guide](./docs/GUIDE.md)**: Orientation, the fast path, and compiler usage.\n- **[Crates.io Release](./docs/CRATES_IO_RELEASE.md)**: Native Rust alpha\n  package set and publish order.\n- **[Wesley Glossary](./docs/WESLEY_GLOSSARY.md)**: The main nouns, layers, and boundary terms for Wesley and its surrounding toolchain.\n- **[Advanced Guide](./docs/ADVANCED_GUIDE.md)**: Deep dives into the IR model, custom directives, and the \"Holmes\" policy engine.\n- **[Architecture](./docs/ARCHITECTURE.md)**: The authoritative system map (Base Platform, Modules, Workspace, and bundle pipeline).\n- **[Extending Wesley](./docs/guides/extending.md)**: How to add Rust compiler\n  behavior, native CLI surfaces, emitter projections, or external modules\n  without breaking the core boundary.\n- **[Realization Admission and Witness](./docs/design/0004-realization-admission-and-witness/realization-admission-and-witness.md)**: The release-line doctrine for authored source, IR, realization shells, and bounded witness claims.\n- **[Module Contract](./docs/design/wesley-module-contract.md)**: The boundary between the Wesley compiler kernel and external target modules.\n- **[Module Capability Contract](./docs/design/wesley-module-capability-contract.md)**: The capability surfaces external modules bring to Wesley.\n- **[Extraction Map](./docs/design/wesley-extraction-map.md)**: The currently known wrong-repo domain residue and its intended external homes.\n- **[Vision](./docs/VISION.md)**: Core tenets and the \"Trustworthy Change\" mission.\n- **[Method](./docs/METHOD.md)**: Repo work doctrine and the cycle loop.\n\n---\nBuilt with bit-exact ambition by [FLYING ROBOTS](https://github.com/flyingrobots)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflyingrobots%2Fwesley","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflyingrobots%2Fwesley","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflyingrobots%2Fwesley/lists"}