Skip to content

feat: add 10 pluginpool plugins (full bundles, scanner 97/100 PASS)#115

Merged
internet-dot merged 1 commit into
hashgraph-online:mainfrom
mturac:add-pluginpool-plugins
May 20, 2026
Merged

feat: add 10 pluginpool plugins (full bundles, scanner 97/100 PASS)#115
internet-dot merged 1 commit into
hashgraph-online:mainfrom
mturac:add-pluginpool-plugins

Conversation

@mturac

@mturac mturac commented May 16, 2026

Copy link
Copy Markdown
Contributor

Resubmits the pluginpool plugins as proper plugin bundles under plugins/mturac/, addressing the feedback from #112 (which only added a README entry without bundle files).

What's added

10 complete plugin bundles, each with:

  • .codex-plugin/plugin.json — full interface metadata (displayName, shortDescription, longDescription, developerName, category, capabilities, brandColor, composerIcon)
  • skills/<name>/SKILL.md — skill manifest with required frontmatter (name, license, description, allowed-tools)
  • scripts/<helper>.py — Python stdlib-only helper
  • assets/icon.svg — composerIcon target
  • SECURITY.md, .codexignore, README.md, LICENSE

Plugins (under plugins/mturac/):

  1. commit-narrator — semantic commit message from staged diff
  2. pr-storyteller — PR title + body + test plan from commits
  3. test-gap — diff lines lacking test coverage
  4. deps-doctor — multi-ecosystem dependency audit (npm/pip/cargo/go)
  5. env-lint.env vs .env.example key parity
  6. secret-guard — pre-commit secret scanner
  7. standup-gen — daily standup notes from git activity
  8. todo-harvest — TODO/FIXME/HACK scan with git blame
  9. flaky-detector — per-test flakiness % from N runs
  10. changelog-forge — conventional commits → CHANGELOG + semver

Scanner results

Each of the 10 plugins passes both lint and verify:

$ for p in <10>; do pipx run codex-plugin-scanner lint plugins/mturac/$p/; done
# Each: "Lint profile: default | policy_pass=True | effective_score=97"

$ for p in <10>; do pipx run codex-plugin-scanner verify plugins/mturac/$p/; done
# Each: "Verification: PASS" with all 12 checks ✅

Only remaining notices are info-level (logo / screenshots assets not provided — they're optional in the spec). Each plugin scores 97/100.

Marketplace integration

  • .agents/plugins/marketplace.json updated with 10 new entries (local source paths, category "Development & Workflow", composerIcon path) so installation works offline through the curated marketplace
  • README.md updated under Community Plugins → Development & Workflow with 10 direct links to bundles

Upstream

Each plugin also lives as its own standalone repo at mturac/pluginpool-. The umbrella index is at https://github.com/mturac/pluginpool. MIT.

Adds all 10 plugins from mturac/pluginpool as installable Codex plugin
bundles under plugins/mturac/. Each plugin includes the required
.codex-plugin/plugin.json with full interface metadata (displayName,
shortDescription, longDescription, category, capabilities, brandColor,
composerIcon), skills/<name>/SKILL.md with proper frontmatter (name,
license), SECURITY.md, .codexignore, README.md, LICENSE, and assets.

Plugins added (all under plugins/mturac/):
- commit-narrator — semantic commit message from staged diff
- pr-storyteller — PR title + body + test plan from commits
- test-gap — diff lines lacking test coverage
- deps-doctor — multi-ecosystem dependency audit (npm/pip/cargo/go)
- env-lint — .env vs .env.example key parity
- secret-guard — pre-commit secret scanner
- standup-gen — standup notes from git activity
- todo-harvest — TODO/FIXME/HACK scan with git blame
- flaky-detector — per-test flakiness % from N runs
- changelog-forge — conventional commits → CHANGELOG

Validator results (codex-plugin-scanner):
- All 10 plugins: lint policy PASS, effective_score=97/100
- All 10 plugins: verify PASS (manifest, interface, skills, assets)
- Remaining warnings are info-level (no logo/screenshots — optional)

Marketplace entries added to .agents/plugins/marketplace.json with
local source paths so installation works offline through the curated
marketplace. README.md updated under Development & Workflow with 10
direct links to bundles.

@gemini-code-assist gemini-code-assist Bot left a comment

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.

Code Review

This pull request introduces 10 new productivity plugins to the marketplace, including tools for commit narration, dependency auditing, and secret scanning. Each plugin includes a Python helper script, documentation, and Codex skill definitions. The review feedback identifies potential AttributeError vulnerabilities in the deps-doctor script when handling malformed or null JSON fields and highlights a performance inefficiency in the todo-harvest script caused by spawning git blame subprocesses within a loop.

Comment on lines +127 to +129
except json.JSONDecodeError:
continue
finding = event.get("finding") or event.get("vulnerability") or {}

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.

medium

The event object returned by json.loads could be None (if the line is the string "null") or a non-dictionary type if the tool output is malformed. This would cause the subsequent event.get call to raise an AttributeError. It is safer to verify that event is a dictionary before proceeding.

        try:
            event = json.loads(line)
            if not isinstance(event, dict):
                continue
        except json.JSONDecodeError:
            continue
        finding = event.get("finding") or event.get("vulnerability") or {}

continue
advisories.append({
"id": str(osv.get("id", "")),
"severity": normalize_severity(osv.get("database_specific", {}).get("severity")),

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.

medium

If the database_specific key exists in the osv dictionary but its value is explicitly null in the JSON, osv.get("database_specific", {}) will return None instead of the default empty dictionary. This will cause the subsequent .get("severity") call to raise an AttributeError. Using the or operator ensures a dictionary is always available for the second .get() call.

Suggested change
"severity": normalize_severity(osv.get("database_specific", {}).get("severity")),
"severity": normalize_severity((osv.get("database_specific") or {}).get("severity")),

if not m:
continue
marker, text = m.group(1), m.group(2).strip()
blame = _blame(repo, rel, n)

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.

medium

Calling git blame for every single line that matches a marker is highly inefficient, especially in large repositories with many TODOs. This results in O(N) subprocess spawns where N is the number of markers found. Consider running git blame --porcelain <file> once per file that contains markers and parsing the output to retrieve author information for all relevant lines at once, which would significantly improve performance.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: da0a3e57b0

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".



def severity_allowed(advisory: dict[str, Any], minimum: str) -> bool:
return SEVERITY_ORDER.get(advisory.get("severity", "unknown"), -1) >= SEVERITY_ORDER[minimum]

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 Badge Include unknown-severity advisories in low-severity runs

severity_allowed maps unknown severities to -1, so --severity low drops any advisory whose source omits severity metadata. In deps-doctor, that can silently hide real vulnerabilities (for example ecosystems/advisories that provide IDs and fixes but no CVSS label), yielding false-clean reports and undermining the tool’s core purpose.

Useful? React with 👍 / 👎.

Comment on lines +32 to +34
if source == "-":
return sys.stdin.read()
return run_git_diff()

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Honor explicit diff file path input

When --diff is set to a file path, read_diff still calls run_git_diff() unless the value is -. This makes path-based input unusable and can return an empty or unrelated staged diff instead of the caller-provided patch, producing incorrect commit-message output in scripted/non-staged workflows.

Useful? React with 👍 / 👎.

@internet-dot

Copy link
Copy Markdown
Collaborator

Applied directly to main with merge conflict resolution. Conflicts were in .agents/plugins/marketplace.json where recent merges (#117, #122) updated descriptions for personal-data-protection and praxis entries. Kept the HEAD (newer) versions.

@internet-dot

Copy link
Copy Markdown
Collaborator

The plugins themselves look valid, but the README entries use local paths (./plugins/mturac/...) instead of GitHub repo URLs. Existing entries link to external repos (e.g. [Plugin Name](https://github.com/owner/repo)). Please update the links to point to the actual GitHub repositories.

@internet-dot internet-dot merged commit bc06f70 into hashgraph-online:main May 20, 2026
1 check passed
internet-dot added a commit that referenced this pull request May 20, 2026
- Add Zagrosi Forge README entry (lost during --theirs conflict resolution of #115)
- Regenerate plugins.json (82 plugins) and marketplace.json
- Closes #135, #115, #121
@internet-dot

Copy link
Copy Markdown
Collaborator

Merged via direct commit to main due to merge conflicts with README.md and marketplace.json from other concurrent PRs. All 10 pluginpool bundles (commit-narrator, pr-storyteller, test-gap, deps-doctor, env-lint, secret-guard, standup-gen, todo-harvest, flaky-detector, changelog-forge) are preserved. Artifacts regenerated.

Harihara04sudhan added a commit to Harihara04sudhan/awesome-codex-plugins that referenced this pull request Jun 9, 2026
The ArmorCodex entry was added in PR hashgraph-online#140 (merged 2026-05-20 14:45 UTC)
but accidentally dropped 5 minutes later when PR hashgraph-online#115 (Add 10 pluginpool
plugins, merged 14:50 UTC) was reconciled. The plugin bundle at
plugins/armoriq/armorCodex/ remained intact, so the registry has the
plugin but README and downstream marketplace artifacts don't list it.

Restoring the README entry in its alphabetical slot between Apple
Productivity and AxonFlow. Plugin folder + plugin.json are already in
the repo from PR hashgraph-online#140; no other changes needed.

Repo: https://github.com/armoriq/armorCodex
Plugin bundle in this repo: plugins/armoriq/armorCodex/
Harihara04sudhan added a commit to Harihara04sudhan/awesome-codex-plugins that referenced this pull request Jun 15, 2026
The ArmorCodex entry was added in PR hashgraph-online#140 (merged 2026-05-20 14:45 UTC)
but accidentally dropped 5 minutes later when PR hashgraph-online#115 (Add 10 pluginpool
plugins, merged 14:50 UTC) was reconciled. The plugin bundle at
plugins/armoriq/armorCodex/ remained intact, so the registry has the
plugin but README and downstream marketplace artifacts don't list it.

Restoring the README entry in its alphabetical slot between Apple
Productivity and AxonFlow. Plugin folder + plugin.json are already in
the repo from PR hashgraph-online#140; no other changes needed.

Repo: https://github.com/armoriq/armorCodex
Plugin bundle in this repo: plugins/armoriq/armorCodex/
Harihara04sudhan added a commit to Harihara04sudhan/awesome-codex-plugins that referenced this pull request Jun 17, 2026
The ArmorCodex entry was added in PR hashgraph-online#140 (merged 2026-05-20 14:45 UTC)
but accidentally dropped 5 minutes later when PR hashgraph-online#115 (Add 10 pluginpool
plugins, merged 14:50 UTC) was reconciled. The plugin bundle at
plugins/armoriq/armorCodex/ remained intact, so the registry has the
plugin but README and downstream marketplace artifacts don't list it.

Restoring the README entry in its alphabetical slot between Apple
Productivity and AxonFlow. Plugin folder + plugin.json are already in
the repo from PR hashgraph-online#140; no other changes needed.

Repo: https://github.com/armoriq/armorCodex
Plugin bundle in this repo: plugins/armoriq/armorCodex/
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.

2 participants