• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

php-bug-catcher / bug-catcher
86%
main: 94%

Build:
Build:
LAST BUILD BRANCH: v2.4.0
DEFAULT BRANCH: main
Repo Added 10 Sep 2024 01:22PM UTC
Files 153
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH 1.9.0
branch: 1.9.0
CHANGE BRANCH
x
Reset
  • 1.9.0
  • 0.1.4
  • 1.1.0
  • 1.1.1
  • 1.1.2
  • 1.1.3
  • 1.1.5
  • 1.1.6
  • 1.1.7
  • 1.1.8
  • 1.2.0
  • 1.2.1
  • 1.2.2
  • 1.2.3
  • 1.2.4
  • 1.3.0
  • 1.4.0
  • 1.5.0
  • 1.5.1
  • 1.5.2
  • 1.6.0
  • 1.7.0
  • 1.8.0
  • 1.8.1
  • feat/mcp-server
  • fix/stacktrace-display
  • main
  • multi-login
  • selection
  • tailwind
  • v2.0.0
  • v2.0.0-RC1
  • v2.0.0-RC2
  • v2.0.0-RC3
  • v2.0.0-RC4
  • v2.0.1
  • v2.0.2
  • v2.0.3
  • v2.1.0
  • v2.2.0
  • v2.3.0
  • v2.4.0

21 Sep 2026 01:38PM UTC coverage: 86.434% (+0.4%) from 86.077%
35607217185

push

github

tito10047
feat(mcp): let the tools read a custom record type

The finder rooted every query at RecordLog, so a record type an application
adds by extending Record directly was collected, shown on the dashboard, and
then invisible to the one reader that could act on it. A cron run that never
finished is exactly such a type, and exactly the thing worth handing to an
assistant.

Queries now root at Record and are narrowed by bug_catcher.mcp.record_types,
resolved to discriminator values by the new Mcp\RecordTypes and applied the way
LogList already does it. The default stays RecordLog and RecordLogTrace, so an
application that configures nothing sees no change.

Kept apart from dashboard_list_items on purpose. A token holder can resolve and
archive what it finds, so adding a type is a decision to take on its own, not a
side effect of putting it on a page. A class outside the discriminator map is
refused with an exception naming the ones that are in it - LogList drops unknown
classes silently, and that is precisely how this repository's own test app came
to list a class that does not exist (fixed here too).

Three consequences worth spelling out:

Record now answers getMessage(), getLevel() and getRequestUri() with null, so
every subtype has the shape the tools promise. Deliberately not #[Ignore]d: the
serializer merges attribute metadata down the hierarchy, so ignoring the getter
here also ignores the mapped property in RecordLog, and every ingest POST fails
validation as a blank message. Twenty tests said so.

minLevel cannot read record.level off a Record root - DQL has no TREAT() - so it
becomes a semi-join into RecordLog. That says the right thing as well: asking
for a level floor asks for the records that carry a level, so a cron run drops
out rather than passing itself off as level 0.

groups() sets HINT_FORCE_PARTIAL_LOAD, since a Record root LEFT JOINs every
subtype table and the aggregate reads none of them. representatives() must not:
those entities are ... (continued)

59 of 61 new or added lines in 4 files covered. (96.72%)

1166 of 1349 relevant lines covered (86.43%)

11.58 hits per line

Relevant lines Covered
Build:
Build:
1349 RELEVANT LINES 1166 COVERED LINES
11.58 HITS PER LINE
Source Files on 1.9.0
  • Tree
  • List 64
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
35607217185 1.9.0 feat(mcp): let the tools read a custom record type The finder rooted every query at RecordLog, so a record type an application adds by extending Record directly was collected, shown on the dashboard, and then invisible to the one reader that coul... push 21 Sep 2026 01:42PM UTC tito10047 github
86.43
See All Builds (111)
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc