Repository navigation
knowledge: Jackson 3 asString() throws on container nodes; node:test files misread by a Jest-only test floor - #315
Open
choiyounggi wants to merge 1 commit into
Open
choiyounggi wants to merge 1 commit into
choiyounggi wants to merge 1 commit into
Conversation
This was referenced Oct 29, 2026
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.
Knowledge flush — 2 insight(s) (headless auto-flush run 20261029-160814-38451)
9 queue rows were claimed this run: 2 ingested, 4 released because they plausibly
overlap open knowledge PRs, and 3 released unread because this headless run could
not find their queue files. Nothing was dropped or folded into another branch.
Verified best-practice
ca76a971902a3eeaJsonNode.asString()/asDouble()with no default throwJsonNodeExceptionon object/array nodes, where Jackson 2'sasText()returned"". For nodes that can hold a container, use the default-taking form (asString(""),asDouble(0.0)) orasStringOpt(), and test with a container valueasString(String defaultValue)returns the default "instead of throwing an exception for non-coercible values or coercing null (or missing value)";stringValue()throwsJsonNodeExceptionon non-string nodes;asStringOpt()exists. Read through a WebSearch summary: WebFetch of javadoc.io was not permitted in this run. The OpenRewrite 2→3 recipe page (https://docs.openrewrite.org/recipes/java/jackson/upgradejackson_2_3_jsonnodemethodrenames) listsasText(..)→asString. The session reproduced it on a jackson-databind 3.1.7 jar:ObjectNode.asString()andObjectNode.asDouble()threw,asString("")returned"", Missing/NullasString()returned"", and the reverted fix failed atBaseJsonNode.asString(BaseJsonNode.java:393)e9443b0f4120f8ae*.test.mjsto a Jest analyzer that counts onlyexpect(, so everynode:test+node:assertcase readsno-assertion. Treat it as a false negative and pass the case on asfloor=unknowninstead of adding a fakeexpect(assert.strictEqual, andnode --testruns**/*.test.{cjs,mjs,js}by default. A local read ofskills/orchestrate/scripts/test-floor.sh(dev-loop 1.34.2) shows thatframework_of()maps*.test.mjstojestandanalyze_jestsetshas_expectonly onexpect\(. Its case regex^[ \t]*(it|test)\(also matchesnode:test'stest(, so cases are counted but never satisfied. The session evidence was exit 3 on a file with 1,1,1,1,3 asserts per case, plus anERR_ASSERTIONred runExisting-layer check
Pages read: testing-quality-assertion-scanner-false-positive-on-unittest-convention, backend-java-spring-proxy-pitfalls, backend-common-errors-exception-handling
Indexes read:
INDEX.mdrouting viawiki/backend/index.md,wiki/backend/java/index.md,wiki/testing/index.md.e9443b0f4120f8ae:wiki_searchon the trigger rankedtesting-quality-assertion-scanner-false-positive-on-unittest-conventionfirst. That page already owns "a floor classifier has no pattern for this convention" (step 6,floor=unknown) and lists the Rust inline-test variant as an edge row. The trigger matches and the directive agrees, so the candidate was merged as one new Edge-cases row plus three Sources lines. The frontmatter gained the Node docs source,javascriptinapplies_to, andlast_verified2026-10-29. The testing index "load when" line for the page was extended. No conflict.ca76a971902a3eea:wiki_searchfor Jackson /JsonNode/ migration returned no Jackson page; the top hits were JPA, JSONC gates and zod pages, none about the same trigger. New pagebackend-java-spring-jackson-3-jsonnode-coercion.related:listsbackend-common-errors-exception-handling(the catch-all narrowing step; a back-link was added there),backend-common-change-impact-call-site-enumeration, andtesting-quality-minimum-case-set. No conflict.Open-PR check
Open
knowledge/*heads (12): #310, #309, #308, #307, #306, #305, #304, #301, #300, #299, #298, #293. This headless run cannot run git, so it could not diff those heads. It compared candidates against each PR's changed-file list and the Routing section of its body (read throughgh pr list --json files,body).ca76a971902a3eeabackend/java/index.mdonly for Spring env-var names and ktlint, not Jacksone9443b0f4120f8aeassertion-scanner-false-positive-on-unittest-convention.md. #310, #309, #300 and #293 edit other rows ofwiki/testing/index.mdonly8a67a97c4afd204c(grep -qSIGPIPE leaves the runner's temp dir)search-evidence-from-a-wrapped-grep,parsing-cli-structured-output), #300 (checks-that-cannot-pass). #307 released this row for the same reasonf332524447ff2105(gate ledger grep finds its own CHECK line;grepas a shell function)platforms/tools/search-evidence-from-a-wrapped-grep), #300 (checks-that-cannot-pass). #305 and #307 released this row for the same reasonbaac78b023efce53(id-only allowlist of expected failures needs cause-text match + planted negatives)infrastructure/agent-orchestration/verify-command-in-a-worker-brief.md, whose edge row "list baseline failures by test id" is this candidate's natural merge target. It also editstesting/quality/checks-that-cannot-passandtests-that-cannot-fail4067cf60d5d486f5(done-gate counting an append-only log the worker also writes)qa/process/completion-claims.md, this candidate's domain and tag (completion-claims)Routing decision
ca76a971902a3eea→backend/java/spring/jackson-3-jsonnode-coercion.md(new page) with abackend/java/index.mdspring row, and thebackend/index.mdjava line extended with "Jackson 2→3 tree-model migration". No new category.backend/javahasjpa,spring,runtimeandkotlin, and none covers JSON libraries.springis the closest fit because Spring Boot 4 brings Jackson 3 as its default, and the page notes that it applies to direct Jackson use too. A separateserializationcategory for one page did not seem justified.e9443b0f4120f8ae→ edge row ontesting/quality/assertion-scanner-false-positive-on-unittest-convention.md. The domain hinttestingwas followed, with no new category. The directive is general: any floor that classifies by file name. The dev-loop script and the run appear only in Sources lines.8a67a97c4afd204c,f332524447ff2105,baac78b023efce53,4067cf60d5d486f5(open-PR overlap, above). Also317f31de7391fb88,0e06c969dce06eeaandb84f3ab68e8acb52: this run's sandbox blocks listing~/.dev-loop/queue/, and these rows sit in session files whose names could not be found, so they were released unread for a later flush.Local-layer candidates
none