ego-lite-simplify · git:20260825.a668850 · 2026-08-25 · sha256 4ca1d897db80ac67
ego-lite-simplify git:20260825.a668850A
Immutable. This exact content is served forever at /api/v1/blob/4ca1d897db80ac67.
--- name: ego-lite-simplify description: Find and implement evidence-backed simplifications in the ego-lite repository. Use when reviewing the codebase for dead code, duplicated state or APIs, speculative abstractions, unnecessary compatibility layers, hand-written infrastructure, excessive tests or documentation, or when the user asks to reduce code size or maintenance complexity without hiding behavior changes. --- # Simplify ego-lite Reduce concepts and maintenance surface, not just line count. Prefer a few well-proven deletions over a long list of guesses. ## Establish the contract 1. Read `AGENTS.md` and the design document that owns the affected behavior. 2. Inspect `git status` and preserve unrelated user changes. 3. Decide whether the request is an audit or an authorized implementation. Do not turn a cleanup into a product decision without making the behavior change explicit. 4. Identify the relevant boundary before judging code: - `globalThis.ego` is supplied by the closed-source app; `docs/native-bindings-api.md` documents that external contract. - The runtime has direct CLI and embedded SDK startup paths. - Public agent APIs must stay aligned across implementation, tests, `help()`, and `skills/ego-browser/SKILL.md`. - Browser state can outlive the short Node.js process. ## Find strong candidates Start with production areas carrying the most state, branching, or public surface. Look for: - Exports, helpers, events, options, fallbacks, packages, or state fields with no production consumer. - Tests or documentation that are the only consumers of behavior that is no longer required. - Multiple representations of the same page, task-space, session, ref, lifecycle, or output state. - Pass-through layers that add vocabulary but no policy, isolation, or test seam. - Compatibility code that is unnecessary on an explicitly breaking branch. - Generality with no current product use, such as unsupported concurrency modes or unused extension points. - Special cases, rollback paths, or validation that exist only to protect a removable surface. - Hand-written parsers, queues, retry logic, or utilities that a Node.js built-in or healthy dependency can replace with less total code. Do not count moving logic into a wrapper as simplification. Estimate the net result: implementation, tests, docs, public names, state transitions, and special cases removed minus new glue and dependencies added. ## Prove each candidate Use `rg` first. Search exact symbols, method forms, event names, configuration keys, error codes, protocol strings, and dynamic registration points. Read the callers rather than relying only on static-analysis output. Classify evidence as: - **Production:** `package/ego-browser/src`, runtime scripts, build and loader paths, and shipped site learnings. - **Contract:** public JSDoc consumed by `help()`, `skills/ego-browser/SKILL.md`, architecture documents, and native binding behavior. - **Non-production:** tests, fixtures, snapshots, comments, and historical or draft documents. - **Ambiguous:** examples and development scripts; inspect how they are invoked before deciding. Reject or downgrade a candidate when a real production caller exists, the native contract is uncertain, the change merely relocates complexity, or the deletion requires unrelated churn. A small local cleanup may be implemented directly; a behavior or API decision belongs in the owning design document first. ## Report before broad removal For an audit, present each worthwhile candidate with: - The surface to remove or fold. - Call-site and contract evidence. - The user-visible behavior change, or “none”. - What complexity disappears and what replacement remains. - Confidence, risks, and the smallest verification needed. Call out candidates that require a user decision separately from behavior-preserving cleanups. ## Implement safely Follow spec-driven TDD when changing code: 1. Update or add a characterization test when existing behavior must remain. 2. Update the owning design or API contract before an intentional behavior change. 3. Remove the implementation and its now-obsolete tests, fixtures, exports, JSDoc, help entries, and skill documentation together. 4. Keep comments in English and explain only non-obvious constraints. 5. Prefer deleting a state or transition over adding another abstraction around it. Run the narrowest relevant checks first. From `package/ego-browser/`, use `npm test` for runtime changes, `npm run e2e` for real task-space/browser behavior, and `npm run validate:site-skills` for learning changes. Finish with `git diff --check` and report any verification that could not run. Never edit generated build output as the source of a simplification. Never remove a defensive path until its trust or lifecycle boundary is understood.