-
Notifications
You must be signed in to change notification settings - Fork 2
[codex] fix metadata sync fallback and docs alignment #1014
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -2,7 +2,7 @@ | |||||||||||||
| file_type: documentation | ||||||||||||||
| title: Canonical Config File Interdependencies Guide | ||||||||||||||
| description: Canonical reference for how labels.yml, issue-types.yml, labeler.yml, and issue-fields.yml interact from issue creation through automation completion. | ||||||||||||||
| version: v1.0.3 | ||||||||||||||
| version: v1.0.4 | ||||||||||||||
| created_date: "2026-06-03" | ||||||||||||||
| last_updated: "2026-06-19" | ||||||||||||||
| authors: | ||||||||||||||
|
|
@@ -34,6 +34,10 @@ This guide documents the canonical relationship between: | |||||||||||||
|
|
||||||||||||||
| It also maps end-to-end data flow from issue/PR creation to automation completion. | ||||||||||||||
|
|
||||||||||||||
| Project metadata sync is label-driven, but it also treats issue type selection | ||||||||||||||
| and safe content/branch fallbacks as first-class signals so project fields can | ||||||||||||||
| catch up when labels are added after creation. | ||||||||||||||
|
Comment on lines
+37
to
+39
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add missing comma in compound sentence. Line 37–39 joins two independent clauses with "so", but a comma is needed before the conjunction. The sentence currently reads: "…first-class signals so project fields can catch up…" but should read: "…first-class signals, so project fields can catch up…" 🔧 Proposed fix-Project metadata sync is label-driven, but it also treats issue type selection
-and safe content/branch fallbacks as first-class signals so project fields can
-catch up when labels are added after creation.
+Project metadata sync is label-driven, but it also treats issue type selection
+and safe content/branch fallbacks as first-class signals, so project fields can
+catch up when labels are added after creation.📝 Committable suggestion
Suggested change
🧰 Tools🪛 LanguageTool[uncategorized] ~38-~38: Possible missing comma found. (AI_HYDRA_LEO_MISSING_COMMA) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||||||||||
|
|
||||||||||||||
| ## Canonical Roles | ||||||||||||||
|
|
||||||||||||||
| | File | Canonical Role | Primary Consumers | | ||||||||||||||
|
|
@@ -89,6 +93,7 @@ sequenceDiagram | |||||||||||||
| 2. `status:*` and `priority:*` mappings in `.github/issue-fields.yml` must resolve to labels defined in `.github/labels.yml`. | ||||||||||||||
| 3. `.github/labeler.yml` may only emit canonical labels defined in `.github/labels.yml`. | ||||||||||||||
| 4. `.github/issue-types.yml` display types should map to canonical `type:*` labels that can be projected into project field Type values. | ||||||||||||||
| 5. `project-meta-sync.yml` should reprocess label changes so late `type:*` labels or corrected issue types update the project field projection. | ||||||||||||||
|
|
||||||||||||||
| ## Current Risks Observed | ||||||||||||||
|
|
||||||||||||||
|
|
||||||||||||||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -81,13 +81,14 @@ Template labels must remain canonical and pass: | |||||||||||||||||||||||
| - `Priority` | ||||||||||||||||||||||||
| - `Type` | ||||||||||||||||||||||||
| - `Effort` | ||||||||||||||||||||||||
| - `Start date` and `Target date` only when `status:ready` or `status:in-progress` is present | ||||||||||||||||||||||||
| - `Start date` and `Target date` when `status:ready` or `status:in-progress` is present | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| Derivation source notes: | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| - `Status`, `Priority`, and `Type` are mapped from labels via `.github/issue-fields.yml` mappings. | ||||||||||||||||||||||||
| - `Effort` uses the configured default from canonical issue-fields configuration. | ||||||||||||||||||||||||
| - `Start date` and `Target date` stay empty at creation time and are only populated after kickoff-ready metadata is present (`status:ready` or `status:in-progress`). | ||||||||||||||||||||||||
| - `Type` and `Priority` now fall back to safe content-based inference when labels are missing or late. | ||||||||||||||||||||||||
| - `Start date` and `Target date` are populated when kickoff-ready metadata is present (`status:ready` or `status:in-progress`) and the workflow reprocesses label changes so fields can catch up after triage. | ||||||||||||||||||||||||
| - Metadata governance for assignees, milestones, and relationships is handled separately by `.github/workflows/metadata-governance.yml`. | ||||||||||||||||||||||||
|
Comment on lines
88
to
92
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add missing comma in compound sentence (line ~91). The clause "the workflow reprocesses label changes so fields can catch up after triage" needs a comma before "so" to properly join two independent clauses. It should read: "…label changes, so fields can catch up…" 🔧 Proposed fix-- `Type` and `Priority` now fall back to safe content-based inference when labels are missing or late.
-- `Start date` and `Target date` are populated when kickoff-ready metadata is present (`status:ready` or `status:in-progress`) and the workflow reprocesses label changes so fields can catch up after triage.
+- `Type` and `Priority` now fall back to safe content-based inference when labels are missing or late.
+- `Start date` and `Target date` are populated when kickoff-ready metadata is present (`status:ready` or `status:in-progress`), and the workflow reprocesses label changes, so fields can catch up after triage.📝 Committable suggestion
Suggested change
🧰 Tools🪛 LanguageTool[uncategorized] ~88-~88: Loose punctuation mark. (UNLIKELY_OPENING_PUNCTUATION) [uncategorized] ~88-~88: The official name of this software platform is spelled with a capital “H”. (GITHUB) [uncategorized] ~91-~91: Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short). (COMMA_COMPOUND_SENTENCE_2) [uncategorized] ~92-~92: The official name of this software platform is spelled with a capital “H”. (GITHUB) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| Current preflight conditions must be satisfied before sync runs: | ||||||||||||||||||||||||
|
|
@@ -98,7 +99,7 @@ Current preflight conditions must be satisfied before sync runs: | |||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| Safe automation boundary: | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| - Active write path is limited to the five core derived fields plus kickoff-aware date handling. | ||||||||||||||||||||||||
| - Active write path covers the five core derived fields plus kickoff-aware date handling. | ||||||||||||||||||||||||
| - Additional direct issue-field writes are out of scope until a dedicated follow-up verification approves extension. | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| Verification reference: `.github/reports/audits/2026-06-07-private-project-issue-field-write-verification-879.md`. | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -5,7 +5,7 @@ description: Deprecated compatibility guidance for the legacy project meta sync | |
| entrypoint. The active contract lives in the project-meta-sync and | ||
| metadata-governance workflows plus their helper scripts. | ||
| version: v1.1 | ||
| last_updated: '2026-05-29' | ||
| last_updated: '2026-06-19' | ||
| owners: | ||
| - LightSpeed Engineering | ||
| tags: | ||
|
|
@@ -23,4 +23,12 @@ apply_to: | |
| - .github/workflows/metadata-governance.yml | ||
| - scripts/agents/includes/derive-project-fields.cjs | ||
| - scripts/agents/includes/issue-pr-metadata.cjs | ||
|
|
||
| ## Active Contract Summary | ||
|
|
||
| - Keep `status:*`, `priority:*`, and `type:*` labels canonical and one-hot. | ||
| - Treat issue types as the source of truth for canonical `type:*` intent and let | ||
| `project-meta-sync.yml` project that intent into GitHub Project fields. | ||
| - Allow the workflow to re-run on label changes so late-applied labels and issue | ||
| type corrections catch up in the project board. | ||
|
Comment on lines
+29
to
+33
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
These bullets are still before the closing Useful? React with 👍 / 👎. |
||
| --- | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For opened/edited/synchronize runs, this now uses the webhook snapshot rather than the item's current labels. Since
labeling.ymlruns independently on the same events and later label events also trigger this workflow, an older run that captured no labels can finish after the label-triggered run and overwrite the project fields with fallback/default values. Please fetch the current labels at update time or add per-item concurrency/cancellation before deriving fields.Useful? React with 👍 / 👎.