v1.1.0: repo polish, CI fixes, version alignment, dead artifact cleanup

Root package: renamed to imhotep-monorepo, fixed broken scripts (test:unit/integration/e2e),
removed inappropriate root deps, fixed build order, updated clean script

CI: branch trigger main->master, npm ci->npm install, GitHub cache URL->Gitea

Docs: replaced scaffolded root README with real project README, added package READMEs
for imhotep/imhotep-playwright/imhotep-dsl/imhotep-core, added RELEASE.md checklist

Version: all 14 packages and root aligned to 1.1.0, CHANGELOG test count fixed (1125)

Metadata: 14 repository URLs github->gitea, 13 package descriptions added,
imhotep-cli exports field added, SECURITY.md updated for Gitea+disclosure email

Quality: noEmitOnError:true in 13 tsconfigs, collapsed duplicate interfaces in public.ts,
clippedBy test->test.skip, fixed broken dynamic import in imhotep index.test.ts,
694 generated src artifacts cleaned, V8 logs removed, .gitignore updated
This commit is contained in:
John Dvorak
2026-05-21 10:10:11 -07:00
parent 92deb689cd
commit dd64e1e34a
43 changed files with 846 additions and 126 deletions
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-bench",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "Performance benchmarks and profiling tools",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+1 -1
View File
@@ -5,7 +5,7 @@
"rootDir": "./src",
"composite": false,
"paths": {},
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-cdp",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "Chrome DevTools Protocol session management and DOM query primitives",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+1 -1
View File
@@ -5,7 +5,7 @@
"rootDir": "./src",
"paths": {},
"composite": false,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+9 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-cli",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "Scaffolding CLI with framework presets",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
@@ -22,6 +23,12 @@
"build": "tsc -p tsconfig.json",
"test": "node --test dist/**/*.test.js"
},
"exports": {
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
},
"dependencies": {
"imhotep-core": "^1.0.0",
"imhotep-playwright": "^1.0.0"
+18
View File
@@ -0,0 +1,18 @@
# imhotep-core
Foundation types and contracts for [Imhotep](https://gitea.com/anomalyco/imhotep). Defines the AST/IR, geometry world schema, diagnostic taxonomy, pipeline contracts, FOL AST/IR representations, domain/value types, scene target descriptors, property contract/results types, and geometry snapshot caching.
## Key Exports
| Module | Description |
|---|---|
| `types` | Core type definitions (positions, IDs, results, proofs) |
| `ast` | Unist-style AST node definitions |
| `ir` | Semantic IR and execution IR |
| `world` | Geometry world schema tables |
| `contracts` | Extractor, solver, compiler, reporter interfaces |
| `diagnostics` | Diagnostic categories, error codes, traces, shrinking |
| `logic-ast` | FOL AST types (quantifiers, connectives, predicates) |
| `logic-ir` | Lowered FOL IR for logic engine |
| `canonical` | Canonical world adapter for solver |
| `geometry-cache` | Disk-based extraction caching |
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-core",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "Foundation types, AST/IR contracts, diagnostics, and geometry world schema",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+1 -1
View File
@@ -5,7 +5,7 @@
"rootDir": "./src",
"paths": {},
"composite": false,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*.ts"
+1 -1
View File
@@ -3,7 +3,7 @@
"compilerOptions": {
"composite": false,
"noEmit": true,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+16
View File
@@ -0,0 +1,16 @@
# imhotep-dsl
Domain-specific language for [Imhotep](https://gitea.com/anomalyco/imhotep) assertions. Provides a fluent assertion API, a dense string-based DSL parser, FOL compilation/validation, canonical lowering, and property-run builders.
## Key Exports
| Export | Description |
|---|---|
| `expect(subject)` | Fluent assertion builder |
| `spec(src)` | Dense DSL parser (`parseSpec` alias) |
| `compile(source)` | Compile DSL to assertion nodes |
| `compileDenseFOLToFormula(src)` | Compile dense FOL to solver-ready AST |
| `validateAssertion(node)` | Pre-flight validation without extraction |
| `lowerToCanonical(nodes)` | Canonical lowering for IR equivalence |
| `component`, `enumerate` | Property-run fluent builders |
| `forAll`, `exists`, `predicate`, `domain` | FOL fluent builders |
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-dsl",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "Fluent API, dense DSL parser, FOL compiler, and assertion validator",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+1 -1
View File
@@ -5,7 +5,7 @@
"rootDir": "./src",
"paths": {},
"composite": false,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-extractor",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "DOM and geometry extraction with fact planning",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+1 -1
View File
@@ -5,7 +5,7 @@
"rootDir": "./src",
"paths": {},
"composite": false,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-fixtures",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "E2E test harness and fixture pages",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+2 -17
View File
@@ -188,23 +188,8 @@ test.describe('Edge Feature Tests', () => {
// ───────────────────────────────────────────────
// Topology: clippedBy
// ───────────────────────────────────────────────
test('clippedBy - check if documented/exists', async ({ page }) => {
const ui = await imhotep(page)
await loadTestPage(page)
// clippedBy is mentioned in docs but may not be implemented.
// Test whether it exists on the be proxy.
const be = ui.expect('[data-testid="modal"]').to.be as any
const hasClippedBy = typeof be.clippedBy === 'function'
if (hasClippedBy) {
;(ui.expect('[data-testid="modal"]').to.be as any).clippedBy('[data-testid="container"]')
const result = await ui.checkAll()
expect(result.passed).toBe(true)
} else {
console.log('clippedBy is NOT implemented on be proxy')
expect(hasClippedBy).toBe(false)
}
test.skip('clippedBy - documented but not yet implemented', async () => {
// TODO: implement clippedBy topology predicate
})
// ───────────────────────────────────────────────
+1 -1
View File
@@ -9,7 +9,7 @@
],
"paths": {},
"composite": false,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-geometry",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "Bounding-box computation, rect algebra, and transform math",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+1 -1
View File
@@ -5,7 +5,7 @@
"rootDir": "./src",
"paths": {},
"composite": false,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+15
View File
@@ -0,0 +1,15 @@
# imhotep-playwright
Playwright integration layer for [Imhotep](https://gitea.com/anomalyco/imhotep). Provides page wrapping, CDP-backed geometry extraction, runtime pooling, property-based test runners, renderer adapters, and preset assertion contracts.
## Key Exports
| Export | Description |
|---|---|
| `imhotep(page, opts)` | Attach Imhotep to a Playwright page |
| `imhotepComponent(id, opts)` | Property-run entry for rendered components |
| `imhotepStory(url, opts)` | Property-run entry for Storybook stories |
| `imhotepFixture(path, opts)` | Property-run entry for fixture files |
| `test`, `expect`, `imhotepFixtures` | Playwright test fixtures |
| `ContextPool`, `PagePool`, `Semaphore` | Pooled runtime for multi-worker testing |
| `touchTarget` through `modalContainment` | Reusable assertion presets |
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-playwright",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "Playwright integration with CDP extraction, runtime pooling, and property runners",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+2 -14
View File
@@ -208,12 +208,14 @@ export interface ComponentOptions {
renderer: RendererDescriptor
props?: unknown
env?: ImhotepPageOptions
fc?: FastCheckAdapter
}
export interface StoryOptions {
storybookUrl: string
args?: unknown
env?: ImhotepPageOptions
fc?: FastCheckAdapter
}
export interface FixtureOptions {
@@ -223,20 +225,6 @@ export interface FixtureOptions {
fixturesDir?: string
}
export interface ComponentOptions {
renderer: RendererDescriptor
props?: unknown
env?: ImhotepPageOptions
fc?: FastCheckAdapter
}
export interface StoryOptions {
storybookUrl: string
args?: unknown
env?: ImhotepPageOptions
fc?: FastCheckAdapter
}
// ---------------------------------------------------------------------------
// Property Run Handles
// ---------------------------------------------------------------------------
+1 -1
View File
@@ -9,7 +9,7 @@
],
"paths": {},
"composite": false,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-reporter",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "Diagnostic formatting, failure analysis, replay, and shrinking",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+1 -1
View File
@@ -5,7 +5,7 @@
"rootDir": "./src",
"paths": {},
"composite": false,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-solver",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "First-order logic constraint solver with directional and spatial predicates",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+1 -1
View File
@@ -5,7 +5,7 @@
"rootDir": "./src",
"paths": {},
"composite": false,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-state",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "ARIA and native element state materialization",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+1 -1
View File
@@ -5,7 +5,7 @@
"rootDir": "./src",
"paths": {},
"composite": false,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+3 -2
View File
@@ -1,11 +1,12 @@
{
"name": "imhotep-topology",
"version": "1.0.0",
"version": "1.1.0",
"type": "module",
"license": "MIT",
"description": "Stacking context evaluation, ancestor chains, and paint ordering",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+1 -1
View File
@@ -5,7 +5,7 @@
"rootDir": "./src",
"paths": {},
"composite": false,
"noEmitOnError": false
"noEmitOnError": true
},
"include": [
"src/**/*"
+32
View File
@@ -0,0 +1,32 @@
# imhotep
Meta-package for [Imhotep](https://gitea.com/anomalyco/imhotep) — declarative, relational UI testing for web applications.
```bash
npm install imhotep
```
## Usage
```typescript
import { imhotep, imhotepComponent, imhotepStory } from 'imhotep';
const ui = await imhotep(page);
ui.expect('.header').to.be.above('.content', { minGap: 16 });
const result = await ui.checkAll();
```
## Exports
| Export | Source |
|---|---|
| `imhotep` | `imhotep-playwright` |
| `imhotepComponent` | `imhotep-playwright` |
| `imhotepStory` | `imhotep-playwright` |
| `imhotepFixture` | `imhotep-playwright` |
| `dslExpect` | `imhotep-dsl` |
| `spec` | `imhotep-dsl` |
| `evaluate` | `imhotep-solver` |
| `enumeratedDomain`, `generatedDomain` | `imhotep-core` |
| `createDeterministicContext` | `imhotep-core` |
| `touchTarget` through `modalContainment` | `imhotep-playwright` |
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "imhotep",
"version": "1.0.0",
"version": "1.1.0",
"description": "Declarative relational UI testing for web apps",
"type": "module",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/anomalyco/imhotep.git"
"url": "https://gitea.com/anomalyco/imhotep.git"
},
"engines": {
"node": ">=18.0.0"
+1 -1
View File
@@ -3,6 +3,6 @@ import assert from 'node:assert'
// Meta-package sanity check: ensure exports resolve
test('meta-package exports resolve', async () => {
const { imhotep } = await import('../src/index.js')
const { imhotep } = await import('./index.js')
assert.strictEqual(typeof imhotep, 'function')
})