feat(adt-plugin-gcts): LIMU sub-objects + extension-aware source keys

TH
6s ago
+622-210

User description

Summary

  • Parse {parent}.{ptype}.{sub}.{stype}.{ext} LIMU filenames (func, reps, cpub, cpro, cprt, cpri, sotr, sotu) as companions of the parent object — previously silently dropped
  • Extension-aware source keys: {suffix}.{ext} for companions whose extension differs from the type's default (.properties texts, LIMU .json metadata, .xdp); main.{ext} for suffix-less companions
  • GctsSourceEntry.ext plumbed through gctsFilename so emission is fully symmetric with parsing

Test plan

  • filename-grammar.test.ts: 16/16 — incl. full upstream fugr corpus resolving to parent FUGR, sourceKey/splitSourceKey round-trips
  • existing filename.test.ts + source-companions + schema-conformance + generic-roundtrip: all green locally (node --test, no builds)

Generated with Devin

Summary by Sourcery

Preserve LIMU sub-objects and extension-specific companion files across gCTS import and export round trips.

New Features:

  • Preserve LIMU sub-object metadata and source files by associating them with their parent objects.
  • Support extension-aware companion source keys so non-default files such as JSON metadata and translated properties round-trip correctly.

Bug Fixes:

  • Prevent LIMU sub-objects and unhandled companion files from being silently dropped during gCTS deserialization and emission.

Enhancements:

  • Make filename parsing and generation symmetric for LIMU companions, source extensions, documentation, translations, and staged sources.
  • Export filename and source-key utilities for consistent companion handling across handlers.

Tests:

  • Add filename grammar and handler coverage for LIMU routing, extension-aware source-key round trips, and parent-scoped function-module files.

Chores:

  • Refresh the lockfile.

Summary by cubic

Parses LIMU sub-object files ({parent}.{ptype}.{sub}.{stype}.{ext} for func, reps, cpub, cpro, cprt, cpri, sotr, sotu) as companions of the parent object instead of silently dropping them during AFF deserialization.

Source keys now encode file extensions so companions round-trip: a companion whose extension differs from the type's default uses a {suffix}.{ext} key (.properties texts, LIMU .json metadata, .xdp), and suffix-less companions use main.{ext}. GctsSourceEntry.ext carries the override through gctsFilename, making emission fully symmetric with parsing; the new sourceKey/splitSourceKey helpers, LIMU_SUBTYPES, and gctsSourceExt are exported.


CodeAnt-AI Description

Preserve LIMU sub-objects and companion files in gCTS round trips

What Changed

  • LIMU sub-object metadata and source files now stay attached to their parent objects instead of being dropped.
  • Companion files with non-default extensions, including JSON metadata and translated properties, retain their file type when imported and exported.
  • Function-module files use parent-scoped names so they can be matched back to their function group.

Impact

✅ LIMU metadata survives gCTS import/export
✅ Function-module files stay attached to their function group
✅ Translated properties retain their file type

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.