Coordinate the next installer and metadata hardening fixes
The review note on #916 asked for the next installer/CI work in one place before more PRs. Thanks for coordinating this batch. I have not opened PRs for the items below. I will keep this issue as the shared list and follow the priority/order you prefer; each item would get its own focused reproducer and PR only if it is worth the review cost.
Proposed order:
Make parallel installer failures diagnosable. On current
main, runninginstall.sh --tool claude-code,aider --parallel --jobs 1 --no-convert --agent ai-engineer --path <temp>in a fresh checkout exits 1 when Aider output is missing, but only prints the parent header. The worker's usefulintegrations/aider/CONVENTIONS.md missingmessage remains in its buffered temp file becauseset -eexits before the log replay and cleanup. The analogous converter failure path already replays its logs. I would add a failing worker test, then preserve exit status while showing every worker's output and cleaning its temp directory.Reject agent names that produce an empty install slug. A fixture with
name: 专家, nonempty description/color, and required sections passesscripts/lint-agents.sh, whileagent_slugreturns an empty string.check_agent_slug_collisionsskips that empty slug, so conversion can write empty-name outputs such as.tomloragency-/SKILL.md. I would fail validation and conversion early with the source filename and an actionable name/alias message. I would not silently invent a Unicode transliteration.Handle or explicitly reject valid folded YAML metadata. A fixture with
description: >followed by two indented lines passes the source linter, butget_field descriptionreturns> A documentation specialist. That marker then becomes part of generated discovery metadata. A test should compare source and generated values. The smallest policy choice is either correctly parse YAML block scalars across the shared helper/Hermes builder, or reject unsupported scalar styles in lint with a clear error.Decide whether
--linkmay replace user-owned files. With a pre-existing ordinary agent file in the selected destination,install.sh --tool claude-code --link --no-convert --agent ai-engineer --path <temp>exits 0 and replaces that file with a symlink. This is adjacent to #916's copy-mode symlink protection. If overwriting user content is unintended, I can fold a guard and regression into #916 instead of creating an overlapping PR; if it is the expected--linkcontract, I will leave it alone.
I have kept these separate from open work on parallel path quoting (#755), Hermes search ranking (#869), and #913–#916. Please indicate the preferred order and any item you would rather skip. I will add any newly verified candidates to this issue before proposing more PRs.
Focused agent-content candidates (2026-09-29)
Keeping the installer/CI items above pending your preferred order. The next work is limited to individual existing agent Markdown examples and rules, which CONTRIBUTING lists as welcome PRs. Each candidate will be one independent file change, with a before/after reproduction or an explicitly described scenario check. No generated output, shared installer scripts, CI changes, or manifest updates are proposed in this batch.
- Application Security Engineer: parse the actual pip-audit JSON object and surface scanner failures instead of reporting no findings.
- Cloud Security Architect: allow sender egress as well as receiver ingress in the default-deny Kubernetes example.
- Threat Detection Engineer: remove attacker-controlled command-line substring exclusions from encoded-PowerShell detection.
- Incident Responder: create a private, unpredictable evidence directory instead of reusing a predictable
/tmppath. - Blockchain Security Auditor: normalize oracle prices by
10 ** decimals, not the decimals count. - Secrets/Credential Engineer: use valid PostgreSQL schema/table grants in the Vault role example.
- Data Engineer: fix the gold refresh's invalid Spark minimum expression and bound the Delta replacement interval.
- Database Optimizer: keep posts with no comments from returning a JSON object full of nulls.
- Database Reliability Engineer: correct migration locking claims and the writer/backfill order that leaves fresh nulls.
- Payments/Billing Engineer: keep a webhook crash from permanently acknowledging unfinished fulfillment.
- API Platform Engineer: make the OpenAPI example parse and resolve its declared schemas.
- DevOps Automator: replace an ALB CPU alarm that receives no metric datapoints with the EC2 Auto Scaling metric/dimension.
- API Tester: make the example suite use the actual Playwright runner and measure concurrent request latency correctly.
- Test Automation Engineer: configure retries and failure traces through supported Playwright options.
- Performance Benchmarker: gate failed k6 business checks instead of allowing a successful exit despite invalid payloads.
- Test Results Analyzer: parse the example's nested JSON report consistently and make its coverage assessment entry point runnable.
- Accessibility Auditor: include WCAG 2.1 A/AA axe tags in the advertised WCAG 2.2 audit.
- Evidence Collector: allow zero verified defects and distinguish screenshot observation from successful backend submission.
- Git Workflow Master: create an independent worktree branch and explicitly set the feature upstream instead of tracking main.
- Internationalization Engineer: pass ICU message strings to FormatJS instead of translator descriptor objects.
Validation will distinguish local example execution from checks requiring a live Kubernetes, SIEM, Vault, or EVM deployment. I will keep feedback and status in the corresponding focused PRs.
Next individually scoped content candidates (2026-09-29)
The next requested batch stays within the documented always-welcome existing-agent content path. Each proposed PR edits one existing agent file, carries before/after evidence, and avoids the shared installer/CI proposals awaiting priority feedback.
- Prevent customer joins from multiplying cloud cost totals (
engineering/engineering-finops-engineer.md): Joining both event-level tables on day multiplies every cost line by customer events and drops cost-only days. Monthly independent aggregates preserve exact spend and distinct active customers. - Include out-of-range observations in model drift PSI (
specialized/specialized-model-qa.md): The histogram silently drops new values beyond the baseline minimum/maximum, masking distribution shift; repeated quantiles also need correct bin normalization. - Reject ambiguous email identities before thread reconstruction (
engineering/engineering-email-intelligence-engineer.md): Two missing Message-ID headers collapse to the same None key, losing message bodies, attribution, and graph nodes silently. Duplicate IDs have the same failure. - Decode compressed audio into valid PCM chunks for transcription (
engineering/engineering-voice-ai-integration-engineer.md): Stream-copying accepted AAC/MP3 sources into a WAV file preserves compressed codecs instead of model-ready PCM. Zero chunk duration also makes the loop infinite. - Keep Electron IPC events out of renderer callbacks (
engineering/engineering-desktop-app-engineer.md): Passing the renderer callback straight to ipcRenderer.on exposes the privileged event object and provides no unsubscribe, accumulating callbacks on component remounts. - Fix broken FFmpeg continuation and bind GOP length to frame rate (
engineering/engineering-video-streaming-engineer.md): The backslash followed by spaces/comment terminates the FFmpeg command before audio/output options; 48 frames is not two seconds unless the output frame rate is actually24. - Make document chunks match the RAG ingestion contract (
engineering/engineering-rag-pipeline-engineer.md): The real splitters return Document instances but ingest_document subscripts each item as a dict. Normalize both chunking branches and serialize metadata for default asyncpg JSONB encoding. Existing #752 changes diagnosis/retrieval guidance, not these ingestion hunks. - Scope tenant RLS context to each database transaction (
engineering/engineering-identity-access-engineer.md): Session-level SET leaks tenant state through pooled connections. Table-owner sessions also bypass the advertised isolation unless FORCE is enabled. Missing transaction context now fails closed. - Keep collaboration replay cursors contiguous and ignore duplicate delivery (
engineering/engineering-realtime-collaboration-engineer.md): Server opId deduplication does not prevent repeated delivery. Advancing to an out-of-order operation skips the missing change permanently; advancing before apply also loses a failed operation. - Validate YAML reorder pointers before mutating a sequence (
engineering/engineering-universal-document-compiler.md): A source pointer for a different list silently moves an item from the target list; out-of-range sources insert undefined. Decode RFC6901 keys and validate parsed YAML, membership and both indices before mutation. - Connect the knowledge graph ingestion workflow to its entry node (
engineering/engineering-knowledge-graph-engineer.md): The StateGraph has edges between all processing nodes but no START entry; actual LangGraph refuses to compile it. The documented ingestion pipeline cannot run. - Reject empty WeChat HTTP errors without leaving requests pending (
engineering/engineering-wechat-mini-program-developer.md): An HTTP500 with null response body throws from wx.request success callback before rejecting the wrapper Promise, leaving loading flows stuck. Preserve structured messages and reject empty/text errors. - Make the GitHub MCP example runnable and return only issues (
specialized/specialized-mcp-builder.md): The Python server omits imports for all runtime I/O/JSON functions, and its issue tool includes PRs from GitHub’s combined listing. Add explicit imports and preserve an issue-only response. One listing page, not a complete search index. - Enforce Blender asset validation before exporting selections (
game-development/blender/blender-addon-engineer.md): The export button bypasses the validator, and an empty selection or material slot without a material passes validation. Gate export on successful checks and reject these concrete invalid selections. - Drain PDF jobs before recycling the browser without recursive locks (
engineering/engineering-pdf-engine-architect.md): recycle holds the lock then awaits initialize which reacquires it, deadlocking at the first recycle. Closing a shared browser during another active render also aborts that request. Reserve active jobs before creating contexts and recycle only after draining them.
Source: msitarzewski/agency-agents