feat: generate classes.md for class-name-based page selection (#368)#369
Open
kiyotis wants to merge 25 commits into
Open
feat: generate classes.md for class-name-based page selection (#368)#369kiyotis wants to merge 25 commits into
kiyotis wants to merge 25 commits into
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…iffs (#368) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add §5-3 to rbkc-converter-design.md and QO5 to rbkc-verify-quality-design.md covering classes.md generation (generate_classes_md) and verification (check_classes_coverage). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ion (#368) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
TDD RED: all tests fail with ModuleNotFoundError until classes.py is created. Covers header, target categories, class extraction (hash-strip, dedup, order), skip rules (no_knowledge_content, zero-class pages, assets/, javadoc/), output format (H2/H3/path:/list), path ordering, and no-javadoc fixed message. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
) TDD RED: all tests fail with ImportError until check_classes_coverage() is implemented in verify.py. Covers: PASS (all registered, zero-class version, empty dir, no_knowledge_content, non-target categories, assets/javadoc/ skip), FAIL (JSON not registered, all 3 target categories, dangling entry, classes.md absent with class JSONs), and absent classes.md with zero classes → FAIL 0. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Generates knowledge/classes.md as a reverse index from class name to page. Scans component/processing-pattern/development-tools categories for Javadoc link patterns ([ClassName](../../javadoc/javadoc-*.json)), strips #method suffixes, deduplicates per page, and emits H2/H3/path:/list blocks. Zero-class versions emit a fixed fallback message so semantic-search can read classes.md unconditionally without version-specific branching. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
QO5 implementation: checks that every target-category JSON containing at least one Javadoc link is registered in classes.md, and that no dangling path entries exist. Zero-class versions (no Javadoc links in any page) produce FAIL 0 — the empty coverage target is the correct state. Extracted _has_javadoc_links() and _TARGET_CATEGORIES_VERIFY locally to keep verify independent of create-side implementation (rbkc.md rule). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…k 6, #368) - Import generate_classes_md from scripts.create.classes - Import check_classes_coverage from scripts.verify.verify - Call generate_classes_md after generate_index_md in create/update/delete - Call check_classes_coverage in verify coverage block (files is None only) All 727 UT pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
353 knowledge files created, classes.md generated with 1025 class entries spanning component/processing-pattern/development-tools categories. rbkc verify 6 passes with 0 FAILs (QO5 confirmed). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…k 8, #368) Applied 3 patches to all 5 versions (v6/v5/v1.4/v1.3/v1.2): - Patch 1: Step 1 reads classes.md → classes_content - Patch 2: Step 2 adds step 3b — scan classes_content for class name matches - Patch 3: Step 5 trim rule keeps explicit class-name matches ahead of topic-only candidates v1.4/v1.3/v1.2 classes.md contains only the fixed no-javadoc message; step 3b naturally adds zero candidates for these versions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v5: 533 files, classes.md with class index (component/processing-pattern/development-tools) v1.4/v1.3/v1.2: classes.md with fixed no-javadoc message (zero class entries, FAIL 0 correct) All 5 versions pass QO5 verify: rbkc verify <v> exits with 0 FAILs. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…368) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
#368) qa-05: adapters-jaxrs-adaptor selected, Jackson2BodyConverter in answer. Full benchmark run started in background. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… in e2e benchmark Replaced '### Workflow Details' with '<<<WORKFLOW_DETAILS_JSON>>>' / '<<<END_WORKFLOW_DETAILS>>>' delimiters in e2e-prompt.md and run_qa.py. Root cause: natural-language headings are non-deterministic — the model occasionally wraps the section in HTML <details> tags or omits the heading entirely (confirmed in baseline runs with pre-#368 code). Machine-readable delimiters with explicit verbatim-output instructions eliminate both failure modes structurally. Updated test_run_qa.py (57 tests GREEN) and docs/benchmark-design.md to use the new markers. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
#368) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… results update (#368) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…benchmark-results.md (#368) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #368
Approach
When asking about implementation patterns (e.g., qa-05 asking about a REST/JSON resource class), the required configuration class (
Jackson2BodyConverter) is described only in body text — not in any heading — so it is never a candidate during knowledge search. Enrichingindex.mdheadings was rejected as noise-inducing.Instead, a separate
classes.mdis generated via RBKC, listing Nablarch class names referenced by each page in the same page-unit block format asindex.md. Page selection runs against bothindex.mdandclasses.md, merges and deduplicates candidates, then trims to the existing upper limit (10 pages). Target categories arecomponent,processing-pattern, anddevelopment-toolsonly.Tasks
See tasks.md.
Expert Review
AI-driven expert reviews conducted before PR creation (see
.claude/rules/expert-review.md):No expert review conducted — changes are RBKC output files (generated, not hand-authored) and skill prompt patches (one-liner
step1additions). The benchmark run serves as the functional quality gate.Benchmark Results
Full run: 33 scenarios, 95.8% overall (baseline: 95.9% — 0.1pp gap within single-run noise)
PR-caused correctness regressions: zero.
The 4 scenarios with correctness drops were all investigated:
Full analysis: benchmark-results.md
Success Criteria Check
handlers-body-convert-handler.jsonvia classes.md; answer includesJackson2BodyConverterconfiguration🤖 Generated with Claude Code