svg153/software-factory
v0.1.6MIT
Press Play and iterate your repo autonomously: discovery → GSD plan → self-grilling → GitHub issues wired into a Project → implementation → review/audit, in bounded rounds. Canvas control panel + CLI runner + skill for GitHub Copilot.
Changelog
v0.1.6
Added
- Sección «GitHub — trabajo existente» (#90): el panel ahora puede listar las issues y PRs
abiertos reales del repo (
gh issue list/gh pr list), no solo lo que hay en elstate.jsondel run actual. Botón «Actualizar GitHub» (solo lectura) con dos columnas: issues (nº, título, labels) y PRs (nº, título, draft/conflictos/estado de checks). - Botón «Importar abiertas»: vincula las issues abiertas de GitHub a
state.issuespara que la fase issues no las duplique (createIssuesFromDraftya deduce contra el estado víasameIssue). Solo persiste si hay novedades; cada issue importada queda marcadaimported: true. - Nuevas acciones runner/extension:
github_statusyimport_issues, registradas también como acciones del canvas.
Fixed
getGithubStatuses blando: sighfalla en una de las dos listas (auth, rate limit), la otra se muestra igualmente y el fallo parcial se devuelve comonoterecortada. Los errores de importación se traducen a un mensaje fijo (no se filtra el estado interno).
Changed
gh.mjs: validación de slug unificada enassertRepoSlug(la compartíanprojectsV2Argsa mano y ahora los comandosissue/pr list).
v0.1.5
Fixed
- Init sobre un repo con estado existente mostraba solo
⚠ sf_solicitud_fallida(#88): el runner aborta con «Ya existe estado… usa --force» pero ese mensaje se perdía. Ahora la rama init deextension.mjscaptura el fallo y, si pide--force, devuelve un aviso accionable (needs_force); si no, lanzasf_init_fallocon el detalle del runner. http.mjsdifunde elcodeymessagede los errores intencionales (CanvasError), pero mantiene el código genérico sin mensaje para errores crudos (no se filtran rutas internas).- Nuevo checkbox «Forzar reinicio» junto a Init: añade
--forceal runner (initRunnerArgs+createInitPayload, que solo incluyeforcecuando está marcado para no alterar el contrato).
Changed
app.mjsregistra⚠ <code>: <message>y, anteneeds_force, sugiere marcar «Forzar reinicio».
v0.1.4
Fixed
- «Detectar»/autofill del Project (#83): la consulta GraphQL pedía
owner { login }directamente sobreProjectV2Owner, que es una unión (User | Organization | Team) sin ese campo; GitHub respondíaundefinedFieldyghfallaba. Ahoraloginse pide con inline fragments (... on User,... on Organization), como exige la API.
v0.1.3
Added
- Autofill de
owner/repo(#82): al pulsar «Usar repo» (o el botón «Detectar»), el servidor deriva el identificador GitHub del workspace congit remote get-url origin(https, ssh y scp-form) y rellena el campo; no pisa ediciones manuales. - Detección del Project vinculado (#83): acción
autofillconsulta GraphQLprojectsV2víagh apiy rellena «Project board ID» y «Project owner» si hay un único Project; lista las opciones si hay varios; registra el motivo si no hay o falla la API. - Botón «Detectar» en la barra Configurar para lanzar el autofill bajo demanda.
Changed
- El campo Project se rotula ahora «Project board ID (opc.)» con tooltip que explica
que es el número de la URL del board (
.../projects/5→ 5) o el idPVT_xxx(#84). La clave del payload (project) no cambia.
v0.1.2
Fixed
- Canvas Init appeared dead: the extension host is not bound to any chat session, so
the panel had no real repo. The panel now has a Repo field ("Usar repo") that
accepts any absolute path that is a git workspace; non-git paths are rejected
(
sf_repo_no_permitido) and the previous repo is kept on failure. /stateerrors are reported in the panel log instead of failing silently.- Writes are guarded to git workspaces only (
repoIsGitWorkspace), avoiding stray.software-factory/directories. - Clearer init labels: "Project nº" (number of the GitHub Project) vs "projectOwner" (owner/org of that Project, defaults to the repo owner) with tooltips.
Added
- Release workflow (
release.yml),tools/check-release.mjsandtools/bump-version.mjs. install.ps1 -Checkdetects stale installations (version, files, skill drift).- SECURITY, CONTRIBUTING, CODEOWNERS, issue/PR templates;
engines.node >=20. - User idea injection ("vocal ideas"). The canvas now has an idea box and a
add_ideaaction, and the runner aidea <repo> "<text>"command. An idea is stored as a seed (state.seeds,status: new) that does not start its own round; the nextplanphase decomposes it into 1+ issues (labeluser-idea,origin: user) that flow through grill → issues → Project → implement → review exactly like the audit issues. The runner owns the seed lifecycle inadvance()(new → plannedleaving plan,planned → triagedleaving grill) with acreated_atcutoff guard so an idea added after the current plan was emitted waits for the next round's plan.planPrompt/grillPrompt, the canvas UI (seeds panel), thesoftware-factoryskill and the README document the flow. Covered by 7 new regression tests. - Repo intake (continue a half-done repo). A new
intake <repo>runner command andrun_intakecanvas action callreadRepoInventory, which reads the repo's open issues, open PRs and (when configured) Project items viaghintostate.inventory. It is read-only and resilient: each failing source degrades to[]with a note and never throws, so intake can't break the loop. The round-1discoverandplanwork orders consume the inventory to fold the roadmap around already-open work and to avoid recreating existing issues.createIssuesFromDraftnow adopts a draft item that carries a real numericnumber: it records the issue instate.issues(flaggedadopted: true) and adds it to the Project without callinggh issue create, de-duplicating by title and number, and only previews under--dry. The canvas shows an "Ingestar repo" button and an inventory panel. Covered by 11 new regression tests.
v0.1.1
Fixed
- Consolidated the fixes from #1 (PRs #5 and #6): factory cycle regressions, CSRF
protection on
/action, validated installer, unique dry-run numbering across rounds, safe contracts for dry-run,init, failed tasks,completeandgh. SF_FAKE_GHremoved from production;dryis only required where implemented.- The layout checker validates against the vendored Agent Plugins 1.0.0 schema and no longer claims full conformance; schema audit is instance-independent and only ENOENT counts as absence.
- Vendored schema ships its Apache-2.0 license and third-party notice.
Added
- New Agent Plugins 1.0 layout with a namespaced extension
(
com.github.copilot/extensions/software-factory). --dryflag for the runner.--project-owneroption forinit(Project owned by a different owner).
Changed
- Version bumped to
0.1.1inplugin.jsonand the extensionpackage.json. - README «Option C» now references the
v0.1.1tag.
v0.1.0
- Initial release: canvas extension, runner and skill.