Sub-scope 09 (inbound-web) advanced/** (stream, patch, functional, virtualthread, blockingbridge, release)
revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5
generatedAt=2026-08-30T07:40:07+00:00

=== OWNED FILES ===
3392a3f54c2d2a10a9de549434c0be0a9f278558 main/java/dev/caskeleton/adapter/inbound/web/advanced/WebAdvancedFeature.java 74
2e95af55f784e770af46c03317c36cd1f8d8c362 main/java/dev/caskeleton/adapter/inbound/web/advanced/WebAdvancedFeatureFlags.java 47
9548f669da83426476f22581fb2605dee94e8c2e main/java/dev/caskeleton/adapter/inbound/web/advanced/blockingbridge/BlockingBridgeBudget.java 97
d2b88181b53116b15dd459aba349614ff22bf0ca main/java/dev/caskeleton/adapter/inbound/web/advanced/blockingbridge/BlockingBridgeProfile.java 50
ec04122db2739ba0d3e0e64be278aa68fc02c93b main/java/dev/caskeleton/adapter/inbound/web/advanced/blockingbridge/BlockingBridgeRejectedException.java 47
7c0ab0e2119a49b678a7d102653ca9f4593d9c29 main/java/dev/caskeleton/adapter/inbound/web/advanced/functional/FunctionalRoutePolicyValidator.java 53
bffdbebba06b0a1c3fa250aac8fd9255f312d9f6 main/java/dev/caskeleton/adapter/inbound/web/advanced/functional/FunctionalRouteRegistry.java 60
bbc4cf9aab29e1a881fddc3041fc6ffc2c2d365e main/java/dev/caskeleton/adapter/inbound/web/advanced/functional/RegisteredRoute.java 45
300ecb8d8a0dc46b6e676c4958d0dea4979e0f2b main/java/dev/caskeleton/adapter/inbound/web/advanced/functional/WebFunctionalHandlerAdapter.java 102
2ef9b37759780fc0f3a0976ef289c8ff22d935bb main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/JsonMergePatchApplier.java 87
3338853828d3361c1bb4cc8a5b69a5111f4c70a8 main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/JsonMergePatchDocument.java 81
fb2af9a0bbf66c1f3fdc1888900dd60916987069 main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/JsonPatchApplier.java 190
9a35af697362728eab2641f576d0843b61589584 main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/JsonPatchDocument.java 90
79d2c2904634fce9ef1bcee069aceddc2dc25c7d main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/JsonPatchOperation.java 71
9c287c991d7f8c4bca90678aecf485efb4914a0c main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/JsonPatchOperationKind.java 83
550a1410f6671a73c893e9440401da0e2a399ffc main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/JsonPatchRejectedException.java 11
071674bfade9a9b74791a91cf60b489dfb0df289 main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/JsonPatchTestFailedException.java 31
bf47c21bd27797ba1dad3b05bc7ac2f3c0571b0c main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/JsonPointerAuthorization.java 95
2136715c6082041d83795582c14072628e956a53 main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/PatchAuthorizationException.java 27
a191d89b4e06a28abd5e99a2f38b52551f96c8f9 main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/PatchFieldAuthorization.java 69
f29e48986f1d90f7a047f81627cce7ad89b59c00 main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/PatchMediaType.java 23
c6b49aec39b52bef951e5425e6d41a2b0b2c4c40 main/java/dev/caskeleton/adapter/inbound/web/advanced/patch/PatchResult.java 28
059816269c6b92e136bb703badaa950fb7e71f56 main/java/dev/caskeleton/adapter/inbound/web/advanced/release/WebAdvancedPromotionGate.java 138
ec4533d09ae68270cd048fcd423a85fe8fcca599 main/java/dev/caskeleton/adapter/inbound/web/advanced/release/WebAdvancedReleaseManifest.java 90
d75f5d547a6b4b5603aa489ffda2ed85ffb652db main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/StreamId.java 27
236d324782f9f24ec4d7e7b8a05e851826c3000b main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/StreamSequence.java 35
498a44c8edd61e077d4fa81832771f730be66d51 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/TerminationDecision.java 43
48cbcd06bd3b5ed52f5000e16c2bdd6b68899d7d main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebPartialResponseException.java 41
a025c5b592a9ee8f17b0f75a9ef94d74e66d77ef main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebStreamDrainCoordinator.java 83
58a14b2854beaded118882ac7356169011cc4888 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebStreamEnvelope.java 68
b07377144a651e359b91ce817516d805fbe9ff01 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebStreamErrorPolicy.java 58
f02a2b1f2f034d7e5ab3ec63b5fc87b346cf9f26 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebStreamEvidence.java 135
9c399d920125d1fb0403e7b0672392aad296dfc4 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebStreamPolicy.java 74
a117c8af0ada3cd32ffb575a426cfd127403bdfd main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebStreamRegistry.java 92
ba72cd045fffb780b2126cd5fbeda2caffabba05 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebStreamSession.java 34
4665b9c02e4dd262dbe2d2d71ee57ae314389f93 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebStreamTermination.java 45
5317b9e528d4008190e6a136797954a7ace16f0c main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebStreamTerminationMapper.java 53
8dafd6ace6f545c825b4c07124b6068addbd8291 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/encoding/JsonSequenceFraming.java 68
f35df39fcbf19b36d9c51af304c375e4a806f0e8 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/encoding/NdjsonFraming.java 56
a2f9ed416d7c9f1cdc083aa3b7cf7173439e9c76 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/encoding/NdjsonRecord.java 61
6ac34c5cf88e731e22a778b815544270483d5f14 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/encoding/StreamFraming.java 34
3b1fde934aa5984ebbd5e3868eef7dd5a6d1fa5f main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/encoding/StreamItemTooLargeException.java 33
19658b0fe3c5ca0ebd0d6b151a94dfe1979c0088 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/encoding/StreamMediaType.java 22
0500d94779341b957995d8c1c0aad204686ad17e main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/encoding/StreamRecordEncoder.java 66
b381609ecdc9f4ad4babb4457a7d7395696fff69 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/replay/GapAndDuplicateGuard.java 69
40abdf8bee9c10b8cd84b271b1cf5c3a40c387ff main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/replay/MessagingReplayBridge.java 137
be9694c1331cf3d2b4f593d97e461979540dd722 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/replay/ReplayCursorExpiredException.java 28
5630c921afae01a50043cd809d6525156ed15c48 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/replay/WebStreamReplaySource.java 39
0355a264743ea1b5a2f7c83ef5a0847c77edbe75 main/java/dev/caskeleton/adapter/inbound/web/advanced/stream/replay/WebStreamResumeCursor.java 28
91ecd9a945d620a14d49c54fb98be43a06759dcd main/java/dev/caskeleton/adapter/inbound/web/advanced/virtualthread/AdmissionRefusedException.java 25
b66aed53ccf9ecb5656930570192f299df15f17b main/java/dev/caskeleton/adapter/inbound/web/advanced/virtualthread/VirtualThreadAdmissionGuard.java 99
c3eccee757e8aebc56ad6ca40c2785df40622b25 main/java/dev/caskeleton/adapter/inbound/web/advanced/virtualthread/VirtualThreadProfile.java 78
44aff52f24a88943c3a6266e0624a390f71b6b05 test/java/dev/caskeleton/adapter/inbound/web/advanced/blockingbridge/BlockingBridgeBudgetTest.java 143
4e3860d99f5f1b692775f617f98caf76d97ea438 test/java/dev/caskeleton/adapter/inbound/web/advanced/functional/FunctionalRouteRegistryTest.java 178
52635b748b857ae5d4c60f904646b73e3fbb1172 test/java/dev/caskeleton/adapter/inbound/web/advanced/patch/JsonMergePatchApplierTest.java 156
0cfd3c3c7ab95831d129caedd0ad3f73ddf6a357 test/java/dev/caskeleton/adapter/inbound/web/advanced/patch/JsonPatchApplierTest.java 238
501366d4bb0d51de994e9f498066f87ffe9f3433 test/java/dev/caskeleton/adapter/inbound/web/advanced/release/WebAdvancedReleaseTest.java 183
f06e6c416e198ecec7e438f1a6f599195e9d78df test/java/dev/caskeleton/adapter/inbound/web/advanced/release/WebAdvancedRollbackIT.java 158
75d9d87f96d828a1fe82905930bcbd6ed8b7c4ee test/java/dev/caskeleton/adapter/inbound/web/advanced/release/WebStreamingSoakIT.java 208
52283a6a38fd1a5a9aa70f36b7cfdf2248b35725 test/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebStreamCoreTest.java 214
c8dda742ea923d56c9eb62d8dd0d5aa74fc4062e test/java/dev/caskeleton/adapter/inbound/web/advanced/stream/WebStreamDrainTest.java 155
78f7deeed9cd57165cd9466684eccea65b927d15 test/java/dev/caskeleton/adapter/inbound/web/advanced/stream/encoding/StreamFramingTest.java 125
78f5af1d32a64665856c87baefad897fdba77331 test/java/dev/caskeleton/adapter/inbound/web/advanced/stream/replay/GapAndDuplicateGuardTest.java 86
a502551862b0b74737d50328cc47fc167b1397c7 test/java/dev/caskeleton/adapter/inbound/web/advanced/stream/replay/MessagingReplayBridgeTest.java 195
2254a7c5d4e994af6e17724259a9885616e7a770 test/java/dev/caskeleton/adapter/inbound/web/advanced/virtualthread/VirtualThreadAdmissionTest.java 137
file_count=65

=== 8.4 선언된 능력 대 활성화 게이트 ===
$ grep -E '^  [A-Z_]+[,;]' adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/WebAdvancedFeature.java
  MVC_VIRTUAL_THREADS,
  WEBFLUX_BLOCKING_BRIDGE,
  JSON_MERGE_PATCH,
  JSON_PATCH,
  SSE,
  NDJSON,
  JSON_SEQUENCE,
  FUNCTIONAL_WEBFLUX,
  CBOR,
  XML,
  RATELIMIT_DRAFT_HEADERS;
exit=0

$ grep -cE '^  [A-Z_]+[,;]' adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/WebAdvancedFeature.java
11
exit=0

$ grep -rln '@Configuration' --include=*.java adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced
adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/mvc/MvcStreamingExecutorConfiguration.java
adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/mvc/VirtualThreadSettings.java
adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/mvc/VirtualThreadMvcConfiguration.java
exit=0

$ grep -rh 'prefix = "backend.web.advanced' --include=*.java adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced | sort -u
    prefix = "backend.web.advanced.mvc-virtual-threads",
    prefix = "backend.web.advanced.ndjson",
@ConfigurationProperties(prefix = "backend.web.advanced.mvc-virtual-threads")
exit=0

=== 8.1 플래그 값의 프로덕션 독자 ===
$ grep -rn 'WebAdvancedFeatureFlags\|WebAdvancedFeature\b' --include=*.java adapter/inbound/web/src app-bootstrap/src | grep -v 'advanced/WebAdvancedFeature' | sed 's|adapter/inbound/web/src/||' | awk -F/ '{print $1}' | sort | uniq -c
     11 main
     30 test
exit=0

=== 8.2 같은 스위치의 세 철자 ===
$ grep -n 'propertyName' -A 3 adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/WebAdvancedFeature.java | tail -5
60:  public String propertyName() {
61-    return "backend.web.advanced." + name().toLowerCase(Locale.ROOT).replace('_', '-') + ".enabled";
62-  }
63-
exit=0

$ grep -n 'propertyName' -A 3 adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/virtualthread/VirtualThreadProfile.java
75:  public static String propertyName() {
76-    return "backend.web.advanced.virtual-threads.enabled";
77-  }
78-}
exit=0

$ grep -n 'prefix =' adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/mvc/VirtualThreadMvcConfiguration.java adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/mvc/MvcStreamingExecutorConfiguration.java
adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/mvc/VirtualThreadMvcConfiguration.java:33:    prefix = "backend.web.advanced.mvc-virtual-threads",
adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/mvc/MvcStreamingExecutorConfiguration.java:37:    prefix = "backend.web.advanced.ndjson",
exit=0

=== 8.3 ndjson 스위치가 켜는 것 ===
$ sed -n '14,16p;36,40p' adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web/advanced/mvc/MvcStreamingExecutorConfiguration.java
/**
 * Wires servlet-side record streaming: NDJSON and RFC 7464 JSON text sequences.
 *
@ConditionalOnProperty(
    prefix = "backend.web.advanced.ndjson",
    name = "enabled",
    havingValue = "true")
public class MvcStreamingExecutorConfiguration {
exit=0

