Skip to content
Back to skills

Resolve Proposals

ASecurity

Fix approved proposals and close the loop — claim, fix, commit with Resolves-Proposal tags, mark implemented. U

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
developmentgobashgitapifrontend

Works with

  • api

Security analysis

A100/100

Scanned November 7, 2026

npx -y skills add Next-AI-Labs-Inc/alignment-harness --skill resolve-proposals --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Resolve Proposals?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Resolve Proposals
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/next-ai-labs-inc-resolve-proposals/badge)](https://www.skillsdirectory.com/skills/next-ai-labs-inc-resolve-proposals)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: resolve-proposals
description: Fix approved proposals and close the loop — claim, fix, commit with Resolves-Proposal tags, mark implemented. U
triggers:
  - "fix proposals"
  - "resolve proposals"
  - "implement approved proposals"
  - "resolve proposal"
  - "mark this proposal done"
  - "this proposal has been addressed"
---

# Resolve Proposals

This skill ensures every proposal fix creates a traceable commit-to-proposal link. Without this, proposals rot in the queue even after the code is fixed.

## The Full Loop

```
Proposal created → Approved → Claimed → Code fixed → Committed with tag → Hook marks implemented
                                                         ↑ YOU ARE HERE
```

## API Setup

```bash
alignment-harness records proposals
```

## Step 1: Claim Each Proposal

Before starting work, claim so other agents don't duplicate effort:

```bash
alignment-harness proposal update <PROPOSAL_ID> --status in-progress \
  --json '{"agentId": "claude-opus"}'
```

## Step 2: Read Code Before Changing It

**MANDATORY**: Read every file you will modify. Never assume what code does. The proposal may describe a problem that was already fixed — if so, skip to Step 5 (mark implemented without code changes).

Check the proposal's `targetFiles` array for which files to read.

## Step 3: Make the Fix

Follow all CLAUDE.md rules. Key ones for proposal fixes:
- NEVER leave catch blocks empty
- NEVER use `res.json()` without `return`
- NEVER bare-destructure context hooks
- Code defensively: fail-OPEN (default MAX_ACCESS on error)
- NEVER name variables with bare ambiguous words — qualify with domain context

## Step 4: Commit with Resolves-Proposal Tags (CRITICAL)

This is the step that closes the loop. The `Resolves-Proposal:` tag is what the post-commit hook parses to auto-mark proposals as implemented.

**Commit per repo** (don't cross repos in one commit):

```bash
cd <repo>
git add <only-your-changed-files>
git commit -m "$(cat <<'EOF'
fix(scope): <what the user now experiences differently>

<1-2 sentence description of what changed and why>

Resolves-Proposal: <full-proposal-id>
Resolves-Proposal: <full-proposal-id-2>

Tags: <relevant tags>, Priority:<x>/10
Files: <changed files>
EOF
)"
```

**Rules:**
- One `Resolves-Proposal:` line per proposal ID (full id as `alignment-harness proposal list` prints it)
- Group proposals into single-responsibility commits — one commit per concern, not one per proposal
- If two proposals touch the same file for the same reason, one commit resolves both
- Do NOT push — only commit locally

### Example

```bash
git commit -m "$(cat <<'EOF'
fix(coaching): users now see error feedback when coaching reply fails or hits usage limit

Previously, catch blocks in CoachingSessionHelper silently swallowed errors —
users saw a frozen UI with no feedback. Now shows error message via
setErrorNoResponseFromAiMessage in all coaching error paths.

Resolves-Proposal: 6a00000000000000000000a1
Resolves-Proposal: 6a00000000000000000000a2

Tags: User Facing, Coaching Quality, Priority:9/10
Files: <frontend-repo>/src/components/helpers/CoachingSessionHelper.js
EOF
)"
```

## Step 5: Mark Implemented (if hook unavailable)

If the post-commit hook is not yet active, manually mark implemented:

```bash
COMMIT_HASH=$(git rev-parse HEAD)
alignment-harness proposal update <PROPOSAL_ID> --status implemented \
  --json "{\"agentId\": \"claude-opus\", \"commitHash\": \"$COMMIT_HASH\"}"
```

## Step 6: Report What Happened

Print a summary table:

```
| Proposal | Status | Commit |
|----------|--------|--------|
| 44cc14 - CoachingSessionHelper swallows errors | FIXED | abc1234 |
| 44cc1c - PremiumFeatureGate fail-closed | ALREADY RESOLVED | skipped |
```

Include "ALREADY RESOLVED" for proposals where the code was already fixed — this is valuable signal that the proposal queue has drift.

## Step 7: Propagate Resolution

MongoDB is only ONE of the surfaces where proposals live. If you stop at Step 5, the proposal still shows as unresolved in Obsidian, tracking.json, and agent_find results. Complete ALL applicable steps below.

### 7a. Update Obsidian Vault REPORT.md

If the proposal has a `run_id` (pipeline proposals like LP-004), update the frontmatter in the corresponding REPORT.md:

```bash
# Path: <api-repo>/docs/intent/experiments/process-actionables/runs/{run_id}/REPORT.md
```

Update the YAML frontmatter:
```yaml
status: resolved
resolved_date: YYYY-MM-DD
resolved_by: agent
resolution_commit: {commit hash from Step 4}
resolution_notes: {one sentence — what was fixed}
```

### 7b. Update tracking.json

If the proposal came from the process-actionables pipeline, update the run entry in:

```bash
# Path: <api-repo>/docs/intent/experiments/process-actionables/tracking.json
```

Set the run's status to `"resolved"` and add `resolved_date` and `resolution_commit`.

### 7c. Append Resolution Section to REPORT.md

Add a `## Resolution` section at the bottom of the REPORT.md so agent_find indexes the resolution when it rebuilds from vault files:

```markdown
## Resolution

- **Status**: Resolved
- **Date**: YYYY-MM-DD
- **Commit**: {commit hash}
- **What changed**: {one sentence — the UX-level fix}
```

### 7d. Open in Obsidian

So the user sees the updated status (if the person has an Obsidian vault; otherwise print the path):

```bash
open "obsidian://open?vault=<their vault name>&file=experiments/process-actionables/runs/{run-id}/REPORT&newtab=true"
```

## When a Proposal is Already Resolved

If you read the code and the problem described in the proposal is already fixed:

1. Do NOT make any code changes
2. Still mark the proposal as implemented (Step 5) — this closes it in the queue
3. **Still propagate the resolution (Step 7)** — if the proposal has vault files, update their status so all surfaces reflect reality
4. Note "ALREADY RESOLVED" in your summary
5. This is expected — code evolves faster than the proposal queue

## Anti-Patterns

- **NEVER skip the commit tag** — "I'll add it later" means it never happens
- **NEVER commit without reading the code first** — proposals go stale, you'll commit a fix for a non-problem
- **NEVER bundle unrelated proposals into one commit** — defeats single-responsibility and makes revert impossible
- **NEVER push** — only commit locally, the human decides when to push

## Known Limitations

- **Session compactions are frozen** — they cannot be updated after creation. Resolution context is indexed via the REPORT.md `## Resolution` section instead.
- **Intent DB entries are not automatically resolved** — if the proposal links to Intent DB items, resolving those is a separate manual step (use `/intent-db` skill).
- **Unified resolution API planned** — a unified resolution endpoint will replace manual propagation (Steps 7a-7d) when built. See `seeds/unified-proposal-resolution-plan.md` for the plan.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.