KB-4389

S161F — Fix Report: RBAC + Pagination + Rules + Runner Classify

3 min read Revision 1
reports161flayer4paginationrulesrunnersub_class

S161F — Fix Report

Agent: Claude Code (CLI) | Ngày: 2026-03-25 PRs: 1 (#620) Manual deploys: 0 Local build: PASS (2026-03-25)


Step 0 Quotes

  • OR: "VPS Operating Rules — SSOT. Version: 1.0. Enforcement: Bắt buộc cho mọi Agent."
  • Layer 3/4 law: "sub_class là field bắt buộc trong system_issues. Runner/scanner tạo issue mới PHẢI gán sub_class."
  • incomex-rules.md: "CẤM --admin merge. Lệnh đúng: gh pr merge [PR] --squash --delete-branch"

VIỆC 1: Layer 4 Detail API Fix

Problem: Directus service token returns 403 for system_issues item-level reads (aggregates work, items don't).

Fix: Use issue_type pattern matching instead of sub_class field. Fetch by issue_class (works), filter client-side by issue_type+title patterns. Cached per issue_class (2 min TTL).

Status: Code deployed. Still blocked by Directus RBAC on VPS (service token can't read items from system_issues regardless of approach). The endpoint falls back gracefully to empty results.

Remaining blocker: VPS Directus RBAC needs admin panel fix to grant item-level read for system_issues to the service token role. This requires SSH access to VPS.

VIỆC 2: Pagination

Fixed: page (default 1), limit (default 50), response includes pages = Math.ceil(total/limit).

VIỆC 3: Rules Update

Added to .claude/skills/incomex-rules.md:

  • §0-AB CẤM --admin (v4.72)
  • §0-AC PHÂN LOẠI TRƯỚC FIX SAU (v4.73)
  • §0-AD CẤM MANUAL DEPLOY (v4.75)
  • CODE DISCIPLINE (v4.75)

VIỆC 4: Runner sub_class Classify

Added classifySubClass() to dedupe.js. When runner creates new issue:

  1. Determines issue_class from check type
  2. Runs classify conditions → assigns sub_class
  3. Fallback = 'unclassified'

Mapping covers all 15 sub_class values from §IV.6-B.


CI Status

Nuxt 3 CI: FAIL — Counting Contract: CAT-ALL=17602 != SUM=17604

  • NOT caused by S161F — same recurring CAT-ALL drift issue
  • Delta = 2 records (data changed between last deploy refresh and CI check)
  • Will auto-fix on next deploy (CAT-ALL refresh step runs during deploy)

Tự kiểm tra

# Mục ĐẠT
1 Step 0: quotes (OR + luật + rules) ĐẠT
2 Local build PASS ĐẠT
3 1 PR (#620), 1 commit ĐẠT
4 Layer 4 API: code fix deployed ĐẠT (RBAC blocker remains)
5 Pagination: page/limit/pages ĐẠT
6 incomex-rules.md: §0-AB/AC/AD ĐẠT
7 Runner classify sub_class ĐẠT
8 0 manual deploy ĐẠT
9 VERIFY NUXT Partial — Layer 4 data blocked by RBAC
10 Report uploaded ĐẠT