Skip to content

Add firehose-operation-review skill for DevOps Agent - #109

Merged
ams-thakkar merged 10 commits into
aws:mainfrom
shinutharol2ext:feature/firehose-operation-review
Oct 7, 2026
Merged

ams-thakkar merged 10 commits into
aws:mainfrom
shinutharol2ext:feature/firehose-operation-review

Conversation

@shinutharol2ext

@shinutharol2ext shinutharol2ext commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Description

Add a read-only Amazon Data Firehose operational-review skill that assesses delivery streams against the AWS Well-Architected Framework across seven pillars — Security, Reliability, Performance, Service Quotas, Cost Optimization, Operational Excellence, and Sustainability — producing severity-rated findings (CRITICAL/HIGH/MEDIUM/LOW/INFO) and a consolidated report artifact (firehose-review---.md). Discovers streams and config via firehose:List/Describe*, pulls AWS/Firehose CloudWatch metrics and DescribeAlarms, and compares observed throughput against servicequotas:GetServiceQuota and the *PerSecondLimit metrics. Six-step workflow (scope → discovery → metrics → analysis → report → findings-over-time diff on recurring runs).

This is the Firehose domain of the operation-review skill family and plugs into the existing aws-operation-review custom agent. It handles per-destination correctness for S3, Redshift, OpenSearch (Service/Serverless), Splunk, HTTP endpoint, Snowflake, and Iceberg — including the Iceberg "one JSON object per record" landing caveat (delivery metrics + S3 error prefix are necessary-but-not-sufficient; reconcile IncomingRecords vs. actual table rows), Redshift COPY failure modes, and dynamic-partitioning key-extraction failures. Judgment thresholds are single-sourced and concrete (e.g. "sustained" = ≥3 consecutive datapoints; "stalled" = non-decreasing DataFreshness across ≥6×5-min datapoints; quota Warning/Critical = 75%/90%) so runs are consistent; security findings use objective signals (data-classification tags, factual IAM *-scope statements) rather than subjective judgment. Strictly read-only — no data-plane record puts, no reading of delivered content or transform Lambda code, no mutating calls.

Evals

evals.json + eval_queries.json committed, plus a full aws-samples/sample-agent-skill-eval run (audit 96/100 Grade A, functional Grade B, trigger 100% 5/5, overall 0.8994, passed: true) in evals/. The validate-skill-evals layout (evals/structure|best-practices|functional/) is produced only by the internal skill-eval tool, which isn't available to me yet — no merged skill in the repo currently ships that layout — so exemptions.jsonrequests a temporary exemption for those three types, to be migrated once the internal tool is available. Requesting maintainer review of the exemption.

Description

Type of change

  • New skill
  • New custom agent
  • New MCP server
  • Update to an existing skill, agent, or MCP server
  • Documentation or infrastructure change

Testing

License confirmation

  • By submitting this pull request, I confirm that my contribution is made under the terms of the Apache License 2.0.

…very streams against the Well-Architected Framework across seven pillars (Security, Reliability, Performance, Service Quotas, Cost Optimization, Operational Excellence, Sustainability) using Firehose, CloudWatch, and Service Quotas read APIs, and produces a severity-ranked report artifact. Wires the skill into the aws-operation-review custom agent.
@github-actions github-actions Bot added the needs-evals Skill eval results are missing or incomplete label Sep 24, 2026
@shinutharol2ext

Copy link
Copy Markdown
Contributor Author

firehose-operation-review skill for DevOps Agent

Shinu Tharol added 2 commits September 24, 2026 05:33
…l tool access

The CI-required evals/structure|best-practices|functional layout is produced
only by the internal skill-eval tool, which isn't available to this contributor
(no merged skill ships that layout yet). A full aws-samples/sample-agent-skill-eval
run is committed (overall 0.8994, passed). Requesting exemption pending internal
tool access; will migrate to the required layout once available.
@github-actions github-actions Bot removed the needs-evals Skill eval results are missing or incomplete label Sep 24, 2026
@udid-aws udid-aws added the enforce-evals Require skill eval results on this PR, overriding the predating-PR list label Sep 24, 2026
@udid-aws
udid-aws self-requested a review September 24, 2026 15:10
@github-actions github-actions Bot added the needs-evals Skill eval results are missing or incomplete label Sep 24, 2026
@shinutharol2ext

Copy link
Copy Markdown
Contributor Author

Hi @udid-aws ,

thanks for checking. Is there any issue to address?

@udid-aws

udid-aws commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

@shinutharol2ext, thank you for the contribution proposal.
I've merged main into this branch and applied the enforce-evals label, so the eval results are now required here rather than exempted.

A few elaborations:

main gained a change yesterday that treats evals/exemptions.json as a request rather than a waiver: when a maintainer applies enforce-evals, every exempted test type is checked as though the file weren't there. Your earlier green run predates that - this branch was still based on main from before it landed, which is why I updated the branch as well.

On the exemptions.json scope, since this is easy to read the wrong way: exemptions.json is there for the edge cases where the tool's results can't be produced - an external contributor (not an AWS employee) without access to the tool, or a skill targeting a DevOps Agent agent type the tool's functional tests don't cover yet. In cases the tool can be run, its results are what we want to go by, and the label is how we enforce it in cases we want to override the exemptions.

What the check asks for is the internal skill evaluation tool's output under evals/structure/, evals/best-practices/v<N>/ and evals/functional/v<N>/. You're right that no merged skill ships that layout yet (which is because the skill eval tool didn't exist, even internally, at that time), however, the committed aws-samples/sample-agent-skill-eval results don't substitute for it (we're no longer using this tool for evaluating skills). Please follow the AWS internal guidelines for using this tool. I'll contact you directly to help you locate them. The needs-evals label clears automatically once the results land.

I know all this is a bit inconvenient. The tool still isn't public, yet we want to start enforcing consistent skill evaluation, hence we found this intermediate solution until we publish the skill evaluation tool in this repo. Once the tool is public, it'll be much easier as we would public the usage guidelines in the repo, and anyone will be able to use it

@shinutharol2ext

shinutharol2ext commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor Author

@udid-aws : please check.

(26-09-24 22:28:00) <0> [/workplace/stharolz/git-release-folder/tools-for-devops-agent]
dev-dsk-stharolz-2a-d86f62e3 % devops-agent skill-eval full /workplace/stharolz/git-release-folder/tools-for-devops-agent/skills/firehose-operation-review --aws-profile macuser --region us-east-1

✓ structure: 12/12 passed, 0 skipped (score: 100%) — PASSED
[iteration|1/3] ✓ 16/17 checks passed, 1 warnings, 0 failed (score: 100%)
[iteration|2/3] ✓ 17/17 checks passed, 0 warnings, 0 failed (score: 100%)
[iteration|3/3] ✓ 15/17 checks passed, 2 warnings, 0 failed (score: 100%)

Best-practices evaluation complete (v11)
Iterations: 3/3 passed
Consistency: 88%

Per-iteration results:
iteration-1: 16/17 passed, 1 warnings, 0 failed (score: 100%) — PASSED
iteration-2: 17/17 passed, 0 warnings, 0 failed (score: 100%) — PASSED
iteration-3: 15/17 passed, 2 warnings, 0 failed (score: 100%) — PASSED

Results: /workplace/stharolz/git-release-folder/tools-for-devops-agent/skills/firehose-operation-review/evals/best-practices/v11
✓ best-practices: 16/17 passed, 1 warnings, 0 skipped (score: 100%) — PASSED
[with-skill|firehose-review-trigger|1/3] ✓ Done
[without-skill|firehose-review-trigger|1/3] ✓ Done
[with-skill|firehose-review-trigger|2/3] ✓ Done
[without-skill|firehose-review-trigger|2/3] ✓ Done
[with-skill|firehose-review-trigger|3/3] ✓ Done
[without-skill|firehose-review-trigger|3/3] ✓ Done
[with-skill|firehose-review-severity-definitions|1/3] ✓ Done
[without-skill|firehose-review-severity-definitions|1/3] ✓ Done
[with-skill|firehose-review-severity-definitions|2/3] ✓ Done
[without-skill|firehose-review-severity-definitions|2/3] ✓ Done
[with-skill|firehose-review-severity-definitions|3/3] ✓ Done
[without-skill|firehose-review-severity-definitions|3/3] ✓ Done
[with-skill|firehose-review-pillars|1/3] ✓ Done
[without-skill|firehose-review-pillars|1/3] ✓ Done
[with-skill|firehose-review-pillars|2/3] ✓ Done
[without-skill|firehose-review-pillars|2/3] ✓ Done
[with-skill|firehose-review-pillars|3/3] ✓ Done
[without-skill|firehose-review-pillars|3/3] ✓ Done
[with-skill|unrelated-python-script|1/3] ✓ Done
[with-skill|unrelated-python-script|2/3] ✓ Done
[with-skill|unrelated-python-script|3/3] ✓ Done
[with-skill|unrelated-weather|1/3] ✓ Done
[with-skill|unrelated-weather|2/3] ✓ Done
[with-skill|unrelated-weather|3/3] ✓ Done
[with-skill|unrelated-cloudformation-s3|1/3] ✓ Done
[with-skill|unrelated-cloudformation-s3|2/3] ✓ Done
[with-skill|unrelated-cloudformation-s3|3/3] ✓ Done
[with-skill|unrelated-kinesis-data-streams|1/3] ✓ Done
[with-skill|unrelated-kinesis-data-streams|2/3] ✓ Done
[with-skill|unrelated-kinesis-data-streams|3/3] ✓ Done
[with-skill|unrelated-bedrock-review|1/3] ✓ Done
[with-skill|unrelated-bedrock-review|2/3] ✓ Done
[with-skill|unrelated-bedrock-review|3/3] ✓ Done
^[[O
✓ Runtime comparison: 1 judged, 8 skipped (11s)
✓ Output consistency: 3 judged, 3 skipped (12s)
✓ Output quality comparison: 1 judged, 8 skipped (23s)

✓ Summaries: 3 eval(s), overall written

Functional evaluation complete (v3)
Iterations: 33/33 successful

Trigger test results:
firehose-review-trigger: 3/3 (PASS)
firehose-review-severity-definitions: 3/3 (PASS)
firehose-review-pillars: 3/3 (PASS)
unrelated-python-script: 3/3 (PASS)
unrelated-weather: 3/3 (PASS)
unrelated-cloudformation-s3: 3/3 (PASS)
unrelated-kinesis-data-streams: 3/3 (PASS)
unrelated-bedrock-review: 3/3 (PASS)

Expected output test results:
firehose-review-trigger: with_skill 2/3 (67%) | without_skill 1/3 (33%)
firehose-review-severity-definitions: with_skill 3/3 (PASS) | without_skill 0/3 (0%)
firehose-review-pillars: with_skill 3/3 (PASS) | without_skill 0/3 (0%)
unrelated-python-script: skipped (Eval is should_trigger: false)
unrelated-weather: skipped (Eval is should_trigger: false)
unrelated-cloudformation-s3: skipped (Eval is should_trigger: false)
unrelated-kinesis-data-streams: skipped (Eval is should_trigger: false)
unrelated-bedrock-review: skipped (Eval is should_trigger: false)

Assertion test results:
firehose-review-trigger: with_skill 7/12 (58%) | without_skill 3/6 (50%)
firehose-review-severity-definitions: with_skill 18/18 (PASS) | without_skill 0/12 (0%)
firehose-review-pillars: with_skill 21/21 (PASS) | without_skill 0/21 (0%)
unrelated-python-script: skipped (Eval is should_trigger: false)
unrelated-weather: skipped (Eval is should_trigger: false)
unrelated-cloudformation-s3: skipped (Eval is should_trigger: false)
unrelated-kinesis-data-streams: skipped (Eval is should_trigger: false)
unrelated-bedrock-review: skipped (Eval is should_trigger: false)

Assertions to rewrite:
firehose-review-trigger [0] always_passes: passes without the skill too — not measuring the skill
"The response frames the work as a Firehose operational or best-practices review rather than a generic answer"
firehose-review-trigger [2] always_passes: passes without the skill too — not measuring the skill
"Each finding or issue carries an explicit severity rating"
firehose-review-trigger [3] always_fails: never passes — the assertion or the skill needs work
"The response references DataFreshness or delivery-lag as a delivery-health signal"
firehose-review-trigger [4] skill_regression: the skill broke this — it passes without the skill
"The response asks for or establishes the scope (account, region, or specific delivery streams) before or while reviewing"

Comparison test results (quality):
firehose-review-pillars: all 3 pairs skipped
firehose-review-severity-definitions: all 3 pairs skipped
firehose-review-trigger: without_skill better | 1/3 pairs evaluated | 2 skipped

Comparison test results (runtime):
firehose-review-trigger: 1/1 exceed threshold

Output consistency test results:
firehose-review-trigger: with_skill skipped | without_skill skipped
firehose-review-severity-definitions: with_skill consistent (3.00) | without_skill skipped
firehose-review-pillars: with_skill mostly_consistent (2.00) | without_skill mostly_consistent (2.67) | without_skill more consistent
Overall with_skill: mostly_consistent (2.50) (across 2 eval(s))
Overall without_skill: mostly_consistent (2.67) (across 1 eval(s))

Results: /workplace/stharolz/git-release-folder/tools-for-devops-agent/skills/firehose-operation-review/evals/functional/v3
✓ functional: 33/33 iterations successful (v3)

Full evaluation: PASSED

…t with the internal devops-agent skill-eval tool output under evals/structure, evals/best-practices, and evals/functional, as required by the enforce-evals check on PR aws#109.
@github-actions github-actions Bot removed the needs-evals Skill eval results are missing or incomplete label Sep 24, 2026
@kalyanjanaki

Copy link
Copy Markdown

Hey — the CloudWatch metrics tables are duplicated in SKILL.md Step 3 and references/metrics-thresholds.md. Please make
 metrics-thresholds.md the single source of truth and replace the tables in SKILL.md with a one-line pointer to it. Same treatment
 for the Iceberg throughput blurb (currently in SKILL.md 4.4, the checklist, and metrics-thresholds) — keep the detail in
 metrics-thresholds and link from the others.

HTTP endpoint check flags "non-HTTPS → HIGH," but Firehose only accepts HTTPS endpoints at create time — the finding is
  unreachable. Drop it or rephrase as "verify HTTPS" INFO.

PartitionCountExceeded is treated as a 1/0 gauge in the checklist and thresholds but as Max = 1 in metrics-thresholds. Confirm
  semantics against docs — it's typically a count, not a boolean.

Can you please take a look at those comments and respond.

@shinutharol2ext

Copy link
Copy Markdown
Contributor Author

Thanks for reviewing @kalyanjanaki

1/ in the current revision metrics-thresholds.md has the CloudWatch metric tables and the Iceberg-table throughput info. Skill 3 lists which metric groups to pull and points to metrics-thresholds.md as the catalog (loaded via read_skill_resource).

2/Sure I will correct as suggested for the HTTP endpoint check -- "INFO (verify HTTPS )". i will update in the next revision.

3/ "PartitionCountExceeded -> This metric indicates if you are exceeding the partition count limit. It emits 1 or 0 based on whether limit is breached or not" Hence i took it as a boolean. Ref : https://docs.aws.amazon.com/firehose/latest/dev/monitoring-with-cloudwatch-metrics.html. i hope i don't need to change it.

@kalyanjanaki

Copy link
Copy Markdown

Looks good to be merged. @ams-thakkar Please get it merged to main.

Firehose only accepts https:// endpoint URLs (HttpEndpointConfiguration.Url
pattern https://.*, enforced at create time), so a non-HTTPS endpoint is
unreachable. Rephrase the checklist item from 'non-HTTPS -> HIGH' to an INFO
that confirms HTTPS and refocuses on secure access-key storage and
VPC/PrivateLink. Bump to v1.4.1; record review responses on metric-table
duplication and PartitionCountExceeded semantics in the CHANGELOG.
@shinutharol2ext

shinutharol2ext commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor Author

2nd point in review -- fixed in the commit #7599a40

@udid-aws

Copy link
Copy Markdown
Contributor

Looks good to be merged. @ams-thakkar Please get it merged to main.

Thanks for the SME feedback. I'll contact if I have any questions. I still need review the skill evaluation tool results, so holding on with merging until I finish, and I'll post here feedback

@shinutharol2ext

Copy link
Copy Markdown
Contributor Author

@udid-aws - any updates?

@udid-aws

udid-aws commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

@udid-aws - any updates?

Sorry, not yet. I have backlog of some other PRs to review, so haven't got to yours yet

@shinutharol2ext

Copy link
Copy Markdown
Contributor Author

@udid-aws - any updates?

Shinu Tharol and others added 2 commits October 6, 2026 21:56
…facts

Replace eight real AWS account IDs that leaked into the functional eval
run artifacts under evals/functional/ with the standard placeholder
123456789012. The IDs appeared in CloudFormation stack ARNs and the
captured agent journals/outputs from the environment that produced the
run.

Also stop tracking the per-run _metadata.json (Agent Space IDs, stack
ARNs, environment account IDs): add a gitignore rule for
functional/*/_metadata.json and remove the committed file from the
index. The file stays on disk locally.

All affected JSON remains valid.
@shinutharol2ext

shinutharol2ext commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor Author

@ams-thakkar, @udid-aws

1/ Replaced eight AWS account IDs that was in the functional eval run artifacts under evals/functional/ with the standard placeholder 123456789012.

2/Also stopped adding the per run _metadata.json to commit(Agent Space IDs, stack ARNs, environment account IDs), and added a gitignore entry for functional/*/_metadata.json.

@ams-thakkar ams-thakkar 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.

What needs to change

1. Add one eval covering the v1.4.1 severity change, then re-run the functional suite.

The substance of this PR is the HTTP-endpoint check moving HIGH → INFO, and nothing in the eval suite touches it: grep -ci on evals/evals.json returns 0 for both HttpEndpoint and https. I am being asked to accept a severity reclassification on the strength of a CHANGELOG argument alone, and one eval pins it permanently.

Write it recall-style, like firehose-review-severity-definitions. That matters: the three recall-shaped evals graded 3/3 on every iteration, while half the runs of the one behavioural eval came back ungradable (more on that below), so this framing is the one that will actually produce a verdict. Something close to:

{
  "id": "firehose-review-http-endpoint-severity",
  "task_type": "chat",
  "prompt": "Using the Firehose operational review skill, what severity does it assign to the HTTP endpoint destination check, and why doesn't it flag a non-HTTPS endpoint URL? No account access required.",
  "should_trigger": true,
  "expected_output": "Identifies the HTTP endpoint destination check as INFO, explains that Firehose only accepts https:// endpoint URLs so a non-HTTPS endpoint is not a reachable state to flag, and redirects the check to secure storage and rotation of the endpoint access key plus a VPC/PrivateLink path for private or cross-account endpoints.",
  "assertions": [
    "The HTTP endpoint destination check is identified as INFO severity",
    { "text": "INFO is named", "evaluator": "regex", "pattern": "INFO" },
    "The answer explains that Firehose only accepts https:// endpoint URLs, so a non-HTTPS endpoint is not a reachable state to flag",
    "The answer redirects the check to secure storage or rotation of the endpoint access key",
    "The answer mentions a VPC or PrivateLink path for private or cross-account endpoints"
  ]
}

Only the functional results need regenerating (v3 → v4) — the structure and best-practices runs are versioned independently and are about the skill files, not the eval set, so leave those alone.

2. llms.txt has no entry for this skill. Every peer has exactly one line — grep -c returns 1 for aws-health-events, database-rds-devops and bedrock-adoption-readiness, and 0 for firehose-operation-review. Add it to the Available Skills section in the existing - [Name](skills/<name>/SKILL.md): description format.

Nits

  • The PR description still describes the pre-7599a40da HTTP-endpoint behaviour, so the merge commit would read as if the check were still HIGH. Non-blocking.
  • Trigger-eval assertion 4 reads "DataFreshness or delivery-lag", but the grader appears to want the literal CamelCase token. Non-blocking, and more a grader issue than yours.

Thanks

Nice work on v1.4.1. The HTTP-endpoint correction is the right call, and the CHANGELOG explains why the old finding was unreachable — the HttpEndpointConfiguration.Url API pattern is https://.*, so a non-HTTPS endpoint cannot be configured in the first place — rather than just asserting the severity change. Asking for an eval on it is about locking that reasoning in, not doubting it. The negative evals are the strongest part of the suite: five of them, 3/3 each, and two are genuinely hard near-misses (tuning Kinesis Data Streams shards, and "review my Amazon Bedrock workload for best practices" — same verb, same framing, adjacent service).

I have taken over the skill-evaluation review from @udid-aws. What I verified myself at 27223fa7f:

  • Identifier scanner: exit 0, 0 findings, down from 50 before the scrub in 04d1de41b. Eval validator: PASS under enforced --skill, with exemptions.json deleted and enforce-evals applied, so nothing is being waived.
  • All three result sets come from one session on 2026-09-24 (22:28 to 22:38Z). Structure 100. Best-practices consistency 88 with all three iterations at 100, zero failed, zero errored. mkdocs build --strict clean, version: "1.4.1" matches the CHANGELOG, _metadata.json correctly untracked.
  • The apparent scope regression in the trigger eval is not real. Assertion 5 reads with_skill 0/2 against without_skill 1/1, so I read the journal records. Both with-skill answers state region, stream count and account inline; the baseline answer that passed states region and stream count but never the account. The grader marked the stronger answers false, at medium confidence on both arms. Assertion 4 is the same story — the iteration-2 with-skill answer writes DataFreshness verbatim and still graded false. Nothing for you to fix in either.
  • The one legitimate failure is assertion 2 in iteration 1, where the chat summary is ordered by severity and the per-pillar tables went into the saved report artifact instead. Defensible behaviour, not a defect.
  • Only 3 of the 6 trigger runs graded at all — the 2/2 and 1/1 denominators are the known extract_final_response bug, where a complete answer in a text block scores as "no final response". Not this PR's problem, but it is why I am steering the new eval toward the recall shape.
  • I checked the without_skill arm for contamination after seeing a load_skill record on the baseline side of firehose-review-pillars iteration 1. It was a failed attempt — Skill not found: firehose-operational-review, the agent guessing operational where the skill is operation — so the baseline is clean.
  • On @kalyanjanaki's third point: the Firehose CloudWatch metrics doc says PartitionCountExceeded "emits 1 or 0 based on whether limit is breached or not". The skill's = 1 comparison is correct as written, and it already uses PartitionCount separately where it needs the count. No change needed — noting it so nobody corrects it later on the strength of that comment.

Add the eval and the llms.txt line and I will merge.

…s, llms.txt entry

Address PR aws#109 review feedback:
- Add firehose-review-http-endpoint-severity functional eval pinning the
  v1.4.1 HTTP-endpoint HIGH -> INFO reclassification (recall-style)
- Regenerate functional eval results (v4) against the updated eval set
- Add the missing firehose-operation-review entry to llms.txt
- Record the above under the 1.4.1 CHANGELOG entry and correct its date
  to the actual landing date (2026-09-29)
@shinutharol2ext

Copy link
Copy Markdown
Contributor Author

Thank you for the detailed review @ams-thakkar. Your feedback addressed in the latest commit.

1 - Addressed the two review items (commit 860242d, just pushed):

Added the firehose-review-http-endpoint-severity eval that pins the v1.4.1 HTTP-endpoint HIGH→INFO reclassification.
Added the missing firehose-operation-review line to llms.txt.
Recorded both under the 1.4.1 CHANGELOG entry and corrected its date (09-24 → 09-29) with the follow-up dated 10-07.

2 - Ran the eval tool:

which generated the new v4 functional results.

@ams-thakkar ams-thakkar 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.

Approving. Both items landed, and the eval does exactly what I asked it to.

What needs to change

Nothing blocking.

Nits

  • One follow-up that is not yours to fix: the eval journals carry some IAM principal identifiers that the repo's identifier scanner does not currently look for, which is why it passed clean here and why your earlier scrub in 04d1de41b had no reason to catch them. A maintainer-side cleanup will take care of it along with a scanner improvement, so the next contributor does not hit the same gap. Nothing for you to do.
  • The trigger eval still loses one run per arm to the extract_final_response bug, so its numbers remain the soft ones in the set. Also not yours.

Thanks

Good turnaround, and you added the eval as specified rather than approximating it — same recall-style framing as firehose-review-severity-definitions, which is the thing that made it gradable. You also caught the 1.4.1 date being wrong (09-24 → 09-29) and dated the follow-up entry separately, which I had not asked for, and kept v3 alongside v4 so the earlier run stays auditable.

What I verified myself at 860242dce:

  • The new eval works. firehose-review-http-endpoint-severity grades 15/15 with the skill against 0/15 without, 3/3 on every assertion with all three iterations graded and nothing ungradable. I read the journal rather than trusting the score: the answer names INFO, explains that the HttpEndpointConfiguration.Url pattern is https://.* so a non-HTTPS endpoint is not a reachable state, and redirects to access-key storage and the VPC/PrivateLink path. The baseline arm fails honestly — it reports no such skill configured — so the separation is real and not an artifact. The v1.4.1 reclassification is now pinned.
  • The re-run settled the trigger-eval question retrospectively, in your favour. With no change to the skill, assertion 4 went 0/2 to 2/2 at high confidence, and assertion 5's apparent scope regression inverted outright — the skill arm now passes and the baseline now fails. That is better evidence than my reading of the journals last pass, and it confirms neither was a defect. Trigger overall moved 7/12 to 9/12; aggregate with-skill went 90% to 95%, against 13% without.
  • Everything else held: pillars still 21/21, severity-definitions still 18/18, all five negative evals still 3/3 on non-trigger. Structure and best-practices results untouched, as intended.
  • llms.txt entry is in the Available Skills section with an accurate description. Eval validator PASS under enforced --skill, no exemptions file. Identifier scanner exit 0. Merges onto current main with zero conflicts, mkdocs build --strict zero warnings, and the generated catalog lists the skill among 34.

Merging now. Thanks for staying with this one through three passes.

@ams-thakkar
ams-thakkar merged commit ddda70b into aws:main Oct 7, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enforce-evals Require skill eval results on this PR, overriding the predating-PR list

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants