Skip to content

feat: add supported-language lifecycle policy - #1280

Merged
mijinummi merged 1 commit into
MDTechLabs:mainfrom
Mainnet-ops:feat/supported-language-lifecycle-policy
Oct 18, 2026
Merged

mijinummi merged 1 commit into
MDTechLabs:mainfrom
Mainnet-ops:feat/supported-language-lifecycle-policy

Conversation

@Mainnet-ops

Copy link
Copy Markdown

Give every analyzable language a documented lifecycle stage (preview, supported, deprecated, retired) with scheduled deprecation and sunset dates, so languages can be trialled, announced for removal, and retired without retired files silently reading as clean results.

  • Versioned, validated policy with a canonical digest; scheduled dates move languages forward on their own (inclusive UTC-day boundaries).
  • Governance checks between policy versions: no removals, no retiring a supported language without deprecation, minimum notice from the publish day, no pulling a sunset forward. Overrides need a reason and are audited.
  • Per-scan write-once pins (policy digest, asOf day, tenant opt-ins, config) keep retries deterministic across restarts, publishes and sunsets; the pin fingerprint belongs in scan-result cache keys.
  • planScan filters the engine's path-to-language map for AnalyzerRegistry.analyzeMultiple and reports skipped files and deprecation warnings; complete / partial / unsupported / empty statuses.
  • Tenant-scoped preview opt-ins and pins; digest-derived file-store paths.
  • Backward compatible: built-in default marks every engine language supported, unlisted languages are analyzed, and LANGUAGE_LIFECYCLE_ENABLED =false restores pre-policy behaviour while honouring existing pins.
  • Retryable CONFLICT / STORE_UNAVAILABLE vs non-retryable INVALID_INPUT, INVALID_POLICY, TRANSITION_REJECTED, UNSUPPORTED_REPOSITORY.
  • Prometheus metrics with bounded labels; sanitized logs that never include file paths, content, or store error messages.
  • Fixtures: realistic Soroban DEX repository with EVM/Starknet bridges, and a frozen sunset-boundary regression snapshot.
  • Docs: docs/LANGUAGE_LIFECYCLE_POLICY.md

Closes #1275
Closes #1273
Closes #1272
Closes #1271

Give every analyzable language a documented lifecycle stage (preview,
supported, deprecated, retired) with scheduled deprecation and sunset dates,
so languages can be trialled, announced for removal, and retired without
retired files silently reading as clean results.

- Versioned, validated policy with a canonical digest; scheduled dates move
  languages forward on their own (inclusive UTC-day boundaries).
- Governance checks between policy versions: no removals, no retiring a
  supported language without deprecation, minimum notice from the publish
  day, no pulling a sunset forward. Overrides need a reason and are audited.
- Per-scan write-once pins (policy digest, asOf day, tenant opt-ins, config)
  keep retries deterministic across restarts, publishes and sunsets; the pin
  fingerprint belongs in scan-result cache keys.
- planScan filters the engine's path-to-language map for
  AnalyzerRegistry.analyzeMultiple and reports skipped files and deprecation
  warnings; complete / partial / unsupported / empty statuses.
- Tenant-scoped preview opt-ins and pins; digest-derived file-store paths.
- Backward compatible: built-in default marks every engine language
  supported, unlisted languages are analyzed, and LANGUAGE_LIFECYCLE_ENABLED
  =false restores pre-policy behaviour while honouring existing pins.
- Retryable CONFLICT / STORE_UNAVAILABLE vs non-retryable INVALID_INPUT,
  INVALID_POLICY, TRANSITION_REJECTED, UNSUPPORTED_REPOSITORY.
- Prometheus metrics with bounded labels; sanitized logs that never include
  file paths, content, or store error messages.
- Fixtures: realistic Soroban DEX repository with EVM/Starknet bridges, and a
  frozen sunset-boundary regression snapshot.
- Docs: docs/LANGUAGE_LIFECYCLE_POLICY.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@drips-wave

drips-wave Bot commented Oct 18, 2026

Copy link
Copy Markdown

@Mainnet-ops Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@mijinummi
mijinummi merged commit fe1ac70 into MDTechLabs:main Oct 18, 2026
10 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants