feat: move data normalization from Python consumers to Rust extractor… #1141
build.yml
on: push
detect-changes
5s
run-code-quality
/
code-quality
2m 21s
Matrix: run-e2e-tests / e2e-test
run-security
/
Python Security
45s
run-security
/
Semgrep CE Scan
57s
run-security
/
Rust Security
22s
run-security
/
Secret Scanning
13s
run-security
/
Container Scanning
31s
run-docker-compose-validate
/
validate-compose
10s
run-tests
/
test-api
49s
run-tests
/
test-common
54s
run-tests
/
test-dashboard
1m 1s
run-tests
/
test-explore
33s
run-tests
/
test-insights
28s
run-tests
/
test-mcp-server
28s
run-tests
/
test-brainzgraphinator
24s
run-tests
/
test-graphinator
44s
run-tests
/
test-schema-init
20s
run-tests
/
test-tableinator
42s
run-tests
/
test-brainztableinator
33s
run-tests
/
test-js
25s
run-tests
/
test-extractor
2m 55s
Matrix: run-docker-validate / validate-dockerfiles
Matrix: build-discogsography
Annotations
44 warnings and 20 notices
|
run-code-quality / code-quality
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, alexellis/arkade-get@1eef818e467c387d3f50cfe0d2c565d1cbe82b03, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-docker-compose-validate / validate-compose
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: alexellis/arkade-get@1eef818e467c387d3f50cfe0d2c565d1cbe82b03. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-tests / test-brainzgraphinator
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-tests / test-mcp-server
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-tests / test-insights
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-security / Container Scanning
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-tests / test-brainztableinator
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-tests / test-explore
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-tests / test-tableinator
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-tests / test-schema-init
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-security / Python Security
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-tests / test-api
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-tests / test-common
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-tests / test-graphinator
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-tests / test-dashboard
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-e2e-tests / Test firefox
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-e2e-tests / Test chromium
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-e2e-tests / Test webkit
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-e2e-tests / Test webkit - iPad Pro 11
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
run-e2e-tests / Test webkit - iPhone 15
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build-discogsography (brainzgraphinator, true)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build-discogsography (brainzgraphinator, true)
embed field value must be shorter than 1024, got 3426
[`accb054`](https://github.com/SimplicityGuy/discogsography/commit/accb054bd4aba1dd2300a05026a0aca2f881e869) feat: move data normalization from Python consumers to Rust extractor (#290) (#294)
* docs: add design spec for moving normalizer logic to Rust extractor (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: add implementation plan for normalizer-to-extractor migration (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add normalize.rs with generic helpers
Add strip_at_prefixes, unwrap_container, and ensure_list functions
for transforming XML-style JSON conventions into flat format.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add artist normalization to normalize.rs
Add normalize_item_list helper and normalize_artist function to flatten
members, groups, and aliases from XML container format to flat arrays.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add label normalization to normalize.rs
Add normalize_label function to handle parentLabel strip_at_prefixes
and sublabels container flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add master normalization to normalize.rs
Add normalize_string_list helper and normalize_master function to handle
@id stripping, artists container, genres, and styles flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add release normalization to normalize.rs
Add normalize_release function handling artists, labels, master_id
extraction, genres, styles, extraartists, and formats with @-prefix
stripping. Includes full pipeline integration test.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(extractor): address code review — clarify doc, add edge case tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): wire normalize_record into validator pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: simplify Python normalizer — structural normalization moved to Rust extractor
- Gut data_normalizer.py to only retain year parsing and normalize_record()
- Replace extract_format_names with inline list comprehension in graphinator
- Rewrite normalizer tests for simplified module
- Update all test fixtures to flat extractor output format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(extractor): reorder normalize after evaluate_rules to preserve rule path resolution
Rules use dot-notation paths like "genres.genre" that match the XML
structure. Moving normalize_record after evaluate_rules ensures rules
operate on the pre-normalized shape while the content hash still
reflects the normalized output consumers see.
Also updates stale comment in tableinator.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test(extractor): add coverage tests for defensive branches in normalize.rs
Covers: non-object inputs to normalizers, string/number items in
normalize_item_list, bare string in unwrap_container, non-object
format items. Raises line coverage from 93.4% to 97.7%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
build-discogsography (dashboard, true)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build-discogsography (dashboard, true)
embed field value must be shorter than 1024, got 3426
[`accb054`](https://github.com/SimplicityGuy/discogsography/commit/accb054bd4aba1dd2300a05026a0aca2f881e869) feat: move data normalization from Python consumers to Rust extractor (#290) (#294)
* docs: add design spec for moving normalizer logic to Rust extractor (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: add implementation plan for normalizer-to-extractor migration (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add normalize.rs with generic helpers
Add strip_at_prefixes, unwrap_container, and ensure_list functions
for transforming XML-style JSON conventions into flat format.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add artist normalization to normalize.rs
Add normalize_item_list helper and normalize_artist function to flatten
members, groups, and aliases from XML container format to flat arrays.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add label normalization to normalize.rs
Add normalize_label function to handle parentLabel strip_at_prefixes
and sublabels container flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add master normalization to normalize.rs
Add normalize_string_list helper and normalize_master function to handle
@id stripping, artists container, genres, and styles flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add release normalization to normalize.rs
Add normalize_release function handling artists, labels, master_id
extraction, genres, styles, extraartists, and formats with @-prefix
stripping. Includes full pipeline integration test.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(extractor): address code review — clarify doc, add edge case tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): wire normalize_record into validator pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: simplify Python normalizer — structural normalization moved to Rust extractor
- Gut data_normalizer.py to only retain year parsing and normalize_record()
- Replace extract_format_names with inline list comprehension in graphinator
- Rewrite normalizer tests for simplified module
- Update all test fixtures to flat extractor output format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(extractor): reorder normalize after evaluate_rules to preserve rule path resolution
Rules use dot-notation paths like "genres.genre" that match the XML
structure. Moving normalize_record after evaluate_rules ensures rules
operate on the pre-normalized shape while the content hash still
reflects the normalized output consumers see.
Also updates stale comment in tableinator.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test(extractor): add coverage tests for defensive branches in normalize.rs
Covers: non-object inputs to normalizers, string/number items in
normalize_item_list, bare string in unwrap_container, non-object
format items. Raises line coverage from 93.4% to 97.7%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
build-discogsography (tableinator, true)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build-discogsography (tableinator, true)
embed field value must be shorter than 1024, got 3426
[`accb054`](https://github.com/SimplicityGuy/discogsography/commit/accb054bd4aba1dd2300a05026a0aca2f881e869) feat: move data normalization from Python consumers to Rust extractor (#290) (#294)
* docs: add design spec for moving normalizer logic to Rust extractor (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: add implementation plan for normalizer-to-extractor migration (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add normalize.rs with generic helpers
Add strip_at_prefixes, unwrap_container, and ensure_list functions
for transforming XML-style JSON conventions into flat format.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add artist normalization to normalize.rs
Add normalize_item_list helper and normalize_artist function to flatten
members, groups, and aliases from XML container format to flat arrays.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add label normalization to normalize.rs
Add normalize_label function to handle parentLabel strip_at_prefixes
and sublabels container flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add master normalization to normalize.rs
Add normalize_string_list helper and normalize_master function to handle
@id stripping, artists container, genres, and styles flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add release normalization to normalize.rs
Add normalize_release function handling artists, labels, master_id
extraction, genres, styles, extraartists, and formats with @-prefix
stripping. Includes full pipeline integration test.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(extractor): address code review — clarify doc, add edge case tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): wire normalize_record into validator pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: simplify Python normalizer — structural normalization moved to Rust extractor
- Gut data_normalizer.py to only retain year parsing and normalize_record()
- Replace extract_format_names with inline list comprehension in graphinator
- Rewrite normalizer tests for simplified module
- Update all test fixtures to flat extractor output format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(extractor): reorder normalize after evaluate_rules to preserve rule path resolution
Rules use dot-notation paths like "genres.genre" that match the XML
structure. Moving normalize_record after evaluate_rules ensures rules
operate on the pre-normalized shape while the content hash still
reflects the normalized output consumers see.
Also updates stale comment in tableinator.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test(extractor): add coverage tests for defensive branches in normalize.rs
Covers: non-object inputs to normalizers, string/number items in
normalize_item_list, bare string in unwrap_container, non-object
format items. Raises line coverage from 93.4% to 97.7%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
build-discogsography (graphinator, true)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build-discogsography (graphinator, true)
embed field value must be shorter than 1024, got 3426
[`accb054`](https://github.com/SimplicityGuy/discogsography/commit/accb054bd4aba1dd2300a05026a0aca2f881e869) feat: move data normalization from Python consumers to Rust extractor (#290) (#294)
* docs: add design spec for moving normalizer logic to Rust extractor (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: add implementation plan for normalizer-to-extractor migration (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add normalize.rs with generic helpers
Add strip_at_prefixes, unwrap_container, and ensure_list functions
for transforming XML-style JSON conventions into flat format.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add artist normalization to normalize.rs
Add normalize_item_list helper and normalize_artist function to flatten
members, groups, and aliases from XML container format to flat arrays.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add label normalization to normalize.rs
Add normalize_label function to handle parentLabel strip_at_prefixes
and sublabels container flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add master normalization to normalize.rs
Add normalize_string_list helper and normalize_master function to handle
@id stripping, artists container, genres, and styles flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add release normalization to normalize.rs
Add normalize_release function handling artists, labels, master_id
extraction, genres, styles, extraartists, and formats with @-prefix
stripping. Includes full pipeline integration test.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(extractor): address code review — clarify doc, add edge case tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): wire normalize_record into validator pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: simplify Python normalizer — structural normalization moved to Rust extractor
- Gut data_normalizer.py to only retain year parsing and normalize_record()
- Replace extract_format_names with inline list comprehension in graphinator
- Rewrite normalizer tests for simplified module
- Update all test fixtures to flat extractor output format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(extractor): reorder normalize after evaluate_rules to preserve rule path resolution
Rules use dot-notation paths like "genres.genre" that match the XML
structure. Moving normalize_record after evaluate_rules ensures rules
operate on the pre-normalized shape while the content hash still
reflects the normalized output consumers see.
Also updates stale comment in tableinator.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test(extractor): add coverage tests for defensive branches in normalize.rs
Covers: non-object inputs to normalizers, string/number items in
normalize_item_list, bare string in unwrap_container, non-object
format items. Raises line coverage from 93.4% to 97.7%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
build-discogsography (explore, true)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build-discogsography (explore, true)
embed field value must be shorter than 1024, got 3426
[`accb054`](https://github.com/SimplicityGuy/discogsography/commit/accb054bd4aba1dd2300a05026a0aca2f881e869) feat: move data normalization from Python consumers to Rust extractor (#290) (#294)
* docs: add design spec for moving normalizer logic to Rust extractor (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: add implementation plan for normalizer-to-extractor migration (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add normalize.rs with generic helpers
Add strip_at_prefixes, unwrap_container, and ensure_list functions
for transforming XML-style JSON conventions into flat format.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add artist normalization to normalize.rs
Add normalize_item_list helper and normalize_artist function to flatten
members, groups, and aliases from XML container format to flat arrays.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add label normalization to normalize.rs
Add normalize_label function to handle parentLabel strip_at_prefixes
and sublabels container flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add master normalization to normalize.rs
Add normalize_string_list helper and normalize_master function to handle
@id stripping, artists container, genres, and styles flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add release normalization to normalize.rs
Add normalize_release function handling artists, labels, master_id
extraction, genres, styles, extraartists, and formats with @-prefix
stripping. Includes full pipeline integration test.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(extractor): address code review — clarify doc, add edge case tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): wire normalize_record into validator pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: simplify Python normalizer — structural normalization moved to Rust extractor
- Gut data_normalizer.py to only retain year parsing and normalize_record()
- Replace extract_format_names with inline list comprehension in graphinator
- Rewrite normalizer tests for simplified module
- Update all test fixtures to flat extractor output format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(extractor): reorder normalize after evaluate_rules to preserve rule path resolution
Rules use dot-notation paths like "genres.genre" that match the XML
structure. Moving normalize_record after evaluate_rules ensures rules
operate on the pre-normalized shape while the content hash still
reflects the normalized output consumers see.
Also updates stale comment in tableinator.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test(extractor): add coverage tests for defensive branches in normalize.rs
Covers: non-object inputs to normalizers, string/number items in
normalize_item_list, bare string in unwrap_container, non-object
format items. Raises line coverage from 93.4% to 97.7%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
build-discogsography (brainztableinator, true)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build-discogsography (brainztableinator, true)
embed field value must be shorter than 1024, got 3426
[`accb054`](https://github.com/SimplicityGuy/discogsography/commit/accb054bd4aba1dd2300a05026a0aca2f881e869) feat: move data normalization from Python consumers to Rust extractor (#290) (#294)
* docs: add design spec for moving normalizer logic to Rust extractor (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: add implementation plan for normalizer-to-extractor migration (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add normalize.rs with generic helpers
Add strip_at_prefixes, unwrap_container, and ensure_list functions
for transforming XML-style JSON conventions into flat format.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add artist normalization to normalize.rs
Add normalize_item_list helper and normalize_artist function to flatten
members, groups, and aliases from XML container format to flat arrays.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add label normalization to normalize.rs
Add normalize_label function to handle parentLabel strip_at_prefixes
and sublabels container flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add master normalization to normalize.rs
Add normalize_string_list helper and normalize_master function to handle
@id stripping, artists container, genres, and styles flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add release normalization to normalize.rs
Add normalize_release function handling artists, labels, master_id
extraction, genres, styles, extraartists, and formats with @-prefix
stripping. Includes full pipeline integration test.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(extractor): address code review — clarify doc, add edge case tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): wire normalize_record into validator pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: simplify Python normalizer — structural normalization moved to Rust extractor
- Gut data_normalizer.py to only retain year parsing and normalize_record()
- Replace extract_format_names with inline list comprehension in graphinator
- Rewrite normalizer tests for simplified module
- Update all test fixtures to flat extractor output format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(extractor): reorder normalize after evaluate_rules to preserve rule path resolution
Rules use dot-notation paths like "genres.genre" that match the XML
structure. Moving normalize_record after evaluate_rules ensures rules
operate on the pre-normalized shape while the content hash still
reflects the normalized output consumers see.
Also updates stale comment in tableinator.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test(extractor): add coverage tests for defensive branches in normalize.rs
Covers: non-object inputs to normalizers, string/number items in
normalize_item_list, bare string in unwrap_container, non-object
format items. Raises line coverage from 93.4% to 97.7%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
build-discogsography (api, true)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build-discogsography (api, true)
embed field value must be shorter than 1024, got 3426
[`accb054`](https://github.com/SimplicityGuy/discogsography/commit/accb054bd4aba1dd2300a05026a0aca2f881e869) feat: move data normalization from Python consumers to Rust extractor (#290) (#294)
* docs: add design spec for moving normalizer logic to Rust extractor (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: add implementation plan for normalizer-to-extractor migration (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add normalize.rs with generic helpers
Add strip_at_prefixes, unwrap_container, and ensure_list functions
for transforming XML-style JSON conventions into flat format.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add artist normalization to normalize.rs
Add normalize_item_list helper and normalize_artist function to flatten
members, groups, and aliases from XML container format to flat arrays.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add label normalization to normalize.rs
Add normalize_label function to handle parentLabel strip_at_prefixes
and sublabels container flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add master normalization to normalize.rs
Add normalize_string_list helper and normalize_master function to handle
@id stripping, artists container, genres, and styles flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add release normalization to normalize.rs
Add normalize_release function handling artists, labels, master_id
extraction, genres, styles, extraartists, and formats with @-prefix
stripping. Includes full pipeline integration test.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(extractor): address code review — clarify doc, add edge case tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): wire normalize_record into validator pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: simplify Python normalizer — structural normalization moved to Rust extractor
- Gut data_normalizer.py to only retain year parsing and normalize_record()
- Replace extract_format_names with inline list comprehension in graphinator
- Rewrite normalizer tests for simplified module
- Update all test fixtures to flat extractor output format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(extractor): reorder normalize after evaluate_rules to preserve rule path resolution
Rules use dot-notation paths like "genres.genre" that match the XML
structure. Moving normalize_record after evaluate_rules ensures rules
operate on the pre-normalized shape while the content hash still
reflects the normalized output consumers see.
Also updates stale comment in tableinator.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test(extractor): add coverage tests for defensive branches in normalize.rs
Covers: non-object inputs to normalizers, string/number items in
normalize_item_list, bare string in unwrap_container, non-object
format items. Raises line coverage from 93.4% to 97.7%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
Sensitive data should not be used in the ARG or ENV commands:
api/Dockerfile#L113
SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "JWT_SECRET_KEY")
More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
|
|
Sensitive data should not be used in the ARG or ENV commands:
api/Dockerfile#L113
SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "POSTGRES_PASSWORD")
More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
|
|
build-discogsography (insights, true)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build-discogsography (insights, true)
embed field value must be shorter than 1024, got 3426
[`accb054`](https://github.com/SimplicityGuy/discogsography/commit/accb054bd4aba1dd2300a05026a0aca2f881e869) feat: move data normalization from Python consumers to Rust extractor (#290) (#294)
* docs: add design spec for moving normalizer logic to Rust extractor (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: add implementation plan for normalizer-to-extractor migration (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add normalize.rs with generic helpers
Add strip_at_prefixes, unwrap_container, and ensure_list functions
for transforming XML-style JSON conventions into flat format.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add artist normalization to normalize.rs
Add normalize_item_list helper and normalize_artist function to flatten
members, groups, and aliases from XML container format to flat arrays.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add label normalization to normalize.rs
Add normalize_label function to handle parentLabel strip_at_prefixes
and sublabels container flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add master normalization to normalize.rs
Add normalize_string_list helper and normalize_master function to handle
@id stripping, artists container, genres, and styles flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add release normalization to normalize.rs
Add normalize_release function handling artists, labels, master_id
extraction, genres, styles, extraartists, and formats with @-prefix
stripping. Includes full pipeline integration test.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(extractor): address code review — clarify doc, add edge case tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): wire normalize_record into validator pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: simplify Python normalizer — structural normalization moved to Rust extractor
- Gut data_normalizer.py to only retain year parsing and normalize_record()
- Replace extract_format_names with inline list comprehension in graphinator
- Rewrite normalizer tests for simplified module
- Update all test fixtures to flat extractor output format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(extractor): reorder normalize after evaluate_rules to preserve rule path resolution
Rules use dot-notation paths like "genres.genre" that match the XML
structure. Moving normalize_record after evaluate_rules ensures rules
operate on the pre-normalized shape while the content hash still
reflects the normalized output consumers see.
Also updates stale comment in tableinator.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test(extractor): add coverage tests for defensive branches in normalize.rs
Covers: non-object inputs to normalizers, string/number items in
normalize_item_list, bare string in unwrap_container, non-object
format items. Raises line coverage from 93.4% to 97.7%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
build-discogsography (schema-init, true)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build-discogsography (schema-init, true)
embed field value must be shorter than 1024, got 3426
[`accb054`](https://github.com/SimplicityGuy/discogsography/commit/accb054bd4aba1dd2300a05026a0aca2f881e869) feat: move data normalization from Python consumers to Rust extractor (#290) (#294)
* docs: add design spec for moving normalizer logic to Rust extractor (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: add implementation plan for normalizer-to-extractor migration (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add normalize.rs with generic helpers
Add strip_at_prefixes, unwrap_container, and ensure_list functions
for transforming XML-style JSON conventions into flat format.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add artist normalization to normalize.rs
Add normalize_item_list helper and normalize_artist function to flatten
members, groups, and aliases from XML container format to flat arrays.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add label normalization to normalize.rs
Add normalize_label function to handle parentLabel strip_at_prefixes
and sublabels container flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add master normalization to normalize.rs
Add normalize_string_list helper and normalize_master function to handle
@id stripping, artists container, genres, and styles flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add release normalization to normalize.rs
Add normalize_release function handling artists, labels, master_id
extraction, genres, styles, extraartists, and formats with @-prefix
stripping. Includes full pipeline integration test.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(extractor): address code review — clarify doc, add edge case tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): wire normalize_record into validator pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: simplify Python normalizer — structural normalization moved to Rust extractor
- Gut data_normalizer.py to only retain year parsing and normalize_record()
- Replace extract_format_names with inline list comprehension in graphinator
- Rewrite normalizer tests for simplified module
- Update all test fixtures to flat extractor output format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(extractor): reorder normalize after evaluate_rules to preserve rule path resolution
Rules use dot-notation paths like "genres.genre" that match the XML
structure. Moving normalize_record after evaluate_rules ensures rules
operate on the pre-normalized shape while the content hash still
reflects the normalized output consumers see.
Also updates stale comment in tableinator.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test(extractor): add coverage tests for defensive branches in normalize.rs
Covers: non-object inputs to normalizers, string/number items in
normalize_item_list, bare string in unwrap_container, non-object
format items. Raises line coverage from 93.4% to 97.7%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
Sensitive data should not be used in the ARG or ENV commands:
schema-init/Dockerfile#L92
SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "POSTGRES_PASSWORD")
More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
|
|
Sensitive data should not be used in the ARG or ENV commands:
schema-init/Dockerfile#L92
SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "NEO4J_PASSWORD")
More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
|
|
build-discogsography (extractor, true)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/setup-python@v5, astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
build-discogsography (extractor, true)
embed field value must be shorter than 1024, got 3426
[`accb054`](https://github.com/SimplicityGuy/discogsography/commit/accb054bd4aba1dd2300a05026a0aca2f881e869) feat: move data normalization from Python consumers to Rust extractor (#290) (#294)
* docs: add design spec for moving normalizer logic to Rust extractor (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: add implementation plan for normalizer-to-extractor migration (#290)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add normalize.rs with generic helpers
Add strip_at_prefixes, unwrap_container, and ensure_list functions
for transforming XML-style JSON conventions into flat format.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add artist normalization to normalize.rs
Add normalize_item_list helper and normalize_artist function to flatten
members, groups, and aliases from XML container format to flat arrays.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add label normalization to normalize.rs
Add normalize_label function to handle parentLabel strip_at_prefixes
and sublabels container flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add master normalization to normalize.rs
Add normalize_string_list helper and normalize_master function to handle
@id stripping, artists container, genres, and styles flattening.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): add release normalization to normalize.rs
Add normalize_release function handling artists, labels, master_id
extraction, genres, styles, extraartists, and formats with @-prefix
stripping. Includes full pipeline integration test.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(extractor): address code review — clarify doc, add edge case tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(extractor): wire normalize_record into validator pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: simplify Python normalizer — structural normalization moved to Rust extractor
- Gut data_normalizer.py to only retain year parsing and normalize_record()
- Replace extract_format_names with inline list comprehension in graphinator
- Rewrite normalizer tests for simplified module
- Update all test fixtures to flat extractor output format
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(extractor): reorder normalize after evaluate_rules to preserve rule path resolution
Rules use dot-notation paths like "genres.genre" that match the XML
structure. Moving normalize_record after evaluate_rules ensures rules
operate on the pre-normalized shape while the content hash still
reflects the normalized output consumers see.
Also updates stale comment in tableinator.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test(extractor): add coverage tests for defensive branches in normalize.rs
Covers: non-object inputs to normalizers, string/number items in
normalize_item_list, bare string in unwrap_container, non-object
format items. Raises line coverage from 93.4% to 97.7%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
Cache Performance
Docker cache hit for brainzgraphinator
|
|
Build Metrics
Service: brainzgraphinator, Duration: 105s, Cache Used: true
|
|
Cache Performance
Docker cache hit for dashboard
|
|
Build Metrics
Service: dashboard, Duration: 116s, Cache Used: true
|
|
Cache Performance
Docker cache hit for tableinator
|
|
Build Metrics
Service: tableinator, Duration: 112s, Cache Used: true
|
|
Cache Performance
Docker cache hit for graphinator
|
|
Build Metrics
Service: graphinator, Duration: 122s, Cache Used: true
|
|
Cache Performance
Docker cache hit for explore
|
|
Build Metrics
Service: explore, Duration: 129s, Cache Used: true
|
|
Cache Performance
Docker cache hit for brainztableinator
|
|
Build Metrics
Service: brainztableinator, Duration: 137s, Cache Used: true
|
|
Cache Performance
Docker cache hit for api
|
|
Build Metrics
Service: api, Duration: 161s, Cache Used: true
|
|
Cache Performance
Docker cache hit for insights
|
|
Build Metrics
Service: insights, Duration: 170s, Cache Used: true
|
|
Cache Performance
Docker cache hit for schema-init
|
|
Build Metrics
Service: schema-init, Duration: 184s, Cache Used: true
|
|
Cache Performance
Docker cache hit for extractor
|
|
Build Metrics
Service: extractor, Duration: 355s, Cache Used: true
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
SimplicityGuy~discogsography~2N0U6J.dockerbuild
|
83.2 KB |
sha256:e2c82491591263858699ae94d1470689300bde8f1e612d154675f11d21ee8862
|
|
|
SimplicityGuy~discogsography~3KSVMO.dockerbuild
|
82.5 KB |
sha256:c223677d32aa018aecb808640e98b8ff096a63d2ed97155b667da2788e686759
|
|
|
SimplicityGuy~discogsography~63DCW6.dockerbuild
|
106 KB |
sha256:d052937ee4834a573da6c22c94aa1ac989d81014a056d63d7c2d805de512dfab
|
|
|
SimplicityGuy~discogsography~F27H9F.dockerbuild
|
87.2 KB |
sha256:980175287a524cb415c59de691303c464c311bd0a3a448c389deff14f19ce920
|
|
|
SimplicityGuy~discogsography~L53HIG.dockerbuild
|
83.2 KB |
sha256:0c8f84e3df37cefe3dc722c13b0658aff8c5ec234d4db63c8c4d9beebc63e341
|
|
|
SimplicityGuy~discogsography~QJIDA5.dockerbuild
|
106 KB |
sha256:2f0fd130e8ce10f33012a52497df5dda556d66fdd047149a1360f756de9c6d6c
|
|
|
SimplicityGuy~discogsography~QWWPI1.dockerbuild
|
114 KB |
sha256:f3615570fc30f0a866f93e3525dbf68fb6fdf15e29c663d06292b8f594ff44d6
|
|
|
SimplicityGuy~discogsography~WCU4G4.dockerbuild
|
83.8 KB |
sha256:f6e578bc191c37fff4154d3d93166a6a102588f39916597d8dc201c5362ec5cd
|
|
|
SimplicityGuy~discogsography~XQY0FU.dockerbuild
|
77.4 KB |
sha256:54a869e81bb7e35bd4340272c249fa2ffe3fcf73e3eaadd47d1fb2fca044e70c
|
|
|
SimplicityGuy~discogsography~Z29WVB.dockerbuild
|
82.8 KB |
sha256:2742d1b4cb04b82a5ee8d2d56a76a676f9fb8ed5070057ee8414988f2c6db99f
|
|