Skip to content

Attempt to establish a syntax for files that should be ignored by aut…#1856

Open
jdye64 wants to merge 1 commit intoNVIDIA:mainfrom
jdye64:feat/vcs-qa
Open

Attempt to establish a syntax for files that should be ignored by aut…#1856
jdye64 wants to merge 1 commit intoNVIDIA:mainfrom
jdye64:feat/vcs-qa

Conversation

@jdye64
Copy link
Copy Markdown
Collaborator

@jdye64 jdye64 commented Apr 15, 2026

…omated testing frameworks

Description

Checklist

  • I am familiar with the Contributing Guidelines.
  • New or existing tests cover these changes.
  • The documentation is up to date with these changes.
  • If adjusting docker-compose.yaml environment variables have you ensured those are mimicked in the Helm values.yaml file.

@jdye64 jdye64 requested review from a team as code owners April 15, 2026 19:49
@jdye64 jdye64 requested a review from charlesbluca April 15, 2026 19:49
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 15, 2026

Greptile Summary

This PR introduces two documentation-only files: a .qaignore template and QAIGNORE_SYNTAX.md, which together define a new file format for telling a QA automation agent which files, functions, CLI commands, and PRs to skip during analysis. No executable code is changed.

  • The text: section has an internal contradiction: the general term-parsing rule would consume the /i case-insensitivity modifier as part of the literal search string, leaving its behaviour undefined until a parser is implemented.
  • The fn: section header promises to ignore "callers and callees" but the Details block only describes downstream (callee) propagation, which is a significant behavioural discrepancy that should be resolved in the spec.

Confidence Score: 5/5

Documentation-only PR with no executable code changes — safe to merge with minor spec clarifications suggested.

All findings are P2 documentation-clarity issues with no impact on running code. No parser or tooling is introduced in this PR, so the spec inconsistencies cannot cause runtime failures today.

QAIGNORE_SYNTAX.md — two internal contradictions (text:/i flag parsing and fn: caller/callee propagation scope) should be resolved before the spec is implemented by a parser.

Important Files Changed

Filename Overview
.qaignore New template file establishing the QA automation ignore convention; all entries are commented-out examples with no active rules — well structured and self-documenting.
QAIGNORE_SYNTAX.md Comprehensive syntax reference for .qaignore; contains two internal spec contradictions (text:/i flag parsing vs. term-boundary rule; §2 header claims callers+callees but Details only describes callees) that should be resolved before the spec is implemented.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Read next line from .qaignore] --> B{Line content?}
    B -->|Blank line| A
    B -->|Starts with '# ' or '#' + non-digit| C[Comment — skip]
    B -->|'#' followed by integer| D["§5 PR rule — look up PR diff,\nexclude all touched files/hunks"]
    B -->|Starts with 'path:'| E["§1 Path/glob rule — match\nfull path or filename"]
    B -->|Starts with 'fn:'| F["§2 Function rule — match name,\ntrace downstream call chain"]
    B -->|Starts with 'cmd:'| G["§3 CLI command rule — prefix match\nagainst command invocations"]
    B -->|Starts with 'text:'| H["§4 Content scan — wrap term in *...*,\ncheck /i suffix for case mode"]
    C --> A
    D --> I{First matching rule wins}
    E --> I
    F --> I
    G --> I
    H --> I
    I -->|Match found| J[Exclude from QA analysis]
    I -->|No match yet| A
    J --> A
Loading
Prompt To Fix All With AI
This is a comment left during a code review.
Path: QAIGNORE_SYNTAX.md
Line: 173-175

Comment:
**`text:/i` flag contradicts the term-parsing rule**

Two statements in the `text:` section conflict: line 175 says "everything after `text: ` (up to end-of-line) is the search term," yet line 174 introduces `/i` as a suffix modifier that the parser must strip from the term before matching. Under the literal reading of line 175, `text: vlm_embedder/i` would search for the 17-character literal string `vlm_embedder/i`, not apply a case flag.

The Details section needs an explicit parsing rule like: "If the term ends with `/i`, that suffix is treated as a flag and stripped from the search term; everything before it is the actual match string."

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: QAIGNORE_SYNTAX.md
Line: 66-68

Comment:
**Section heading over-promises — "callers and callees" vs. Details**

The heading says the agent ignores "every function in its call chain (callers and callees traced by the agent)", but the Details only describe *callee* propagation (downstream chain) plus the narrow case of test functions whose "sole purpose" is to exercise the ignored function. Ignoring all *callers* would be extremely aggressive — any function that calls a widely-used utility would be silently excluded from QA. Either narrow the heading to match the described behavior ("and every function it calls") or explicitly document what "callers" means in this context and whether full upward propagation is intended.

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: QAIGNORE_SYNTAX.md
Line: 14

Comment:
**"First wins" diverges from `.gitignore` "last wins" — clarify the distinction**

The General Rules say "first matching rule wins," but `.gitignore` (which this file is explicitly "inspired by", and whose conventions §1 claims to follow) uses **last-rule-wins** so that later, more-specific rules can override earlier, broader ones. A user who writes a broad glob early and a narrow exception later will be surprised when the exception has no effect. Consider adding a note like "Unlike `.gitignore`, earlier rules take precedence; place more specific rules before broader ones" to prevent confusion.

How can I resolve this? If you propose a fix, please make it concise.

Reviews (1): Last reviewed commit: "Attempt to establish a syntax for files ..." | Re-trigger Greptile

Comment thread QAIGNORE_SYNTAX.md
Comment on lines +173 to +175
- The match is **substring / wildcard** — the agent treats `text: foo` as `*foo*` applied to the full text of every file in scope.
- Matching is **case-sensitive** by default. Append `/i` to make it case-insensitive: `text: vlm_embedder/i`.
- The term can contain spaces; everything after `text: ` (up to end-of-line) is the search term.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 text:/i flag contradicts the term-parsing rule

Two statements in the text: section conflict: line 175 says "everything after text: (up to end-of-line) is the search term," yet line 174 introduces /i as a suffix modifier that the parser must strip from the term before matching. Under the literal reading of line 175, text: vlm_embedder/i would search for the 17-character literal string vlm_embedder/i, not apply a case flag.

The Details section needs an explicit parsing rule like: "If the term ends with /i, that suffix is treated as a flag and stripped from the search term; everything before it is the actual match string."

Prompt To Fix With AI
This is a comment left during a code review.
Path: QAIGNORE_SYNTAX.md
Line: 173-175

Comment:
**`text:/i` flag contradicts the term-parsing rule**

Two statements in the `text:` section conflict: line 175 says "everything after `text: ` (up to end-of-line) is the search term," yet line 174 introduces `/i` as a suffix modifier that the parser must strip from the term before matching. Under the literal reading of line 175, `text: vlm_embedder/i` would search for the 17-character literal string `vlm_embedder/i`, not apply a case flag.

The Details section needs an explicit parsing rule like: "If the term ends with `/i`, that suffix is treated as a flag and stripped from the search term; everything before it is the actual match string."

How can I resolve this? If you propose a fix, please make it concise.

Comment thread QAIGNORE_SYNTAX.md
Comment on lines +66 to +68
## §2 — Functions & Invocation Chains (`fn:` prefix)

Ignore a specific function **and every function in its call chain** (callers and callees traced by the agent).
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 Section heading over-promises — "callers and callees" vs. Details

The heading says the agent ignores "every function in its call chain (callers and callees traced by the agent)", but the Details only describe callee propagation (downstream chain) plus the narrow case of test functions whose "sole purpose" is to exercise the ignored function. Ignoring all callers would be extremely aggressive — any function that calls a widely-used utility would be silently excluded from QA. Either narrow the heading to match the described behavior ("and every function it calls") or explicitly document what "callers" means in this context and whether full upward propagation is intended.

Prompt To Fix With AI
This is a comment left during a code review.
Path: QAIGNORE_SYNTAX.md
Line: 66-68

Comment:
**Section heading over-promises — "callers and callees" vs. Details**

The heading says the agent ignores "every function in its call chain (callers and callees traced by the agent)", but the Details only describe *callee* propagation (downstream chain) plus the narrow case of test functions whose "sole purpose" is to exercise the ignored function. Ignoring all *callers* would be extremely aggressive — any function that calls a widely-used utility would be silently excluded from QA. Either narrow the heading to match the described behavior ("and every function it calls") or explicitly document what "callers" means in this context and whether full upward propagation is intended.

How can I resolve this? If you propose a fix, please make it concise.

Comment thread QAIGNORE_SYNTAX.md
| **One pattern per line** | Each non-blank, non-comment line is a single ignore rule. |
| **Comments** | Lines starting with `#` that are **not** a valid PR pattern (see §4) are treated as comments and ignored by the parser. Use them freely for documentation. |
| **Blank lines** | Blank lines are ignored; use them to visually separate sections. |
| **Ordering** | Rules are evaluated top-to-bottom. The **first** matching rule wins. |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 "First wins" diverges from .gitignore "last wins" — clarify the distinction

The General Rules say "first matching rule wins," but .gitignore (which this file is explicitly "inspired by", and whose conventions §1 claims to follow) uses last-rule-wins so that later, more-specific rules can override earlier, broader ones. A user who writes a broad glob early and a narrow exception later will be surprised when the exception has no effect. Consider adding a note like "Unlike .gitignore, earlier rules take precedence; place more specific rules before broader ones" to prevent confusion.

Prompt To Fix With AI
This is a comment left during a code review.
Path: QAIGNORE_SYNTAX.md
Line: 14

Comment:
**"First wins" diverges from `.gitignore` "last wins" — clarify the distinction**

The General Rules say "first matching rule wins," but `.gitignore` (which this file is explicitly "inspired by", and whose conventions §1 claims to follow) uses **last-rule-wins** so that later, more-specific rules can override earlier, broader ones. A user who writes a broad glob early and a narrow exception later will be surprised when the exception has no effect. Consider adding a note like "Unlike `.gitignore`, earlier rules take precedence; place more specific rules before broader ones" to prevent confusion.

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant