kin: auto-commit after pipeline
This commit is contained in:
parent
1083968d45
commit
950a2251e0
2 changed files with 41 additions and 8 deletions
|
|
@ -227,23 +227,20 @@ class TestBlockedReasonPropagation:
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Issue 2: infra_head and research_head missing dept_* routes
|
# Issue 2: dept_infra and dept_research routes — FIXED (KIN-ARCH-021)
|
||||||
# (low severity — documentation gap)
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
class TestMissingDeptRoutes:
|
class TestMissingDeptRoutes:
|
||||||
"""Issue 2 — agents/specialists.yaml routes section.
|
"""Issue 2 — agents/specialists.yaml routes section. FIXED in KIN-ARCH-021.
|
||||||
|
|
||||||
The specialists.yaml defines 7 departments:
|
The specialists.yaml defines 7 departments:
|
||||||
backend, frontend, qa, security, infra, research, marketing
|
backend, frontend, qa, security, infra, research, marketing
|
||||||
|
|
||||||
But there are only 6 dept_* routes:
|
After the fix there are 8 dept_* routes:
|
||||||
dept_feature, dept_fullstack, dept_security_audit, dept_backend,
|
dept_feature, dept_fullstack, dept_security_audit, dept_backend,
|
||||||
dept_frontend, dept_marketing
|
dept_frontend, dept_marketing, dept_infra, dept_research
|
||||||
|
|
||||||
infra_head (infra department) and research_head (research department)
|
These tests are regression tests verifying the routes remain present.
|
||||||
have NO dedicated standalone dept_* route. This means the PM cannot
|
|
||||||
route a task exclusively to the infra or research department via route template.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def test_infra_head_has_dedicated_dept_route(self):
|
def test_infra_head_has_dedicated_dept_route(self):
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,16 @@ const projects = ref<Project[]>([])
|
||||||
const vaultPaths = ref<Record<string, string>>({})
|
const vaultPaths = ref<Record<string, string>>({})
|
||||||
const deployCommands = ref<Record<string, string>>({})
|
const deployCommands = ref<Record<string, string>>({})
|
||||||
const testCommands = ref<Record<string, string>>({})
|
const testCommands = ref<Record<string, string>>({})
|
||||||
|
const autoTestEnabled = ref<Record<string, boolean>>({})
|
||||||
const saving = ref<Record<string, boolean>>({})
|
const saving = ref<Record<string, boolean>>({})
|
||||||
const savingDeploy = ref<Record<string, boolean>>({})
|
const savingDeploy = ref<Record<string, boolean>>({})
|
||||||
const savingTest = ref<Record<string, boolean>>({})
|
const savingTest = ref<Record<string, boolean>>({})
|
||||||
|
const savingAutoTest = ref<Record<string, boolean>>({})
|
||||||
const syncing = ref<Record<string, boolean>>({})
|
const syncing = ref<Record<string, boolean>>({})
|
||||||
const saveStatus = ref<Record<string, string>>({})
|
const saveStatus = ref<Record<string, string>>({})
|
||||||
const saveDeployStatus = ref<Record<string, string>>({})
|
const saveDeployStatus = ref<Record<string, string>>({})
|
||||||
const saveTestStatus = ref<Record<string, string>>({})
|
const saveTestStatus = ref<Record<string, string>>({})
|
||||||
|
const saveAutoTestStatus = ref<Record<string, string>>({})
|
||||||
const syncResults = ref<Record<string, ObsidianSyncResult | null>>({})
|
const syncResults = ref<Record<string, ObsidianSyncResult | null>>({})
|
||||||
const error = ref<string | null>(null)
|
const error = ref<string | null>(null)
|
||||||
|
|
||||||
|
|
@ -23,6 +26,7 @@ onMounted(async () => {
|
||||||
vaultPaths.value[p.id] = p.obsidian_vault_path ?? ''
|
vaultPaths.value[p.id] = p.obsidian_vault_path ?? ''
|
||||||
deployCommands.value[p.id] = p.deploy_command ?? ''
|
deployCommands.value[p.id] = p.deploy_command ?? ''
|
||||||
testCommands.value[p.id] = p.test_command ?? ''
|
testCommands.value[p.id] = p.test_command ?? ''
|
||||||
|
autoTestEnabled.value[p.id] = !!(p.auto_test_enabled)
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
error.value = String(e)
|
error.value = String(e)
|
||||||
|
|
@ -68,6 +72,21 @@ async function saveTestCommand(projectId: string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function toggleAutoTest(projectId: string) {
|
||||||
|
autoTestEnabled.value[projectId] = !autoTestEnabled.value[projectId]
|
||||||
|
savingAutoTest.value[projectId] = true
|
||||||
|
saveAutoTestStatus.value[projectId] = ''
|
||||||
|
try {
|
||||||
|
await api.patchProject(projectId, { auto_test_enabled: autoTestEnabled.value[projectId] })
|
||||||
|
saveAutoTestStatus.value[projectId] = 'Saved'
|
||||||
|
} catch (e) {
|
||||||
|
autoTestEnabled.value[projectId] = !autoTestEnabled.value[projectId]
|
||||||
|
saveAutoTestStatus.value[projectId] = `Error: ${e}`
|
||||||
|
} finally {
|
||||||
|
savingAutoTest.value[projectId] = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function runSync(projectId: string) {
|
async function runSync(projectId: string) {
|
||||||
syncing.value[projectId] = true
|
syncing.value[projectId] = true
|
||||||
syncResults.value[projectId] = null
|
syncResults.value[projectId] = null
|
||||||
|
|
@ -153,6 +172,23 @@ async function runSync(projectId: string) {
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="flex items-center gap-3 mb-3">
|
||||||
|
<label class="flex items-center gap-2 cursor-pointer select-none">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
:checked="autoTestEnabled[project.id]"
|
||||||
|
@change="toggleAutoTest(project.id)"
|
||||||
|
:disabled="savingAutoTest[project.id]"
|
||||||
|
class="w-4 h-4 rounded border-gray-600 bg-gray-800 accent-blue-500 cursor-pointer disabled:opacity-50"
|
||||||
|
/>
|
||||||
|
<span class="text-sm text-gray-300">Auto-test</span>
|
||||||
|
<span class="text-xs text-gray-500">— запускать тесты автоматически после pipeline</span>
|
||||||
|
</label>
|
||||||
|
<span v-if="saveAutoTestStatus[project.id]" class="text-xs" :class="saveAutoTestStatus[project.id].startsWith('Error') ? 'text-red-400' : 'text-green-400'">
|
||||||
|
{{ saveAutoTestStatus[project.id] }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="flex items-center gap-3 flex-wrap">
|
<div class="flex items-center gap-3 flex-wrap">
|
||||||
<button
|
<button
|
||||||
@click="saveVaultPath(project.id)"
|
@click="saveVaultPath(project.id)"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue