Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
60b9507
feat: add earsyntax toolkit monorepo
omermorad Jul 29, 2026
835efa0
style: apply prettier formatting across the repo
omermorad Jul 29, 2026
4ea9b4f
ci: replace blackbox workflows with earsyntax pipeline
omermorad Jul 29, 2026
ad9c744
ci: build before lint and test jobs
omermorad Jul 29, 2026
e3ec321
chore: pin node 22 via engines fields and .nvmrc
omermorad Jul 29, 2026
4f0b955
docs: freeze host-native contracts, findings model, profile schema, i…
omermorad Aug 1, 2026
0db64dd
feat(core): diagnostic registry, findings model, profile schema, core…
omermorad Aug 1, 2026
2ea07bc
feat(core): add host-native diagnostic codes and dialect options
omermorad Aug 1, 2026
4f5d899
feat(core): strict grammar rulings, dialect options, host profile fix…
omermorad Aug 1, 2026
ac2bd3b
feat(extract): profile-driven locator pipeline and extractor hardening
omermorad Aug 1, 2026
513a30f
fix(extract): facade candidate shape, block locator ears-only capture
omermorad Aug 1, 2026
d01361c
feat(cli): host-native command shell with stateless validate and extract
omermorad Aug 2, 2026
eb26670
feat(cli): instructions, init, doctor, explain, profiles, sarif output
omermorad Aug 2, 2026
50ea5ab
fix(core): executable registry examples and host-native demo script
omermorad Aug 2, 2026
3b241d2
test: add conformance target proving the alpha facade
omermorad Aug 2, 2026
b834a97
docs: rewrite for the host-native CLI
omermorad Aug 2, 2026
80f0e6e
style: apply prettier across the repo
omermorad Aug 2, 2026
1e8adc3
chore: remove dead code and stale references after host-native pivot
omermorad Aug 2, 2026
596c02d
refactor: remove duplicate registries and legacy extract surface
omermorad Aug 2, 2026
6af836b
remove
omermorad Aug 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
42 changes: 42 additions & 0 deletions .dependency-cruiser.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/**
* Architecture rules for earsyntax.
*
* Package boundaries (centripetal: outer packages depend inward, never outward):
*
* @earsyntax/core parser, AST, linter, diagnostics. No runtime deps.
* @earsyntax/cli-contract shared report output contracts. Depends on core types.
* @earsyntax/extract requirement extraction from files. Depends on core types.
* @earsyntax/cli command-line tool. Depends on core, extract, cli-contract.
*
* core must never depend on extract, cli-contract, or cli.
*
* @type {import('dependency-cruiser').IConfiguration}
*/
module.exports = {
forbidden: [
{
name: 'no-circular',
severity: 'error',
comment: 'Circular dependencies are not allowed.',
from: {},
to: { circular: true },
},
{
name: 'core-stays-pure',
severity: 'error',
comment:
'packages/core is the deterministic parser core and must not depend on the extract, cli-contract, or cli packages.',
from: { path: '^packages/core/src/' },
to: { path: '^packages/(extract|cli-contract|cli)/src/' },
},
],
options: {
doNotFollow: { path: 'node_modules' },
tsConfig: { fileName: 'tsconfig.json' },
tsPreCompilationDeps: true,
enhancedResolveOptions: {
exportsFields: ['exports'],
conditionNames: ['import', 'require', 'node', 'default'],
},
},
};
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @omermorad
1 change: 1 addition & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
github: [omermorad]
30 changes: 30 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
name: Bug report
about: Report a problem with the earsyntax toolkit
title: '[bug] '
labels: bug
assignees: ''
---

## Describe the bug

A clear description of what the bug is.

## Reproduction

Steps or a minimal repo that reproduces the issue.

## Expected behavior

What you expected to happen.

## Environment

- earsyntax package + version (e.g. `@earsyntax/core`):
- Node version:
- Package manager (npm/pnpm/yarn) + version:
- OS:

## Additional context

Logs, diagnostics output, or anything else relevant.
23 changes: 23 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
name: Feature request
about: Suggest an idea for the earsyntax toolkit
title: '[feature] '
labels: enhancement
assignees: ''
---

## Problem

What problem are you trying to solve? What is the use case?

## Proposed solution

What you'd like to happen.

## Alternatives considered

Other approaches you've thought about.

## Additional context

Anything else that helps explain the request.
24 changes: 24 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
version: 2
updates:
- package-ecosystem: npm
directory: '/'
schedule:
interval: weekly
open-pull-requests-limit: 10
commit-message:
prefix: chore
include: scope
groups:
eslint:
patterns:
- 'eslint'
- 'eslint-*'
- '@typescript-eslint/*'
- 'typescript-eslint'

- package-ecosystem: github-actions
directory: '/'
schedule:
interval: weekly
commit-message:
prefix: ci
28 changes: 28 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<!--
PR title MUST be Conventional Commits prefixed (enforced by the "PR Title" check):
feat(core): add catalog glob matcher
fix(runners/bdd): resolve catalog source for scenario specs
Types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert
-->

## Summary

<!-- What does this PR change and why? -->

## Type of change

- [ ] Bug fix (non-breaking)
- [ ] New feature (non-breaking)
- [ ] Breaking change
- [ ] Docs / tooling only

## Checklist

- [ ] Commits follow Conventional Commits (enforced by commitlint)
- [ ] `pnpm lint` and `pnpm typecheck` pass
- [ ] `pnpm build` succeeds
- [ ] Tests added or updated where relevant

## Notes for reviewers

<!-- Anything reviewers should pay special attention to. -->
172 changes: 172 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
name: Continuous Integration

on:
pull_request:
branches:
- main
- next

permissions:
contents: read

env:
PNPM_VERSION: 9.15.4
NODE_VERSION: 22.x

jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

# Typed ESLint resolves @earsyntax/* imports through each package's
# exports map (dist/*.d.ts), which only exists after a build.
- name: Build
run: pnpm build

- name: Lint
run: pnpm lint

format:
name: Format Check
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Format check
run: pnpm format:check

typecheck:
name: Typecheck
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Typecheck (build)
run: pnpm typecheck

- name: Typecheck (tests)
run: pnpm typecheck:tests

build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build
run: pnpm build

test:
name: Test
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

# Cross-package test imports resolve @earsyntax/* through the exports
# map (dist/*.d.ts), which only exists after a build.
- name: Build
run: pnpm build

- name: Test
run: pnpm test

deps:
name: Dependency Boundaries
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Check dependency boundaries
run: pnpm check:deps
50 changes: 50 additions & 0 deletions .github/workflows/pr-title.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: PR Title

# Enforces a Conventional Commits prefix on every pull request title, e.g.
# feat(core): add catalog glob matcher
# fix(extract): resolve markdown table extraction
# PR titles become the squash-merge commit subject, which lerna reads for
# conventional versioning, so the title must be prefixed.

on:
pull_request_target:
types:
- opened
- edited
- synchronize
- reopened

permissions:
pull-requests: read

jobs:
validate:
name: Validate PR title
runs-on: ubuntu-latest
steps:
- name: Check Conventional Commits prefix
uses: amannn/action-semantic-pull-request@v6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# Allowed types (mirror @commitlint/config-conventional).
types: |
feat
fix
docs
style
refactor
perf
test
build
ci
chore
revert
# Scopes are optional and free-form (e.g. core, extract, cli,
# cli-contract).
requireScope: false
# Subject must not start with an uppercase letter.
subjectPattern: ^(?![A-Z]).+$
subjectPatternError: |
The subject "{subject}" must start with a lowercase letter, following
Conventional Commits (e.g. "feat(core): add catalog glob matcher").
Loading
Loading