voidmachine 7.0.1 → 7.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -339,7 +339,10 @@ its proofs and returns its commit for coordinator publication; `semantic` -- two
339
339
  sends the ticket to a human. A worker never picks a side of a semantic conflict to keep the loop
340
340
  moving.
341
341
 
342
- **Serial fallback.** Without a merge queue, merges run one at a time: the oldest ready pull request
342
+ **Serial fallback.** This path requires no queue service or paid plan.
343
+ For CI optimization, use [void-verify CI feedback](../void-verify/references/ci-feedback.md);
344
+ add neither a second scheduler nor a mandatory duration gate.
345
+ Without a merge queue, merges run one at a time: the oldest ready pull request
343
346
  (or the one already merging) holds the turn. The kernel reads whether the base moved past its head
344
347
  itself, since GitHub reports it only under a protection that requires it: a head behind gets
345
348
  `update-branch`, its new head is reviewed again, then merged, then the next. `merge` reads it once
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: void-merge
3
- description: Vider la file des PR ouvertes sans casser le dépôt. Ordre par déblocage plutôt que par date, CI verte ET à jour, artefacts générés régénérés, conflits de contenu rendus à leur auteur. Use when merging pull requests.
3
+ description: Vider la file des PR ouvertes sans casser le dépôt. Fusions séquentielles, ordre stable et dépendances explicites, CI verte ET à jour, artefacts générés régénérés, conflits de contenu rendus à leur auteur. Use when merging pull requests.
4
4
  ---
5
5
 
6
6
  # merge — voidcorp craftsman edition
7
7
 
8
8
  `void-implement` s'arrête à la PR ouverte. `void-autopilot` laisse à une personne les PR qu'il ne peut
9
- pas armer. Personne ne dit comment vider la file. Ce geste a l'air trivial jusqu'au moment où il ne l'est pas.
9
+ pas fusionner dans son mandat. Personne ne dit comment vider la file. Ce geste a l'air trivial jusqu'au moment où il ne l'est pas.
10
10
 
11
11
  **Attribution**: see `.source`.
12
12
 
@@ -36,19 +36,26 @@ Sortent de la file, sans discussion :
36
36
 
37
37
  Une file vide est un résultat, pas un échec : le dire et s'arrêter.
38
38
 
39
- ## Étape 2 — Ordonner par déblocage, jamais par date
40
-
41
- L'ordre correct n'a aucun rapport avec le numéro ni l'ancienneté.
42
-
43
- 1. **Une PR dont le contenu supprime la cause du conflit d'une autre passe avant elle.** Le cas
44
- qui a motivé cette skill : la PR réparant le workflow de back-merge était en conflit
45
- précisément parce que ce back-merge n'avait jamais tourné. Sans le back-merge d'abord, elle
46
- restait bloquée pour toujours.
47
- 2. À défaut de relation, **le moindre conflit d'abord** : ce qui se merge sans rien toucher, puis
48
- ce qui demande une régénération.
49
-
50
- Chercher la relation explicitement : une PR en conflit avec la base, dont une autre PR ouverte (ou
51
- un geste manquant) explique le conflit, attend cette autre.
39
+ ## Étape 2 — Garder un ordre stable, identifier les dépendances
40
+
41
+ Une seule fusion à la fois suffit, sans service de file ni abonnement particulier.
42
+ Une file native déjà configurée reste compatible ; ses protections restent applicables.
43
+
44
+ 1. **Conserver le tour engagé.** Dans `void-autopilot`, le noyau choisit : une PR dont la
45
+ fusion est déjà armée garde son tour ; sinon, la plus ancienne PR ouverte non brouillon
46
+ parmi les tickets suivis passe d'abord. Utiliser ses actions, pas un script de fusion parallèle.
47
+ 2. **Hors autopilot, garder l'ordre des PR admissibles.** À défaut d'ordre explicite, partir
48
+ de la plus ancienne. Une PR dont la revue est acquise et dont seule la CI attendue tourne
49
+ conserve son tour ; une PR plus récente ne la dépasse pas simplement parce qu'elle est verte.
50
+ 3. **Un déblocage réel se traite explicitement.** Nommer la dépendance, le conflit ou le
51
+ blocage durable et son propriétaire. Hors autopilot, une PR préalable peut passer d'abord
52
+ avec cette raison. Sous autopilot, rendre ce blocage au coordinateur : ne pas contourner
53
+ le tour choisi par le noyau. Une PR rouge ou en conflit ne justifie pas une attente indéfinie.
54
+
55
+ Remettre à jour seulement la PR dont le tour arrive, puis attendre ses preuves avant de
56
+ fusionner. Ne pas remettre toutes les branches à jour après chaque fusion : la suivante
57
+ ferait immédiatement vieillir ce travail. Le temps déjà dépensé ne rend jamais valide
58
+ une preuve liée à un ancien commit ou à une ancienne base.
52
59
 
53
60
  ## Étape 3 — Trois conditions pour merger, toutes nécessaires
54
61
 
@@ -40,15 +40,16 @@ concurrency keys: `cancel-in-progress: false` alone still replaces pending runs
40
40
  shared group. Keep integration checks before entry to the protected branch; checking
41
41
  only after merge permits broken integration.
42
42
 
43
- GitHub couples required PR and merge queue checks. Preserve both. Remove a redundant
44
- post-merge run only after checking that no release, promotion or artifact consumer
43
+ Where a repository already uses a merge queue, preserve both its required PR and
44
+ merge-group checks. A queue is optional; sequential merging needs no queue setup.
45
+ Remove a redundant post-merge run only after checking that no release, promotion or artifact consumer
45
46
  needs it, and that the protected integration path proves the merged result. The
46
47
  example has no push trigger; add one where it provides distinct release evidence.
47
48
 
48
- For reusable enforcement, the caller must also declare `ready_for_review`,
49
- `converted_to_draft` and `merge_group: checks_requested`, keeping its existing
50
- check names. Put concurrency only in that caller; the called workflow inherits
51
- `github.workflow` and must not cancel the same group. Its admission guard runs
49
+ For reusable enforcement, the caller must also declare `ready_for_review` and
50
+ `converted_to_draft`, keeping its existing check names. Preserve
51
+ `merge_group: checks_requested` where a queue is configured. Put concurrency only
52
+ in that caller; the called workflow inherits `github.workflow` and must not cancel the same group. Its admission guard runs
52
53
  from the immutable harness checkout before Node setup and floor execution.
53
54
  GitHub-hosted runner usage belongs to the caller, even when the reusable workflow
54
55
  is public and the caller private. Compare latency and job-minutes before making
@@ -71,6 +72,41 @@ Rollback: restore the prior workflow triggers and admission step together. Resto
71
72
  full draft CI costs runner time but does not weaken the floor. Leave protection and
72
73
  review evidence unchanged. Existing missions and receipts are not migrated.
73
74
 
75
+ ## Measure feedback before changing CI
76
+
77
+ On a CI optimization request, use existing run history to agree a project-specific
78
+ feedback target, separately for ordinary changes and documentation changes. Around ten
79
+ minutes for a complete PR and a few minutes for documentation can start the discussion;
80
+ they are advisory targets, not timeouts, required checks or permission to omit tests.
81
+ Report the sample size, median and p95 when the sample supports it. A missed target
82
+ calls for diagnosis of the critical path, not a retry or another reporting service.
83
+
84
+ Record separately: time waiting for execution, elapsed time until all required results
85
+ are available, and summed job execution minutes across parallel jobs and all attempts.
86
+ Include cancelled work and runs invalidated by branch updates. A later PR overtaking an
87
+ older one only wastes CI when that change actually invalidates work; do not assume a
88
+ saving from ordering alone. Use provider billing data for money: job-minutes are not
89
+ billed minutes. Missing runner-wait timestamps mean unknown, not zero; dependency waits
90
+ are not automatically runner waits. A run update timestamp is not its completion time.
91
+
92
+ For GitHub, inspect a concrete run and repeat for earlier attempts when present:
93
+
94
+ ```sh
95
+ gh run view RUN_ID --repo OWNER/REPO --attempt ATTEMPT --json attempt,event,headSha,createdAt,startedAt,jobs
96
+ ```
97
+
98
+ Job start/completion times describe execution intervals; inspect the workflow dependencies
99
+ and every required workflow before deriving the feedback delay. Another CI provider's
100
+ native run/job view supplies the same evidence; this is no GitHub prerequisite.
101
+
102
+ Investigate a full build/test cache miss on a documentation-only diff by tracing actual
103
+ inputs and cache keys. Markdown may feed generated assets, executable skills or contract
104
+ tests; the extension alone proves nothing. Optimize unaffected work only when dependencies
105
+ are proven; otherwise keep the complete suite above. Preserve exact-candidate checks,
106
+ release artifacts and integration evidence. Reuse local evidence with unchanged inputs
107
+ instead of asking every agent to repeat the same full suite. Adopt workflow changes in
108
+ the consumer's existing configuration; updating these references does not rewrite it.
109
+
74
110
  Sources read for GitHub Actions (hosted service):
75
111
  - https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows#pull_request
76
112
  - https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/control-workflow-concurrency
@@ -78,3 +114,6 @@ Sources read for GitHub Actions (hosted service):
78
114
  - https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/control-jobs-with-conditions
79
115
 
80
116
  - https://docs.github.com/en/actions/reference/workflows-and-actions/reusing-workflow-configurations
117
+
118
+ - https://cli.github.com/manual/gh_run_view
119
+ - https://docs.github.com/en/rest/actions/workflow-jobs