Skip to content

Commit 306d5ba

Browse files
feat(schema): multi-language path restructure + languages table
Phase B of the big plot migration. Layers {language} into every path so future R, JavaScript, Julia implementations fit without another schema change — today {language} is always "python". Filesystem: 5354 files moved via `git mv` (blame preserved). - plots/{spec}/implementations/{library}.py → plots/{spec}/implementations/python/{library}.py - plots/{spec}/metadata/{library}.yaml → plots/{spec}/metadata/python/{library}.yaml - Migration script: automation/scripts/migrate_paths_to_language.py (idempotent, re-runnable, used for this commit). Database: Alembic migration f2d9c8a1b4e0 creates: - `languages` table (analog `libraries`) with Python seed. - `libraries.language` (String) → `libraries.language_id` (FK → languages.id) — models.py adds a synonym so `library.language` keeps working. - `impls.language_id` FK with backfill to "python"; UQ broadened from (spec_id, library_id) to (spec_id, language_id, library_id). - `preview_url` → `preview_url_light`; new `preview_url_dark`, `preview_html_light`, `preview_html_dark` (Phase C will fill the dark variants). `Impl.preview_url` kept as synonym for preview_url_light so existing callers continue to work. Sync pipeline (`automation/scripts/sync_to_postgres.py`): language-aware discovery that iterates `implementations/{language}/` subdirs, preserves the legacy flat layout as fallback during transition, reads from `metadata/{language}/{library}.yaml`, and upserts using the new three-key constraint. LANGUAGES_METADATA now seeds the languages table before libraries. Workflows (`impl-generate`, `impl-merge`, `impl-repair`, `impl-review`): export `LANGUAGE=python` and thread it through every filesystem + GCS path. staging and production GCS paths now include the language segment: gs://anyplot-images/{staging,plots}/{spec}/{language}/{library}/... `sync-labels.yml` regex updated for the new path depth; `spec-create.yml` creates empty `python/` subdirs for new specs. Prompts (`impl-generate-claude.md`, `impl-repair-claude.md`): the {LANGUAGE} variable is declared and substituted into every path template. The change is strictly additive for existing data — all backfilled rows have language_id="python" and preview_url_light pointing at the current plot.png URLs. GCS objects stay at their current paths until Phase D regenerates each spec into the new {language}/{library}/plot-{theme}.png layout. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent ea0b101 commit 306d5ba

5,371 files changed

Lines changed: 525 additions & 130 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/impl-generate.yml

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,16 @@ jobs:
106106
DEPS_VAR="DEPS_${LIBRARY}"
107107
DEPS="${!DEPS_VAR}"
108108
109+
# Language: only python supported today. Future multi-language work will derive this per spec.
110+
LANGUAGE="python"
111+
109112
echo "specification_id=$SPEC_ID" >> $GITHUB_OUTPUT
110113
echo "library=$LIBRARY" >> $GITHUB_OUTPUT
114+
echo "language=$LANGUAGE" >> $GITHUB_OUTPUT
111115
echo "issue_number=$ISSUE" >> $GITHUB_OUTPUT
112116
echo "deps=$DEPS" >> $GITHUB_OUTPUT
113117
114-
echo "::notice::Generating $LIBRARY for $SPEC_ID (issue: ${ISSUE:-none})"
118+
echo "::notice::Generating $LANGUAGE/$LIBRARY for $SPEC_ID (issue: ${ISSUE:-none})"
115119
116120
- name: Checkout repository
117121
uses: actions/checkout@v6
@@ -232,10 +236,11 @@ jobs:
232236
id: existing
233237
env:
234238
SPEC_ID: ${{ steps.inputs.outputs.specification_id }}
239+
LANGUAGE: ${{ steps.inputs.outputs.language }}
235240
LIBRARY: ${{ steps.inputs.outputs.library }}
236241
run: |
237-
METADATA_FILE="plots/${SPEC_ID}/metadata/${LIBRARY}.yaml"
238-
IMPL_FILE="plots/${SPEC_ID}/implementations/${LIBRARY}.py"
242+
METADATA_FILE="plots/${SPEC_ID}/metadata/${LANGUAGE}/${LIBRARY}.yaml"
243+
IMPL_FILE="plots/${SPEC_ID}/implementations/${LANGUAGE}/${LIBRARY}.py"
239244
240245
if [ -f "$METADATA_FILE" ] && [ -f "$IMPL_FILE" ]; then
241246
echo "is_regeneration=true" >> $GITHUB_OUTPUT
@@ -244,13 +249,14 @@ jobs:
244249
echo "is_regeneration=false" >> $GITHUB_OUTPUT
245250
fi
246251
247-
- name: Ensure implementations directory exists
252+
- name: Ensure implementation directories exist
248253
env:
249254
SPEC_ID: ${{ steps.inputs.outputs.specification_id }}
255+
LANGUAGE: ${{ steps.inputs.outputs.language }}
250256
run: |
251-
# Create implementations directory if it doesn't exist (for new specs)
252-
mkdir -p "plots/${SPEC_ID}/implementations"
253-
echo "::notice::Ensured implementations directory exists"
257+
mkdir -p "plots/${SPEC_ID}/implementations/${LANGUAGE}"
258+
mkdir -p "plots/${SPEC_ID}/metadata/${LANGUAGE}"
259+
echo "::notice::Ensured implementation + metadata directories exist for language '${LANGUAGE}'"
254260
255261
- name: Run Claude Code to generate implementation
256262
id: claude
@@ -264,6 +270,7 @@ jobs:
264270
Read `prompts/workflow-prompts/impl-generate-claude.md` and follow those instructions.
265271
266272
Variables for this run:
273+
- LANGUAGE: ${{ steps.inputs.outputs.language }}
267274
- LIBRARY: ${{ steps.inputs.outputs.library }}
268275
- SPEC_ID: ${{ steps.inputs.outputs.specification_id }}
269276
- IS_REGENERATION: ${{ steps.existing.outputs.is_regeneration }}
@@ -280,6 +287,7 @@ jobs:
280287
Read `prompts/workflow-prompts/impl-generate-claude.md` and follow those instructions.
281288
282289
Variables for this run:
290+
- LANGUAGE: ${{ steps.inputs.outputs.language }}
283291
- LIBRARY: ${{ steps.inputs.outputs.library }}
284292
- SPEC_ID: ${{ steps.inputs.outputs.specification_id }}
285293
- IS_REGENERATION: ${{ steps.existing.outputs.is_regeneration }}
@@ -291,13 +299,16 @@ jobs:
291299
env:
292300
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
293301
SPEC_ID: ${{ steps.inputs.outputs.specification_id }}
302+
LANGUAGE: ${{ steps.inputs.outputs.language }}
294303
LIBRARY: ${{ steps.inputs.outputs.library }}
295304
ISSUE: ${{ steps.issue.outputs.number }}
296305
BRANCH: ${{ steps.branch.outputs.branch }}
297306
run: |
307+
IMPL_DIR="plots/${SPEC_ID}/implementations/${LANGUAGE}"
308+
298309
# Save plot files before git operations (they are not committed and would be lost)
299-
cp "plots/${SPEC_ID}/implementations/plot.png" "/tmp/plot.png" 2>/dev/null || true
300-
cp "plots/${SPEC_ID}/implementations/plot.html" "/tmp/plot.html" 2>/dev/null || true
310+
cp "${IMPL_DIR}/plot.png" "/tmp/plot.png" 2>/dev/null || true
311+
cp "${IMPL_DIR}/plot.html" "/tmp/plot.html" 2>/dev/null || true
301312
302313
# Configure git auth (Claude's action configured it, but it's gone now)
303314
git remote set-url origin "https://x-access-token:${GH_TOKEN}@github.com/${{ github.repository }}.git"
@@ -315,11 +326,13 @@ jobs:
315326
fi
316327
317328
# Restore plot files after git operations
318-
cp "/tmp/plot.png" "plots/${SPEC_ID}/implementations/plot.png" 2>/dev/null || true
319-
cp "/tmp/plot.html" "plots/${SPEC_ID}/implementations/plot.html" 2>/dev/null || true
329+
mkdir -p "${IMPL_DIR}"
330+
cp "/tmp/plot.png" "${IMPL_DIR}/plot.png" 2>/dev/null || true
331+
cp "/tmp/plot.html" "${IMPL_DIR}/plot.html" 2>/dev/null || true
320332
321333
# Now create metadata file
322-
METADATA_DIR="plots/${SPEC_ID}/metadata"
334+
METADATA_DIR="plots/${SPEC_ID}/metadata/${LANGUAGE}"
335+
mkdir -p "${METADATA_DIR}"
323336
METADATA_FILE="${METADATA_DIR}/${LIBRARY}.yaml"
324337
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
325338
@@ -363,7 +376,7 @@ jobs:
363376
PREVIEW_HTML="null"
364377
case "$LIBRARY" in
365378
plotly|bokeh|altair|highcharts|pygal|letsplot)
366-
PREVIEW_HTML="https://storage.googleapis.com/anyplot-images/plots/${SPEC_ID}/${LIBRARY}/plot.html"
379+
PREVIEW_HTML="https://storage.googleapis.com/anyplot-images/plots/${SPEC_ID}/${LANGUAGE}/${LIBRARY}/plot.html"
367380
;;
368381
esac
369382
@@ -373,6 +386,7 @@ jobs:
373386
import yaml
374387
lib = '$LIBRARY'
375388
spec = '$SPEC_ID'
389+
language = '$LANGUAGE'
376390
ts = '$TIMESTAMP'
377391
run_id = ${{ github.run_id }}
378392
issue = int('$ISSUE' or '0')
@@ -382,6 +396,7 @@ jobs:
382396
metadata_file = '$METADATA_FILE'
383397
data = {
384398
'library': lib,
399+
'language': language,
385400
'specification_id': spec,
386401
'created': ts,
387402
'updated': ts,
@@ -390,7 +405,7 @@ jobs:
390405
'issue': issue,
391406
'python_version': py_ver,
392407
'library_version': lib_ver,
393-
'preview_url': f'https://storage.googleapis.com/anyplot-images/plots/{spec}/{lib}/plot.png',
408+
'preview_url': f'https://storage.googleapis.com/anyplot-images/plots/{spec}/{language}/{lib}/plot.png',
394409
'preview_html': preview_html if preview_html != 'null' else None,
395410
'quality_score': None,
396411
'review': {'strengths': [], 'weaknesses': []}
@@ -405,7 +420,7 @@ jobs:
405420
git config user.name "github-actions[bot]"
406421
git config user.email "github-actions[bot]@users.noreply.github.com"
407422
408-
IMPL_FILE="plots/${SPEC_ID}/implementations/${LIBRARY}.py"
423+
IMPL_FILE="plots/${SPEC_ID}/implementations/${LANGUAGE}/${LIBRARY}.py"
409424
410425
# Verify implementation file exists in the repository (Claude should have committed it)
411426
if ! git ls-files --error-unmatch "$IMPL_FILE" >/dev/null 2>&1; then
@@ -437,11 +452,12 @@ jobs:
437452
- name: Process plot images
438453
env:
439454
SPEC_ID: ${{ steps.inputs.outputs.specification_id }}
455+
LANGUAGE: ${{ steps.inputs.outputs.language }}
440456
run: |
441-
IMPL_DIR="plots/${SPEC_ID}/implementations"
457+
IMPL_DIR="plots/${SPEC_ID}/implementations/${LANGUAGE}"
442458
443459
if [ ! -f "$IMPL_DIR/plot.png" ]; then
444-
echo "::error::No plot.png found - implementation failed to generate image"
460+
echo "::error::No plot.png found at ${IMPL_DIR}/plot.png - implementation failed to generate image"
445461
exit 1
446462
fi
447463
@@ -466,6 +482,7 @@ jobs:
466482
env:
467483
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
468484
SPEC_ID: ${{ steps.inputs.outputs.specification_id }}
485+
LANGUAGE: ${{ steps.inputs.outputs.language }}
469486
LIBRARY: ${{ steps.inputs.outputs.library }}
470487
ISSUE: ${{ steps.issue.outputs.number }}
471488
BRANCH: ${{ steps.branch.outputs.branch }}
@@ -481,11 +498,11 @@ jobs:
481498
fi
482499
483500
# Create PR body
484-
BODY="## Implementation: \`${SPEC_ID}\` - ${LIBRARY}
501+
BODY="## Implementation: \`${SPEC_ID}\` - ${LANGUAGE}/${LIBRARY}
485502
486-
Implements the **${LIBRARY}** version of \`${SPEC_ID}\`.
503+
Implements the **${LANGUAGE}/${LIBRARY}** version of \`${SPEC_ID}\`.
487504
488-
**File:** \`plots/${SPEC_ID}/implementations/${LIBRARY}.py\`"
505+
**File:** \`plots/${SPEC_ID}/implementations/${LANGUAGE}/${LIBRARY}.py\`"
489506
490507
if [ -n "$ISSUE" ]; then
491508
BODY="${BODY}
@@ -527,11 +544,12 @@ jobs:
527544
if: steps.pr.outputs.pr_exists == 'true'
528545
env:
529546
SPEC_ID: ${{ steps.inputs.outputs.specification_id }}
547+
LANGUAGE: ${{ steps.inputs.outputs.language }}
530548
LIBRARY: ${{ steps.inputs.outputs.library }}
531549
run: |
532-
IMPL_DIR="plots/${SPEC_ID}/implementations"
533-
STAGING_PATH="gs://anyplot-images/staging/${SPEC_ID}/${LIBRARY}"
534-
PUBLIC_URL="https://storage.googleapis.com/anyplot-images/staging/${SPEC_ID}/${LIBRARY}"
550+
IMPL_DIR="plots/${SPEC_ID}/implementations/${LANGUAGE}"
551+
STAGING_PATH="gs://anyplot-images/staging/${SPEC_ID}/${LANGUAGE}/${LIBRARY}"
552+
PUBLIC_URL="https://storage.googleapis.com/anyplot-images/staging/${SPEC_ID}/${LANGUAGE}/${LIBRARY}"
535553
536554
# Upload all plot images (original + responsive variants)
537555
if [ -f "$IMPL_DIR/plot.png" ]; then

.github/workflows/impl-merge.yml

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,23 +80,29 @@ jobs:
8080
SPEC_ID=$(echo "$BRANCH" | cut -d'/' -f2)
8181
LIBRARY=$(echo "$BRANCH" | cut -d'/' -f3)
8282
83+
# Language: only python supported today. If future branches encode language,
84+
# parse it from the branch name here.
85+
LANGUAGE="python"
86+
8387
echo "specification_id=$SPEC_ID" >> $GITHUB_OUTPUT
8488
echo "library=$LIBRARY" >> $GITHUB_OUTPUT
89+
echo "language=$LANGUAGE" >> $GITHUB_OUTPUT
8590
8691
- name: Validate PR completeness before merge
8792
if: steps.check.outputs.should_run == 'true'
8893
env:
8994
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
9095
SPEC_ID: ${{ steps.extract.outputs.specification_id }}
96+
LANGUAGE: ${{ steps.extract.outputs.language }}
9197
LIBRARY: ${{ steps.extract.outputs.library }}
9298
BRANCH: ${{ steps.check.outputs.branch }}
9399
PR_NUM: ${{ steps.check.outputs.pr_number }}
94100
run: |
95101
# Fetch the PR branch to check its contents
96102
git fetch origin "$BRANCH"
97103
98-
IMPL_FILE="plots/${SPEC_ID}/implementations/${LIBRARY}.py"
99-
META_FILE="plots/${SPEC_ID}/metadata/${LIBRARY}.yaml"
104+
IMPL_FILE="plots/${SPEC_ID}/implementations/${LANGUAGE}/${LIBRARY}.py"
105+
META_FILE="plots/${SPEC_ID}/metadata/${LANGUAGE}/${LIBRARY}.yaml"
100106
101107
# Check if implementation file exists on the PR branch
102108
if ! git show "origin/${BRANCH}:${IMPL_FILE}" &>/dev/null; then
@@ -198,10 +204,11 @@ jobs:
198204
if: steps.check.outputs.should_run == 'true'
199205
env:
200206
SPEC_ID: ${{ steps.extract.outputs.specification_id }}
207+
LANGUAGE: ${{ steps.extract.outputs.language }}
201208
LIBRARY: ${{ steps.extract.outputs.library }}
202209
run: |
203-
STAGING="gs://anyplot-images/staging/${SPEC_ID}/${LIBRARY}"
204-
PRODUCTION="gs://anyplot-images/plots/${SPEC_ID}/${LIBRARY}"
210+
STAGING="gs://anyplot-images/staging/${SPEC_ID}/${LANGUAGE}/${LIBRARY}"
211+
PRODUCTION="gs://anyplot-images/plots/${SPEC_ID}/${LANGUAGE}/${LIBRARY}"
205212
206213
# Copy from staging to production
207214
gsutil -m -h "Cache-Control:public, max-age=604800" cp -r "${STAGING}/*" "${PRODUCTION}/" 2>/dev/null || echo "No staging files to promote"
@@ -235,6 +242,7 @@ jobs:
235242
env:
236243
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
237244
ISSUE: ${{ steps.issue.outputs.number }}
245+
LANGUAGE: ${{ steps.extract.outputs.language }}
238246
LIBRARY: ${{ steps.extract.outputs.library }}
239247
SPEC_ID: ${{ steps.extract.outputs.specification_id }}
240248
PR_NUM: ${{ steps.check.outputs.pr_number }}
@@ -253,7 +261,7 @@ jobs:
253261
254262
BODY="${BODY}
255263
256-
**Preview:** [View image](https://storage.googleapis.com/anyplot-images/plots/${SPEC_ID}/${LIBRARY}/plot.png)
264+
**Preview:** [View image](https://storage.googleapis.com/anyplot-images/plots/${SPEC_ID}/${LANGUAGE}/${LIBRARY}/plot.png)
257265
258266
---
259267
:robot: *[impl-merge](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})*"

.github/workflows/impl-repair.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ jobs:
121121
Read `prompts/workflow-prompts/impl-repair-claude.md` and follow those instructions.
122122
123123
Variables for this run:
124+
- LANGUAGE: python
124125
- LIBRARY: ${{ inputs.library }}
125126
- SPEC_ID: ${{ inputs.specification_id }}
126127
- ATTEMPT: ${{ inputs.attempt }}
@@ -139,6 +140,7 @@ jobs:
139140
Read `prompts/workflow-prompts/impl-repair-claude.md` and follow those instructions.
140141
141142
Variables for this run:
143+
- LANGUAGE: python
142144
- LIBRARY: ${{ inputs.library }}
143145
- SPEC_ID: ${{ inputs.specification_id }}
144146
- ATTEMPT: ${{ inputs.attempt }}
@@ -149,8 +151,9 @@ jobs:
149151
env:
150152
SPEC_ID: ${{ inputs.specification_id }}
151153
LIBRARY: ${{ inputs.library }}
154+
LANGUAGE: python
152155
run: |
153-
IMPL_DIR="plots/${SPEC_ID}/implementations"
156+
IMPL_DIR="plots/${SPEC_ID}/implementations/${LANGUAGE}"
154157
155158
if [ ! -f "$IMPL_DIR/plot.png" ]; then
156159
echo "::warning::No plot.png found after repair"
@@ -186,9 +189,10 @@ jobs:
186189
env:
187190
SPEC_ID: ${{ inputs.specification_id }}
188191
LIBRARY: ${{ inputs.library }}
192+
LANGUAGE: python
189193
run: |
190-
IMPL_DIR="plots/${SPEC_ID}/implementations"
191-
STAGING_PATH="gs://anyplot-images/staging/${SPEC_ID}/${LIBRARY}"
194+
IMPL_DIR="plots/${SPEC_ID}/implementations/${LANGUAGE}"
195+
STAGING_PATH="gs://anyplot-images/staging/${SPEC_ID}/${LANGUAGE}/${LIBRARY}"
192196
193197
# Upload all plot images (original + responsive variants)
194198
if [ -f "$IMPL_DIR/plot.png" ]; then

.github/workflows/impl-review.yml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,10 @@ jobs:
102102
env:
103103
SPEC_ID: ${{ steps.pr.outputs.specification_id }}
104104
LIBRARY: ${{ steps.pr.outputs.library }}
105+
LANGUAGE: python
105106
run: |
106107
mkdir -p plot_images
107-
gsutil -m cp "gs://anyplot-images/staging/${SPEC_ID}/${LIBRARY}/*" plot_images/ 2>/dev/null || true
108+
gsutil -m cp "gs://anyplot-images/staging/${SPEC_ID}/${LANGUAGE}/${LIBRARY}/*" plot_images/ 2>/dev/null || true
108109
ls -la plot_images/
109110
110111
- name: Verify plot image exists
@@ -255,11 +256,12 @@ jobs:
255256
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
256257
SPEC_ID: ${{ steps.pr.outputs.specification_id }}
257258
LIBRARY: ${{ steps.pr.outputs.library }}
259+
LANGUAGE: python
258260
SCORE: ${{ steps.score.outputs.score }}
259261
BRANCH: ${{ steps.pr.outputs.branch }}
260262
run: |
261-
METADATA_FILE="plots/${SPEC_ID}/metadata/${LIBRARY}.yaml"
262-
IMPL_FILE="plots/${SPEC_ID}/implementations/${LIBRARY}.py"
263+
METADATA_FILE="plots/${SPEC_ID}/metadata/${LANGUAGE}/${LIBRARY}.yaml"
264+
IMPL_FILE="plots/${SPEC_ID}/implementations/${LANGUAGE}/${LIBRARY}.py"
263265
264266
# Configure git auth and checkout the PR branch
265267
git remote set-url origin "https://x-access-token:${GH_TOKEN}@github.com/${{ github.repository }}.git"
@@ -462,6 +464,7 @@ jobs:
462464
PR_NUM: ${{ steps.pr.outputs.pr_number }}
463465
SPEC_ID: ${{ steps.pr.outputs.specification_id }}
464466
LIBRARY: ${{ steps.pr.outputs.library }}
467+
LANGUAGE: python
465468
SCORE: ${{ steps.score.outputs.score }}
466469
ATTEMPT: ${{ steps.attempts.outputs.display }}
467470
ATTEMPT_COUNT: ${{ steps.attempts.outputs.count }}
@@ -542,8 +545,8 @@ jobs:
542545
gh pr close "$PR_NUM"
543546
544547
# Remove old implementation from main if it exists
545-
IMPL_FILE="plots/${SPEC_ID}/implementations/${LIBRARY}.py"
546-
META_FILE="plots/${SPEC_ID}/metadata/${LIBRARY}.yaml"
548+
IMPL_FILE="plots/${SPEC_ID}/implementations/${LANGUAGE}/${LIBRARY}.py"
549+
META_FILE="plots/${SPEC_ID}/metadata/${LANGUAGE}/${LIBRARY}.yaml"
547550
548551
git fetch origin main
549552
if git show origin/main:"$IMPL_FILE" &>/dev/null; then

.github/workflows/report-validate.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ jobs:
103103
104104
4. **If implementation issue, validate the library exists:**
105105
```bash
106-
ls plots/{spec_id}/implementations/{library}.py
106+
# Language is python unless the report explicitly references another language
107+
ls plots/{spec_id}/implementations/python/{library}.py
107108
```
108109
If NOT found:
109110
- Post comment: "Implementation `{library}` not found for `{spec_id}`."
@@ -114,8 +115,8 @@ jobs:
114115
5. **Read relevant files:**
115116
- `plots/{spec_id}/specification.md`
116117
- `plots/{spec_id}/specification.yaml`
117-
- `plots/{spec_id}/implementations/{library}.py` (if impl issue)
118-
- `plots/{spec_id}/metadata/{library}.yaml` (if impl issue)
118+
- `plots/{spec_id}/implementations/python/{library}.py` (if impl issue)
119+
- `plots/{spec_id}/metadata/python/{library}.yaml` (if impl issue)
119120
- Optionally: read other files in `plots/{spec_id}/` if needed for analysis
120121
121122
6. **Post structured analysis comment** following the format in the prompt file.

.github/workflows/spec-create.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ jobs:
135135
- `issue`: ${{ github.event.issue.number }}
136136
- `suggested`: ${{ github.event.issue.user.login }}
137137
- `tags`: Follow tagging-system.md guide (4 dimensions: plot_type, data_type, domain, features)
138-
- Create empty folder: `plots/{specification-id}/implementations/`
139-
- Create empty folder: `plots/{specification-id}/metadata/`
138+
- Create empty folder: `plots/{specification-id}/implementations/python/`
139+
- Create empty folder: `plots/{specification-id}/metadata/python/`
140140
141141
8. **Commit and push:**
142142
```bash
@@ -239,8 +239,8 @@ jobs:
239239
- `issue`: ${{ github.event.issue.number }}
240240
- `suggested`: ${{ github.event.issue.user.login }}
241241
- `tags`: Follow tagging-system.md guide (4 dimensions: plot_type, data_type, domain, features)
242-
- Create empty folder: `plots/{specification-id}/implementations/`
243-
- Create empty folder: `plots/{specification-id}/metadata/`
242+
- Create empty folder: `plots/{specification-id}/implementations/python/`
243+
- Create empty folder: `plots/{specification-id}/metadata/python/`
244244
245245
8. **Commit and push:**
246246
```bash

0 commit comments

Comments
 (0)