Skip to content

fix(release): restore Zed grammar submodule metadata - #987

Merged
tinovyatkin merged 2 commits into
mainfrom
fix/release-submodule-metadata
Aug 11, 2026
Merged

tinovyatkin merged 2 commits into
mainfrom
fix/release-submodule-metadata

Conversation

@tinovyatkin

@tinovyatkin tinovyatkin commented Aug 10, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • restore valid Git submodule metadata so actions/checkout credential cleanup no longer aborts release publishing
  • replace the Zed grammar with wharflab/tree-sitter-containerfile at 49ad7af2
  • align the Zed grammar ID with the parser's tree_sitter_containerfile export
  • add a CI guard that validates all gitlinks have submodule metadata

Root cause

The repository contained a gitlink at _integrations/zed-tally/grammars/dockerfile but no .gitmodules entry. The Marketplace jobs use persist-credentials: false; actions/checkout runs git submodule foreach --recursive while removing credentials and failed before publishing began.

Validation

  • git submodule status --recursive
  • git submodule foreach --recursive true
  • WharfLab grammar cargo test
  • Zed extension cargo test
  • Zed extension WASM check
  • Zed extension clippy with warnings denied
  • Zed extension formatting check
  • actionlint, yamllint, Taplo, and git diff checks

Recovery

The existing v0.45.0 release already contains all six VSIX assets. The manual publish workflow can run from this branch and publish both registries without moving the release tag.

Summary by CodeRabbit

  • New Features

    • Improved syntax highlighting and language support for Dockerfiles and Containerfiles.
    • Updated grammar support to recognize Containerfile syntax more accurately.
  • Bug Fixes

    • Added validation to ensure recursive repository metadata is available during automated checks.

Point the Zed extension at WharfLab's containerfile grammar, align the registered grammar ID with its exported parser symbol, and verify submodule metadata in CI so credential cleanup cannot break release checkout again.
@github-actions

Copy link
Copy Markdown
Contributor

📊 Source Code Metrics (this PR vs main)

No metric changes detected.

Generated by mehen v1.8.1 — the code quality watcher.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@tinovyatkin, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 44 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8a24731d-792b-42cb-bc97-6d2c0a275a79

📥 Commits

Reviewing files that changed from the base of the PR and between 3f4b15e and cd0bb09.

📒 Files selected for processing (1)
  • scripts/release/publish_vsix.sh
📝 Walkthrough

Walkthrough

The Zed integration now uses tree-sitter-containerfile at a new pinned commit. Its grammar identifier and highlights reference are updated. CI now reports recursive Git submodule status after checkout.

Changes

Containerfile grammar integration

Layer / File(s) Summary
Update Containerfile grammar source
.gitmodules, _integrations/zed-tally/extension.toml, _integrations/zed-tally/grammars/dockerfile, _integrations/zed-tally/languages/dockerfile/*
The integration adds the grammar submodule, updates its pinned commit and source repository, and changes the grammar identifier and highlights reference to Containerfile.
Verify recursive submodules
.github/workflows/ci.yml
The test job reports the status of all recursive Git submodules after checkout.

Estimated code review effort: 1 (Trivial) | ~5 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main change: restoring valid Zed grammar submodule metadata for release publishing.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/release-submodule-metadata

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Aug 10, 2026 •

Copy link
Copy Markdown

T-Rex T-Rex Logs

What T-Rex did

  • Executed the focused Zed submodule and grammar contract validation script to reproduce the P1 finding.
  • Observed the parent revision checkout initially fails submodule initialization due to a missing URL in .gitmodules.
  • Patched checkout initializes submodule but rejects the Zed highlight query.
  • General contract validation confirms the after-state: the commit 3f4b15e enables submodule initialization, but the highlight-query compilation still fails because the (heredoc_line) symbol is not exported by the pinned parser; the authored script and command outputs are attached.
  • Zed extension Rust build succeeds and pinned Containerfile parser tests pass.

View all artifacts

T-Rex Ran code and verified through T-Rex

Comments Outside Diff (2)

  1. _integrations/zed-tally/languages/dockerfile/highlights.scm, line 49 (link)

    P1 Zed highlight query uses a node absent from the pinned grammar

    The updated Containerfile grammar does not export heredoc_line; it only has the hidden _heredoc_line token. Zed therefore rejects this query with a QueryError while loading the Dockerfile language, leaving Dockerfiles and Containerfiles without syntax highlighting. Replace this capture with an exported node such as heredoc_content where appropriate, and add a check that compiles this query against the pinned grammar.

    Artifacts

    Focused Zed submodule and grammar contract validation script

    • This script creates detached clean checkouts, initializes submodules, checks the extension and parser identifiers, and runs the parser/query contract; it is the exact validation source used for the captures.

    Parent revision checkout fails submodule initialization

    • Running the focused script against `4a8f5e8` shows `git submodule update --init --recursive` failing because no URL exists in `.gitmodules`, confirming the pre-change checkout failure.

    Patched checkout initializes submodule but rejects Zed highlight query

    • Running the same focused script against `3f4b15e` initializes the exact pinned submodule and verifies the ID/export alignment, then shows the real parser rejecting `(heredoc_line)` in the Zed highlight query, revealing the defect.

    Zed extension Rust build succeeds

    • The extension crate builds successfully offline with its locked dependencies, showing the defect is in runtime grammar-query loading rather than the Rust extension build.

    Pinned Containerfile parser tests succeed

    • The pinned `tree-sitter-containerfile` crate passes its unit and documentation tests, confirming the parser itself loads while its exported node names remain incompatible with the extension query.

    View artifacts

    T-Rex Ran code and verified through T-Rex

    Fix in Codex Fix in Claude Code

  2. General comment

    P1 Zed Dockerfile highlighting fails to load with the new Containerfile grammar

    • Bug
      • _integrations/zed-tally/languages/dockerfile/highlights.scm:49 references (heredoc_line), but the pinned tree-sitter-containerfile parser exposes only the hidden _heredoc_line token and no public heredoc_line node. Compiling the exact Zed highlight query against the initialized parser fails with QueryError at row 48, column 2, so Zed cannot load this language's highlight query.
    • Cause
      • The submodule switched from the former Dockerfile grammar to the Containerfile grammar without reconciling the extension's query node names with the new parser's exported node types.
    • Fix
      • Replace or remove the (heredoc_line) capture with nodes exported by tree-sitter-containerfile (for example, capture the public heredoc_content node if that produces the desired highlighting), then add a test that compiles languages/dockerfile/highlights.scm against the pinned grammar.

    T-Rex Ran code and verified through T-Rex

Fix All in Codex Fix All in Claude Code

Reviews (1): Last reviewed commit: "fix(release): restore Zed grammar submod..." | Re-trigger Greptile

@github-actions

github-actions Bot commented Aug 10, 2026 •

Copy link
Copy Markdown
Contributor

Binary Size Report

Measured artifact: full-CGO Linux binary built from this workflow.

Size
main 68MiB
This PR 68MiB
Delta +32B (+0.00%)
Size history
xychart-beta
  title "Binary size (bytes)"
  x-axis ["chore(deps): Update module git", "chore(deps): Update module git", "chore(deps): Update dependency", "chore(deps): Update dependency", "chore(deps): Update module git", "chore(deps): Update module git", "chore(deps): Update module git", "chore(deps): Update dependency", "chore(deps): Update module git", "chore(deps): Update dependency", "chore(deps): Update module git", "chore(deps): Update dependency", "chore(deps): Update dependency", "chore(deps): Update dependency", "chore(deps): Update module go.", "fix(shellcheck): make wasm bui", "chore(deps): Update dependency", "feat(vscode): improve Marketpl", "feat(intellij): improve Market", "This PR"]
  y-axis "Bytes"
  bar [70808664, 70808664, 70808664, 70808664, 70808664, 70808664, 70808696, 70808664, 70808600, 70808664, 70812760, 70812728, 70812728, 70812728, 70841304, 70841304, 70841304, 70841304, 70841304, 70841336]
Loading

Emit the official VS Marketplace support escalation when VSID Concurrency survives every configured retry.
@codspeed

codspeed Bot commented Aug 10, 2026 •

Copy link
Copy Markdown

Merging this PR will not alter performance

⚠️ Unknown Walltime execution environment detected

Using the Walltime instrument on standard Hosted Runners will lead to inconsistent data.

For the most accurate results, we recommend using CodSpeed Macro Runners: bare-metal machines fine-tuned for performance measurement consistency.

✅ 4 untouched benchmarks


Comparing fix/release-submodule-metadata (cd0bb09) with main (4a8f5e8)

Open in CodSpeed

@tinovyatkin

Copy link
Copy Markdown
Collaborator Author

Release recovery status

  • ✅ The original checkout failure is fixed: both recovery jobs passed actions/checkout with persist-credentials: false.
  • ✅ OpenVSX published wharflab.tally 0.45.0 successfully.
  • ❌ VS Code Marketplace rejected all six attempts on the first VSIX with RequestBlockedException: resource Concurrency, namespace VSID, event ID 3000.
  • The public Gallery API still reports 0.44.0; no 0.45.0 target was accepted asynchronously.

This matches Microsoft Marketplace publisher blocks that persist across cooldowns and PAT rotation. Microsoft directs affected publishers to email VSMarketplace@microsoft.com so the publisher/account block can be cleared.

Include:

The publisher script now emits this escalation explicitly when all configured retries end in the persistent VSID block.

@codecov

codecov Bot commented Aug 10, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@greptile-apps

greptile-apps Bot commented Aug 10, 2026 •

Copy link
Copy Markdown

T-Rex T-Rex Logs

What T-Rex did

  • T-Rex produced proof for a posted P1 finding and included a reproduction submodule source to validate the finding.
  • T-Rex exercised the reproduction flow by first observing the uninitialized submodule status, then initializing the submodule and confirming a space-prefixed initialized entry.
  • T-Rex validated contract behavior around submodule availability, showing that the CI command reports state and does not fail when the submodule is unavailable or uninitialized.
  • T-Rex confirmed end-to-end artifact checks by verifying presence of artifacts after reproduction and by documenting the initialization sequence.

View all artifacts

T-Rex Ran code and verified through T-Rex

Comments Outside Diff (1)

  1. General comment

    P1 Submodule metadata check passes with an uninitialized registered gitlink

    • Bug
      • At .github/workflows/ci.yml:61-63, the test job uses default actions/checkout@v7 and immediately runs git submodule status --recursive. The isolated reproduction shows this command exits successfully when the registered submodule directory does not exist, emitting -<SHA> rather than failing. Thus this CI step cannot enforce that the submodule or nested submodules are available.
    • Cause
      • git submodule status --recursive is a reporting command; its minus prefix denotes an uninitialized submodule but does not produce a nonzero exit status. Default checkout does not request submodule initialization.
    • Fix
      • Configure checkout to initialize recursive submodules (for example, with: { submodules: recursive }) and/or add an explicit assertion that rejects status lines beginning with -, then run git submodule update --init --recursive before validation.

    T-Rex Ran code and verified through T-Rex

Fix All in Codex Fix All in Claude Code

Reviews (2): Last reviewed commit: "fix(release): explain persistent Marketp..." | Re-trigger Greptile

Comment thread .github/workflows/ci.yml
steps:
- uses: actions/checkout@v7
- name: Verify submodule metadata
run: git submodule status --recursive

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Submodule check accepts an unfetched grammar

actions/checkout still performs its default checkout without initializing submodules, while git submodule status --recursive only reports an uninitialized gitlink with a leading - and exits successfully. Consequently, this job passes when the Containerfile grammar directory, including any nested submodules, has not been fetched. Initialize submodules recursively during checkout and/or explicitly reject minus-prefixed status entries.

Artifacts

Isolated Git submodule reproduction source

  • Authored and executed Bash source creates a parent repository and gitlink, clones it without submodule initialization, and captures before and after behavior; it provides the exact reproduction method.

Uninitialized submodule status succeeds

  • Captured command output from the normal clone shows the gitlink is registered, its directory is absent, and recursive status exits 0 with a minus-prefixed SHA; the check does not enforce availability.

Initialized submodule status succeeds

  • Captured command output after recursive initialization shows Git cloned the child and reports a space-prefixed initialized SHA; initialization is a distinct required action.

Reproduction execution result

  • Captured execution header records the authored isolated reproduction command, repository working directory, and successful exit status; the reproduction ran successfully.

Artifact presence check

  • Captured verification confirms the authored reproducer and both executed before-and-after captures are nonempty in the required artifact directory; the proof files are present.

View artifacts

T-Rex Ran code and verified through T-Rex

Fix in Codex Fix in Claude Code

@tinovyatkin
tinovyatkin merged commit 40fe4f2 into main Aug 11, 2026
54 of 56 checks passed
@tinovyatkin
tinovyatkin deleted the fix/release-submodule-metadata branch August 11, 2026 00:13
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 11, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant