Cross-validates ecosystem assumptions against project semantic memory. Identifies drift, schema divergence, and misalignments across multiple codebases.
Compares project self-descriptions against ecosystem assumptions to detect misalignments and generate alignment reports.
/plugin marketplace add auge2u/lisa-helps-ralph-loops/plugin install lisa@lisa-helps-ralph-loopsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
checkpoint-schema.jsontemplates/ALIGNMENT_REPORT_FORMAT.mdtemplates/CHECKPOINT_FORMAT.jsontemplates/PERSPECTIVES_FORMAT.mdThis skill compares what each project says about itself (via .gt/memory/semantic.json) against what the ecosystem assumes, producing an alignment report and checkpoint.
Use this skill when:
.checkpoint.json timestamp)project/
└── scopecraft/
├── ALIGNMENT_REPORT.md # Human-readable findings
├── PERSPECTIVES.md # Side-by-side project self-reports
└── .checkpoint.json # Machine-readable state for recovery
Output templates: templates/ | Checkpoint schema: checkpoint-schema.json
The reconcile skill reads project locations from ~/.lisa/ecosystem.json.
{
"$schema": "ecosystem-config-v2",
"name": "ecosystem-name",
"projects": [
{
"name": "project-name",
"path": "~/github/org/repo",
"remote": "https://github.com/org/repo",
"role": "role-description",
"active": true,
"notes": "optional context"
}
],
"updated": "YYYY-MM-DD"
}
New in v2: The remote field (optional) specifies the git remote URL. When present, reconcile can locate projects even if cloned to non-standard paths by matching git remote get-url origin. The path field remains the primary lookup; remote is a fallback for project identification and portability.
Backward compatibility: ecosystem-config-v1 (without remote field) is still fully supported. Reconcile will not fail on v1 configs.
Path handling: All paths use ~/ for portability. Expand tildes to absolute paths before file access. Example: ~/github/auge2u/lisa3 becomes /Users/<user>/github/auge2u/lisa3.
When ~/.lisa/ecosystem.json is missing or contains only one project, reconcile runs in standalone mode:
.gt/memory/semantic.json and scopecraft/ artifactsIf a prior checkpoint exists (scopecraft/.checkpoint.json):
checkpoint.projects.<name>.git_hashgit rev-parse HEAD--force flag is set (or user explicitly requests full re-scan), skip this optimization and scan everythingThis makes reconcile faster for large ecosystems where most projects haven't changed.
~/.lisa/ecosystem.jsonprojects array with at least 1 entry~ paths to absolute pathsactive: trueremote field, if the path doesn't exist, try to locate the repo by scanning common clone directories for a matching git remote get-url originIf ~/.lisa/ecosystem.json is missing:
.gt/memory/semantic.json, run in standalone mode (see above)For each active project:
<project.path> exists locally<project.path>/.gt/memory/semantic.jsongh api repos/<org>/<repo>/contents/.gt/memory/semantic.json)status: "not-found" and continueHandle different schemas gracefully:
semantic-memory-v1 schema with ecosystem_role, integration_points, non_goalshttps://gastown.dev/schemas/semantic-memory.json without ecosystem fieldsproject.name, project.type, project.primary_language, tech_stackIf running from ecosystem root:
scopecraft/ALIGNMENT_REPORT.md if it exists (prior findings)scopecraft/.checkpoint.json if it exists (prior state)For each pair of projects, check:
| Check | What to compare |
|---|---|
| Role conflicts | Do any two projects claim the same role or write to the same outputs? |
| Interface agreements | Does what project A says it writes match what project B says it reads? |
| Tech stack drift | Are shared dependencies on compatible versions? |
| Constraint violations | Does any project violate another's stated constraints or non-goals? |
| Capability gaps | Are expected capabilities (from design docs) missing from self-reports? |
| Schema divergence | Do projects use different semantic.json schemas? What fields are missing? |
| Stale assumptions | Are any assumptions from prior reconcile now outdated? |
Classify each finding as:
For each project that has quality gates:
gates.yaml exists (declarative) or gates are hardcoded# Ecosystem Alignment Report
**Generated:** YYYY-MM-DD (reconcile vX.Y.Z)
**Previous reconcile:** YYYY-MM-DD vX.Y.Z (or "none")
**Ecosystem root:** <repo name>
**Projects:** <list with status>
---
## Summary
| Status | Count | Change from previous |
|--------|-------|----------------------|
| Aligned | N | +/- N |
| Misaligned | N | +/- N |
| Gaps | N | +/- N |
**Overall assessment:** <2-3 sentence summary>
---
## Changes Since vX.Y.Z
<!-- Only if prior checkpoint exists -->
| Item | Previous | Current | Impact |
|------|----------|---------|--------|
---
## Alignments (What's Working)
### A1: <title>
<description of what both projects agree on>
<!-- Repeat for each alignment -->
---
## Misalignments (Need Resolution)
### M1: <title> (PRIORITY: HIGH/MEDIUM/LOW)
**<Project A>'s view:** ...
**<Project B>'s view:** ...
**Impact:** ...
**Resolution:** ...
**Status:** new/unchanged/worsened
<!-- Repeat for each misalignment -->
---
## Gaps (Missing Information)
### G1: <title>
<what's missing and why it matters>
---
## Steering Questions
| # | Question | Decision or Options |
|---|----------|---------------------|
---
## Next Actions
| Priority | Action | Owner | Blocks |
|----------|--------|-------|--------|
# Ecosystem Perspectives
**Generated:** YYYY-MM-DD (reconcile vX.Y.Z)
**Projects scanned:** N attempted, N found
---
## Project Status Matrix
| Field | Project A | Project B | ... |
|-------|-----------|-----------|-----|
| Status | found/not-found | ... | |
| Version | X.Y.Z | ... | |
| Schema | semantic-memory-v1 | ... | |
<!-- Key fields from each semantic.json -->
---
## <Project Name> Self-Report
**Source:** <path to semantic.json>
| Attribute | Value |
|-----------|-------|
<!-- Extracted fields -->
**Reads from:** ...
**Writes to:** ...
**Does not own:** ...
<!-- Repeat for each project -->
---
## Ecosystem Role Comparison
| Responsibility | Project A | Project B | Conflict? |
|----------------|-----------|-----------|-----------|
---
## Interface Agreement Check
| Interface | Project A says | Project B says | Match? |
|-----------|---------------|----------------|--------|
---
## Schema Divergence Note
<!-- Only if schemas differ across projects -->
Formal JSON Schema: checkpoint-schema.json
{
"$schema": "reconcile-checkpoint-v1",
"reconcile": {
"timestamp": "ISO-8601",
"version": "X.Y.Z",
"previous_version": "X.Y.Z or null",
"ecosystem_root": "repo-name",
"method": "lisa reconcile skill (Stage 5)"
},
"projects": {
"<name>": {
"path": "~/...",
"status": "found|not-found",
"source": "local filesystem|GitHub API",
"semantic_json": {
"exists": true,
"version": "X.Y.Z",
"schema": "schema-identifier",
"last_scan": "ISO-8601",
"project_name": "name",
"role": "role"
},
"scopecraft": {
"exists": true,
"files": ["..."],
"level": "project|ecosystem"
},
"alignment": "aligned|mostly-aligned|divergent|not-found"
}
},
"alignment_summary": {
"total_projects": 0,
"found": 0,
"missing": 0,
"aligned": 0,
"mostly_aligned": 0,
"divergent": 0,
"alignments": 0,
"misalignments": 0,
"gaps": 0
},
"misalignments": [
{
"id": "M1",
"severity": "high|medium|low",
"description": "...",
"affects": ["project-names"],
"resolution": "...",
"status": "new|unchanged|worsened|resolved"
}
],
"resolved": [],
"decisions": {
"resolved_date": "YYYY-MM-DD",
"steering_questions": [],
"open_questions": []
},
"next_reconcile_triggers": []
}
External projects (e.g., Conductor) may produce their own reconcile checkpoints with different field names. When reading external checkpoints during reconcile, extract common fields regardless of schema:
misalignments / remaining_misalignments — treat as equivalentsteering_questions / steering_questions_resolved + open_queries — extract bothThe reconcile-checkpoint-v1 schema (see checkpoint-schema.json) is canonical for Lisa's own checkpoints. External formats are tolerated as input, not required to conform.
| Error | Response |
|---|---|
~/.lisa/ecosystem.json missing | If local .gt/memory/semantic.json exists, run in standalone mode. Otherwise, stop and print schema for user. |
~/.lisa/ecosystem.json has only 1 project | Run in standalone mode with informational message. |
| Project path doesn't exist locally | Check remote field if present; try GitHub API; record as "source": "GitHub API" or "not-found" |
semantic.json missing for a project | Record semantic_json.exists: false, continue with other projects. Do not crash. |
semantic.json malformed | Record error in checkpoint, skip project's comparison. Do not crash. |
| Different schema than expected | Extract common fields, flag divergence as a finding (not an error) |
| No prior checkpoint | First reconcile -- skip "Changes Since" section and incremental check |
| Fewer than 2 projects reachable | Warn but still produce report (standalone comparison against own state) |
| Git not available | Skip git hash check, skip remote lookup, fall back to path-only |
| Ecosystem partner not installed | Informational message: "Carlos not found -- Lisa works standalone. Install Carlos for specialist analysis." Do not error. |
Reconcile quality gates are defined in gates.yaml (9 gates, automated via validate.py --stage reconcile):
| Gate | Check | Severity |
|---|---|---|
config_loaded | Checkpoint confirms ecosystem config was loaded | blocker |
projects_found | 2+ projects found in checkpoint | blocker |
alignment_report_exists | ALIGNMENT_REPORT.md generated | blocker |
perspectives_exists | PERSPECTIVES.md generated | blocker |
checkpoint_valid | .checkpoint.json is valid JSON | blocker |
checkpoint_schema | Checkpoint has reconcile-checkpoint-v1 schema | blocker |
report_has_summary | Report has Summary section | blocker |
report_has_misalignments | Report has Misalignments section | warning |
changes_tracked | Prior version tracked in checkpoint | warning |
After reconcile completes:
validate.py --stage reconcile to verify outputsALIGNMENT_REPORT.md for action itemsnext_reconcile_triggers in checkpoint)Expert guidance for Next.js Cache Components and Partial Prerendering (PPR). **PROACTIVE ACTIVATION**: Use this skill automatically when working in Next.js projects that have `cacheComponents: true` in their next.config.ts/next.config.js. When this config is detected, proactively apply Cache Components patterns and best practices to all React Server Component implementations. **DETECTION**: At the start of a session in a Next.js project, check for `cacheComponents: true` in next.config. If enabled, this skill's patterns should guide all component authoring, data fetching, and caching decisions. **USE CASES**: Implementing 'use cache' directive, configuring cache lifetimes with cacheLife(), tagging cached data with cacheTag(), invalidating caches with updateTag()/revalidateTag(), optimizing static vs dynamic content boundaries, debugging cache issues, and reviewing Cache Component implementations.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.