Add chorus-entrypoint label to standardized label set
Some checks failed
WHOOSH CI / speclint (push) Has been cancelled
WHOOSH CI / contracts (push) Has been cancelled

**Problem**: The standardized label set was missing the `chorus-entrypoint`
label, which is present in CHORUS repository and required for triggering
council formation for project kickoffs.

**Changes**:
- Added `chorus-entrypoint` label (#ff6b6b) to `EnsureRequiredLabels()`
  in `internal/gitea/client.go`
- Now creates 9 standard labels (was 8):
  1. bug
  2. bzzz-task
  3. chorus-entrypoint (NEW)
  4. duplicate
  5. enhancement
  6. help wanted
  7. invalid
  8. question
  9. wontfix

**Testing**:
- Rebuilt and deployed WHOOSH with updated label configuration
- Synced labels to all 5 monitored repositories (whoosh-ui,
  SequentialThinkingForCHORUS, TEST, WHOOSH, CHORUS)
- Verified all repositories now have complete 9-label set

**Impact**: All CHORUS ecosystem repositories now have consistent labeling
matching the CHORUS repository standard, enabling proper council formation
triggers.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Claude Code
2025-10-12 22:06:10 +11:00
parent 192bd99dfa
commit 3373f7b462
9 changed files with 1235 additions and 9 deletions

View File

@@ -278,12 +278,26 @@ document.addEventListener('DOMContentLoaded', () => {
try {
const data = await apiFetch('/v1/tasks');
tasksContent.innerHTML = `
<div class="grid">
<div class="task-list">
${data.tasks.map(task => `
<div class="card">
<div class="task-card">
<h3><a href="#tasks/${task.id}">${task.title}</a></h3>
<p>Status: ${task.status}</p>
<p>Priority: ${task.priority}</p>
<div class="task-meta">
<span class="badge status-${task.status}">${task.status}</span>
<span class="badge priority-${task.priority}">${task.priority}</span>
${task.repository ? `<span class="repo-badge">${task.repository}</span>` : ''}
</div>
${task.tech_stack?.length ? `
<div class="tags">
${task.tech_stack.slice(0, 3).map(tech => `
<span class="tag tech">${tech}</span>
`).join('')}
${task.tech_stack.length > 3 ? `<span class="tag">+${task.tech_stack.length - 3} more</span>` : ''}
</div>
` : ''}
${task.description ? `
<p class="task-description">${task.description.substring(0, 150)}${task.description.length > 150 ? '...' : ''}</p>
` : ''}
</div>
`).join('')}
</div>
@@ -302,19 +316,87 @@ document.addEventListener('DOMContentLoaded', () => {
<h2>${task.title}</h2>
<div class="card">
<h3>Task Details</h3>
<!-- Basic Info -->
<div class="grid">
<div>
<p><strong>Status:</strong> ${task.status}</p>
<p><strong>Priority:</strong> ${task.priority}</p>
<p><strong>Status:</strong> <span class="badge status-${task.status}">${task.status}</span></p>
<p><strong>Priority:</strong> <span class="badge priority-${task.priority}">${task.priority}</span></p>
<p><strong>Source:</strong> ${task.source_type || 'N/A'}</p>
</div>
<div>
<p><strong>Help Promises:</strong> (Not implemented)</p>
<p><strong>Retry Budgets:</strong> (Not implemented)</p>
<p><strong>Repository:</strong> ${task.repository || 'N/A'}</p>
<p><strong>Project ID:</strong> ${task.project_id || 'N/A'}</p>
${task.external_url ? `<p><strong>Issue:</strong> <a href="${task.external_url}" target="_blank">View on GITEA</a></p>` : ''}
</div>
</div>
<!-- Estimation & Complexity -->
${task.estimated_hours || task.complexity_score ? `
<hr>
<div class="grid">
${task.estimated_hours ? `<p><strong>Estimated Hours:</strong> ${task.estimated_hours}</p>` : ''}
${task.complexity_score ? `<p><strong>Complexity Score:</strong> ${task.complexity_score.toFixed(2)}</p>` : ''}
</div>
` : ''}
<!-- Labels & Tech Stack -->
${task.labels?.length || task.tech_stack?.length ? `
<hr>
<div class="grid">
${task.labels?.length ? `
<div>
<p><strong>Labels:</strong></p>
<div class="tags">
${task.labels.map(label => `<span class="tag">${label}</span>`).join('')}
</div>
</div>
` : ''}
${task.tech_stack?.length ? `
<div>
<p><strong>Tech Stack:</strong></p>
<div class="tags">
${task.tech_stack.map(tech => `<span class="tag tech">${tech}</span>`).join('')}
</div>
</div>
` : ''}
</div>
` : ''}
<!-- Requirements -->
${task.requirements?.length ? `
<hr>
<p><strong>Requirements:</strong></p>
<ul>
${task.requirements.map(req => `<li>${req}</li>`).join('')}
</ul>
` : ''}
<!-- Description -->
<hr>
<p><strong>Description:</strong></p>
<p>${task.description}</p>
<div class="description">
${task.description || '<em>No description provided</em>'}
</div>
<!-- Assignment Info -->
${task.assigned_team_id || task.assigned_agent_id ? `
<hr>
<p><strong>Assignment:</strong></p>
<div class="grid">
${task.assigned_team_id ? `<p>Team: ${task.assigned_team_id}</p>` : ''}
${task.assigned_agent_id ? `<p>Agent: ${task.assigned_agent_id}</p>` : ''}
</div>
` : ''}
<!-- Timestamps -->
<hr>
<div class="grid timestamps">
<p><strong>Created:</strong> ${new Date(task.created_at).toLocaleString()}</p>
${task.claimed_at ? `<p><strong>Claimed:</strong> ${new Date(task.claimed_at).toLocaleString()}</p>` : ''}
${task.started_at ? `<p><strong>Started:</strong> ${new Date(task.started_at).toLocaleString()}</p>` : ''}
${task.completed_at ? `<p><strong>Completed:</strong> ${new Date(task.completed_at).toLocaleString()}</p>` : ''}
</div>
</div>
`;
} catch (error) {

View File

@@ -218,6 +218,117 @@ form input[type="text"] {
display: none;
}
/* Task Display Styles */
.badge {
padding: 0.25rem 0.5rem;
border-radius: 4px;
font-size: 0.875rem;
font-weight: 500;
display: inline-block;
}
.status-open { background-color: #3b82f6; color: white; }
.status-claimed { background-color: #8b5cf6; color: white; }
.status-in_progress { background-color: #f59e0b; color: white; }
.status-completed { background-color: #10b981; color: white; }
.status-closed { background-color: #6b7280; color: white; }
.status-blocked { background-color: #ef4444; color: white; }
.priority-critical { background-color: #dc2626; color: white; }
.priority-high { background-color: #f59e0b; color: white; }
.priority-medium { background-color: #3b82f6; color: white; }
.priority-low { background-color: #6b7280; color: white; }
.tags {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-top: 0.5rem;
}
.tag {
padding: 0.25rem 0.75rem;
background-color: #e5e7eb;
border-radius: 12px;
font-size: 0.875rem;
}
.tag.tech {
background-color: #dbeafe;
color: #1e40af;
}
.description {
white-space: pre-wrap;
line-height: 1.6;
padding: 1rem;
background-color: #f9fafb;
border-radius: 4px;
margin-top: 0.5rem;
}
.timestamps {
font-size: 0.875rem;
color: #6b7280;
}
.task-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
gap: 1.5rem;
}
.task-card {
background-color: #fff;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.05);
padding: 1.25rem;
border: 1px solid #e0e0e0;
transition: box-shadow 0.3s ease, transform 0.2s ease;
}
.task-card:hover {
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
transform: translateY(-2px);
}
.task-card h3 {
margin-top: 0;
margin-bottom: 0.75rem;
}
.task-card h3 a {
color: #2c3e50;
text-decoration: none;
}
.task-card h3 a:hover {
color: #3498db;
}
.task-meta {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-bottom: 0.75rem;
}
.repo-badge {
padding: 0.25rem 0.5rem;
background-color: #f3f4f6;
border-radius: 4px;
font-size: 0.875rem;
color: #6b7280;
}
.task-description {
font-size: 0.9rem;
color: #6b7280;
line-height: 1.5;
margin-top: 0.5rem;
margin-bottom: 0;
}
/* Responsive Design */
@media (max-width: 768px) {
header {
@@ -246,4 +357,8 @@ form input[type="text"] {
.card {
margin-bottom: 1rem;
}
.task-list {
grid-template-columns: 1fr;
}
}