## RFC 0048 Expert Pool Implementation - Added tiered expert pools (Core/Adjacent/Wildcard) to dialogue handlers - Implemented weighted random sampling for panel selection - Added blue_dialogue_sample_panel MCP tool for manual round control - Updated alignment-play skill with pool design instructions ## New RFCs - 0044: RFC matching and auto-status (draft) - 0045: MCP tool enforcement (draft) - 0046: Judge-defined expert panels (superseded) - 0047: Expert pool sampling architecture (superseded) - 0048: Alignment expert pools (implemented) - 0050: Graduated panel rotation (draft) ## Dialogues Recorded - 2026-02-01T2026Z: Test expert pool feature - 2026-02-01T2105Z: SQLite vs flat files - 2026-02-01T2214Z: Guard command architecture ## Other Changes - Added TODO.md for tracking work - Updated expert-pools.md knowledge doc - Removed deprecated alignment-expert agent - Added spikes for SQLite assets and SDLC workflow gaps Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.8 KiB
RFC 0044: RFC Matching and Auto Status
| Status | Draft |
| Date | 2026-02-01 |
| Source Spike | rfc-sdlc-workflow-gaps |
Summary
Two gaps in the SDLC workflow:
-
RFC matching fails for NNNN-slug patterns -
find_document()instore.rs:1789usestrim_start_matches('0')which only works on pure numeric strings. Pattern0107-worker-job-idfails because107-worker-job-idisn't a valid integer. -
RFC status not auto-updated on PR merge -
handle_merge()inpr.rs:416doesn't update RFC status to "implemented". The link exists (worktrees table has document_id + branch_name) but missingget_worktree_by_branch()function and no status update code.
Both fixes are mechanical.
Design
Fix 1: Extract Leading Digits from NNNN-slug Patterns
File: crates/blue-core/src/store.rs:1788-1798
Before:
// Try number match
let trimmed = query.trim_start_matches('0');
if let Ok(num) = if trimmed.is_empty() {
"0".parse()
} else {
trimmed.parse::<i32>()
} {
if let Ok(doc) = self.get_document_by_number(doc_type, num) {
return Ok(doc);
}
}
After:
// Try number match - extract leading digits from NNNN-slug format
let num_str: String = query.chars()
.take_while(|c| c.is_ascii_digit())
.collect();
if !num_str.is_empty() {
let trimmed = num_str.trim_start_matches('0');
if let Ok(num) = if trimmed.is_empty() {
"0".parse()
} else {
trimmed.parse::<i32>()
} {
if let Ok(doc) = self.get_document_by_number(doc_type, num) {
return Ok(doc);
}
}
}
This handles:
0107→ extracts0107→ parses as 1070107-worker-job-id→ extracts0107→ parses as 107worker-job-id→ extracts `` → skips number match, falls to substring
Fix 2: Auto-Update RFC Status on Merge
Step 2a: Add get_worktree_by_branch() to store.rs
pub fn get_worktree_by_branch(&self, branch_name: &str) -> Result<Option<Worktree>, StoreError> {
match self.conn.query_row(
"SELECT id, document_id, branch_name, worktree_path, created_at
FROM worktrees WHERE branch_name = ?1",
params![branch_name],
|row| {
Ok(Worktree {
id: Some(row.get(0)?),
document_id: row.get(1)?,
branch_name: row.get(2)?,
worktree_path: row.get(3)?,
created_at: row.get(4)?,
})
},
) {
Ok(wt) => Ok(Some(wt)),
Err(rusqlite::Error::QueryReturnedNoRows) => Ok(None),
Err(e) => Err(StoreError::Database(e.to_string())),
}
}
Step 2b: Update handle_merge() in pr.rs
After successful merge (line 416), add:
Ok(()) => {
// Auto-update RFC status to implemented
let branch = get_current_branch(&state.home.root).ok();
if let Some(ref b) = branch {
if let Ok(Some(wt)) = state.store.get_worktree_by_branch(b) {
if let Ok(doc) = state.store.get_document_by_id(wt.document_id) {
if doc.status == "in-progress" {
let _ = state.store.update_document_status(
DocType::Rfc,
&doc.title,
"implemented"
);
}
}
}
}
Ok(json!({ ... }))
}
Test Plan
find_document("0044")returns RFC 0044find_document("0044-rfc-matching")returns RFC 0044find_document("rfc-matching")returns RFC 0044- Merge PR on RFC-linked branch → RFC status changes to "implemented"
- Merge PR on non-RFC branch → no error, no status change
"Right then. Let's get to it."
— Blue