frameworkbug-feature-scan · v31099:claude-chat-c1d32026-11-08All documents

Bug & feature scan — daily review framework

Bug, feature & security scan — daily review framework

North star: Every real problem, security weakness and worthwhile improvement on our sites is found, proven, ranked and waiting in one list any AI can pick up and finish, so the owner never has to find bugs himself. Hard gates (never bend): read-only on the sites under review (no real leads, orders, sign-ups, payments, load tests or exploit attempts); every finding reproduced live in this run with evidence; no secrets, personal or customer data in a finding; never propose rewriting owner-approved copy; user, customer or subscription counts are never a finding; gated-lane fixes ship through a PR and owner approval; security checks stay passive (headers, TLS, public responses, shipped code) and a security finding never contains a secret value or working exploit steps. Everything else is a default. Try a better or unusual way when it serves the north star; record what you changed and why in the change log. Change log: bottom of this page (who, when, why).

The list: https://projects.jbnx.io/#/backlog (sortable; click any row for full detail and a copy-ready block for agents) Write path: agent_ops.backlog_report(handle, item) on the JBNX Supabase project (ngjmqdzpnhwpybtssykz) Jev labels: POST https://ngjmqdzpnhwpybtssykz.supabase.co/functions/v1/jev-triage with header x-actor: 1099:<your handle>

1. Copy-paste: make any AI run this daily

Paste into any agent's scheduler (Claude scheduled task, Cowork, Cursor background agent, Viktor). Fill the three blanks.

Daily bug & feature scan. Follow https://projects.jbnx.io/framework/bug-feature-scan exactly.
SITES: <https://site-one.com>, <https://site-two.com>
HANDLE (fixed, never mint another): <1099:your-handle>
Directive: fetch https://hi.jbnx.io/core once and follow it. Supabase project ngjmqdzpnhwpybtssykz.
Credentials by name only (Supabase Edge secrets, Railway variables); never read or print a value.
Run the Scanner loop (section 3) for every site, write each finding with agent_ops.backlog_report,
then end with the final message from section 3 step 8. No hard stops: one failing page or tool never stops the run.

2. What counts

Bug — something that exists is broken, wrong, misleading, inaccessible, insecure, slow, or contradicts what the page promises. Security — a weakness someone could use to read, change or take data, accounts, money or systems (weak headers, insecure transport, secrets or internal endpoints in shipped code, auth or access gaps, risky dependencies). Security beats bug when both fit. Feature — nothing is broken; something missing would help visitors or the business (a clearer path to buy, a missing trust signal, an answer people look for and can't find).

Look for, on desktop (1366px) and phone (390px):

AreaChecks
WorksHTTP status, redirect loops, dead links and images, console errors, forms that never submit or never confirm (watch validation and the request, never send a real lead), buttons that do nothing
Looks rightlayout breaks at 390px, overlapping or cut-off text, unreadable contrast, missing images
Says the right thingwrong prices or dates, contradictions between pages, stale claims, typos in headlines and buttons
Fastslow first paint or heavy pages (PageSpeed or a timed load), layout shift
Findabletitle, meta description, canonical, robots, sitemap, Open Graph, structured data
SecurityHTTPS and redirects, mixed content, security headers (HSTS, CSP, X-Frame-Options, Referrer-Policy), cookies without Secure/HttpOnly, keys or internal URLs in shipped JS, open admin or debug paths (look, never log in or force), outdated libraries with known advisories
Accessiblelabels on inputs, alt text, keyboard focus, headings in order
Missingthe next thing a visitor needs and can't do (feature ideas: say who benefits and how we'd measure it)

Default limit: up to 10 new findings per site per run, best first. Raise it when a site is new or badly broken, and log why.

3. Scanner loop

  1. Boot. Fetch https://hi.jbnx.io/core. Route the run's prompt through Jev (R19). Claim each project slug in read mode with a note naming this framework.
  2. Pick pages. The sitemap, the main nav, and the money paths: home, pricing, contact or lead form, sign up and sign in, checkout, the top pages from the host's /insights if present.
  3. Check each page against section 2. Re-test anything suspicious once before writing it down; flaky is a finding only if it fails twice.
  4. Collect evidence for every finding: exact URL, viewport, time, and the proof (console line, HTTP status, the exact wrong text, a screenshot link if your tools save one). No evidence, no finding.
  5. Label with Jev. Send up to 25 findings per call to jev-triage with {findings:[{title, summary, url, steps, expected, actual, evidence}]}. It returns kind (bug, feature or security), severity, impact (1–5) each with a confidence and distribution.
  6. Confidence 0.5 or higher: use Jev's label.
  7. Below 0.5: decide yourself and write "fallback": "low confidence, picked by hand" in jev.
  8. Jev down: write "fallback": "picked by hand, Jev down", say it once, continue.
  9. Write each finding (one call each; it dedupes, ranks and opens the task):
   select agent_ops.backlog_report('<handle>', '<item json, section 4>'::jsonb);
   

created = new item, seen_again = already open (seen count goes up), regression = it was closed and came back.

  1. Re-check the open list for your sites: select * from agent_ops.v_backlog where project_slug in (...) and task_status in ('todo','blocked'). If one no longer reproduces, say so in the final message with evidence. Do not close it yourself; the worker or verifier closes with proof.
  2. Finish. Record usage (POST https://projects.jbnx.io/api/1099/record-usage), release the claims. Final message, 2–5 lines: new / seen again / regressions per site, the top 3 by rank with their links (https://projects.jbnx.io/#/backlog/<id>), and any gaps. Nothing new: one line saying so.

4. Item contract

FieldRequiredNotes
projectyesproject slug (section 6)
kindyesbug, feature or security (Jev)
titleyes8–200 chars, says what is wrong or wanted: "Contact form Send does nothing on iPhone"
severityyescritical high medium low (Jev)
impactyes1–5 (Jev)
urlyes for bugsexact page
summaryyes1–3 plain sentences a person understands cold
details.stepsbugs, securitynumbered steps that reproduce it (security: the passive check only)
details.expected / details.actualbugsone line each
details.acceptanceyesthe checks that prove it is done, testable on the live site
details.evidenceyeslist of strings or {label, url, note}
details.user_impact / details.business_impactyeswho it hurts or helps, and how
details.suggested_fixif knownthe likely fix in one or two lines
details.area / details.filesif knownpage, component, repo path
details.effortif knownS, M or L
details.environmentfor bugsbrowser, device, viewport
details.relatedoptionallinks to related items or docs
details.exposuresecuritywhat could be read, changed or taken, and by whom
details.categorysecuritye.g. transport, headers, secrets exposure, access control, dependency
details.verificationsecuritythe safe one-line re-check that proves it fixed
details.referencessecurity, optionaladvisory or guidance links (OWASP, CVE)
jevyes{kind, severity, impact, model, latency_ms, request_id, fallback?} as returned
fingerprintoptionalsupply one only to merge findings the default would split

Example:

{"project":"lp-jbnx","kind":"bug","title":"Contact form Send does nothing on iPhone","severity":"high","impact":4,
 "url":"https://jbnx.io/contact","summary":"On iPhone Safari, tapping Send on the contact form does nothing and no request is sent.",
 "details":{"steps":["Open https://jbnx.io/contact on an iPhone (390px)","Fill every field","Tap Send"],
  "expected":"A thank-you message and the lead recorded","actual":"Nothing happens; no network request",
  "acceptance":["Form submits on iPhone Safari","Thank-you message shows","Lead appears in the CRM"],
  "evidence":["Console: TypeError at contact.js:41"],"user_impact":"Phone visitors cannot reach us",
  "business_impact":"Lost leads from most traffic","suggested_fix":"Bind the handler to the form submit event",
  "environment":"iOS Safari, 390px","effort":"S"},
 "jev":{"kind":{"label":"bug","confidence":0.93},"severity":{"label":"high","confidence":0.71},"impact":{"label":4,"confidence":0.62},"model":"jev-latest"}}

5. Ranking (done by the database, never by hand)

rank = severity weight × impact × (0.5 + 0.5 × Jev kind confidence) × type factor severity weight: critical 10, high 6, medium 3, low 1 · type factor: security 1.2, bug 1.0, feature 0.8 · highest possible 60. Task priority from rank: 30+ → P1, 15+ → P2, 6+ → P3, 2+ → P4, else P5. Same fingerprint while open = one item with a rising seen count.

6. Which project a host belongs to

HostProject slug
fedm8.com, www.fedm8.comfedm8-net
ai.fedm8.com, scan.fedm8.comfedm8
jbnx.io, www.jbnx.iolp-jbnx
anything elselook it up in portfolio.projects (name, repo) or the estate map (R12)

7. Worker: picking up an item

  1. Open https://projects.jbnx.io/#/backlog, or query select * from agent_ops.v_backlog where task_status = 'todo' and (claimed_by is null or claim_expires_at < now()) order by rank_score desc nulls last limit 5;
  2. Take the highest one nobody holds. Claim its project slug for write work, naming the task ref (BF-n).
  3. Reproduce on the live URL first. If it no longer happens, put the task in review with the evidence instead of changing code.
  4. Fix through the project's release lane (gated: PR plus owner approval; PROD-IT: push to main, then verify the live URL).
  5. Prove every "done when" check on the live site, record the verification, move the task to review or done with proof, record usage, release the claim. The list updates itself.

8. Site-specific rules

Change log

Every change to this framework: who, when, why. Source: agent_ops.catalog_changelog.

When (UTC)WhoVersionWhatWhy
2026-11-08 19:391099:claude-chat-c1d3v3Worker pick-up query: rank_score desc nulls lastPostgres sorts nulls first on desc, so the worker query handed agents the 14 older unranked reports before Jev-ranked ones
2026-11-08 19:231099:claude-chat-c1d3v2v2: security type (definition, passive checks, item fields exposure/category/verification/references, rank factor 1.2, worker rule)Owner asked (2026-11-08) to add security to the list alongside bugs and features
2026-11-08 19:231099:claude-chat-c1d3changed: descriptionOwner asked (2026-11-08) to add security to the list alongside bugs and features
2026-11-08 17:241099:claude-chat-c1d3v1new document version: Bug & feature scan — daily review frameworkOwner asked (2026-11-08) for a reusable daily bug/feature scan framework that any AI can run; Jev must be able to route to it
2026-11-08 17:241099:claude-chat-c1d3added to catalogOwner asked (2026-11-08) for a reusable daily bug/feature scan framework that any AI can run; Jev must be able to route to it