Issue root resolution
Skill susomejias/rembric/.agents/skills/issue-root-resolution
Resolve a verified cluster of Rembric issues from causal root to evidence-gated closure. Use after systemic triage identifies a shared root, or when the user asks to attack issues at the root, create a mechanism map, plan a deletion-first fix, or close a fixed/stale issue cluster. Use `diagnose` for a single defect whose reproduction is not yet established.From its SKILL.md
npx -y skills add susomejias/rembric --skill issue-root-resolutionAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.7 KB, as published. Nobody here has run it
Issue Root Resolution
A cluster is resolved when the mechanism that permits it is removed or guarded at the correct boundary, each affected report has executable evidence, and the implementation remains faithful to Rembric's specifications and invariants. Do not turn a cluster into a collection of symptom patches.
1. Establish the current mechanism
Work from current origin/main, not an issue's historical description.
- Read full issue bodies, comments, linked PRs, and relevant OpenSpec specs.
- Reproduce every candidate root through a real caller boundary; include a passing control in the same run.
- Make a read-only mechanism map before editing. Every claim gets a
file:lineanchor and explains what happens today, not what the issue says should happen. - Record report date and the commit/release being tested. A pre-fix report is not evidence that the current build remains broken.
If the map contradicts the report, say so. The symptom may be valid while the proposed mechanism is wrong; strengthen the repro until it distinguishes them.
2. Shape the smallest root fix
Rank alternatives in this order:
- remove the mechanism, making the whole class impossible;
- add a static/invariant guard that makes reintroduction fail;
- apply a local predicate fix behind a failing real-surface reproduction;
- only when evidence rules out the above, add a new state, flag, command, compatibility path, or other lasting surface.
For every option that adds surface, explain why a deletion/relaxation shape cannot work. Do not add a parallel representation of truth: memory lifecycle, project scope, and topic convergence already have authoritative locations.
Apply these Rembric constraints while designing:
- Scope is resolved at the service layer. New MCP tools use
resolveEffectiveScope; handlers do not construct scopes or infer a default. - Append-only data remains append-only: do not
DELETEmemory rows or update content to correct a defect. Use existing lifecycle/replacement semantics. - SQL belongs in
src/db/, services own transactions, and scoped repository methods requireScope. - A behavioural change, new MCP tool, or invariant change needs an OpenSpec change before implementation. Table-rebuild migrations rely on the runner's FK-safety dance; do not reproduce it ad hoc in a migration.
- Plugin work must preserve one shared implementation across five clients; read
rembric-plugin-developmentbefore changingapps/plugin/.
Write unresolved maintainer choices as explicit decision items with a recommended default. An existing decision in an issue, spec, or accepted design outranks a new plan table.
3. Implement with proof, not confidence
Make independently reviewable slices, ordered by root mechanism rather than by issue number. For each slice:
- Turn the minimized real scenario into a failing regression test at the right seam. Confirm it fails before the fix.
- Apply the smallest change that addresses the root.
- Run the test, its control, relevant typecheck/lint, and the original repro.
- When HTTP, MCP, migrations, or client integration changed, run the relevant
real-stack smoke from
rembric-smoke-tests. - Inspect every worker/subagent diff and independently re-run its key proof. A report of success is not evidence.
A new guard is unproven until weakening each condition makes the test that names
it fail. Use scripts/mutate.mjs where it fits; a test green on both sides of
the change does not establish the guard.
4. Verify and close precisely
For each issue, select exactly one closure basis:
| Basis | Required evidence |
|---|---|
| Fixed | Merged commit/PR and a named passing test/repro on current build |
| Superseded | Recorded maintainer decision or OpenSpec change that replaces the request |
| Surface retired | Current-build proof that the affected public surface no longer exists |
| Duplicate | Canonical issue with its own fixed evidence |
| Not closable | Missing reproduction, unmerged dependency, or a distinct unresolved root |
Do not close an issue whose fix is merely in an unmerged PR. Do not call an issue stale only because its original mechanism disappeared: verify the reported outcome on the current build first. For multi-part reports, document the split and leave the remaining part open.
Before a public closure comment or final report, run the cited evidence yourself and name both the test and the boundary it exercises. Include a reopen path for a current reproduction.
Report format
Deliver a concise resolution packet:
- Roots table:
root | issues | current state | mechanism-map anchors. - Plan: deletion-first fix shape, OpenSpec/decision items, owners, and independently revertible slices.
- Evidence matrix:
issue | closure basis | proof run | result. - Borderline items: what is still unknown or blocked, and the next exact probe.
- Verification summary: commands run, controls, smoke results, and any compatibility/migration/client surfaces checked.