The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.
Follows the import procedure in README.md.
source/ the originating repository verbatim — 78 documents, 28 SVGs,
8 manifests, plus .source-revision recording the commit
final/ the SSOT
document.md 729 lines written from the 29 experiment documents, not
concatenated: what was predicted, what was measured, and
where the measurement itself was wrong
evidence/raw 125 outputs, flattened to <experiment>__<file> because
the originals collided (01-baseline.txt appeared three
times) and the audit only globs the top level
evidence/meta one per raw file; command and exitCode are null and the
README says why rather than inventing them
evidence/browser 22 captures
assets/ three diagrams through techviz
.techviz/ their VizSpecs
A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.
Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.
verify-pipeline.py passes. audit-records.py reports no issues.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
15 lines
2.6 KiB
JSON
15 lines
2.6 KiB
JSON
{
|
|
"assetKey": "a10-f004-pub-sub",
|
|
"kind": "terminal",
|
|
"command": "set -e\nK=src/adapter/outbound/cache-redis/src/main/java/dev/caskeleton/adapter/outbound/cache/redis/sdk/api/key\nO=src/adapter/outbound/cache-redis/src/main/java/dev/caskeleton/adapter/outbound/cache/redis/sdk/api/operations\nC=src/adapter/outbound/cache-redis/src/main/java/dev/caskeleton/adapter/outbound/cache/redis/sdk/config\necho \"# 세 타입이 조립 결과에 대해 하는 일\"\nsed -n \"23,26p;34,37p\" $O/PubSubChannel.java\nsed -n \"22,25p;33,36p\" $O/ShardedPubSubChannel.java\nsed -n \"22,32p;38,41p\" $O/PubSubPattern.java\necho\necho \"# requireRenderedSize 가 나오는 곳 전부 (첫 줄은 선언)\"\ngrep -rn \"requireRenderedSize\" src --include=*.java --include=*.groovy | sed \"s|.*/sdk/| sdk/|\"\necho\necho \"# 조각이 받는 규칙과 상한 상수\"\ngrep -n \"MAX_KEY_BYTES\\|Pattern TOKEN\\|Pattern IDENTIFIER\" $K/RedisKeyRules.java | sed \"s/^/ /\"\ngrep -n \"requireToken\\|requireIdentifier\" $K/RedisNamespace.java $K/RedisKeyName.java $K/RedisSlotTag.java | sed \"s|.*/sdk/api/key/| |\"\necho\necho \"# 키를 렌더하는 곳: 조각 사이에 슬롯 태그가 하나 더 들어간다\"\nsed -n \"39,46p\" $K/RedisKeyRenderer.java\necho\necho \"# 그 검사가 보는 상한은 생성자로 주입받는다\"\nsed -n \"22,30p\" $K/RedisKeyRenderer.java\necho\necho \"# 주입하는 곳\"\nprintf \" src/main 에서 new RedisKeyRenderer( : %s 건\\n\" \"$(grep -rn 'new RedisKeyRenderer(' src --include=*.java | grep '/src/main/' | wc -l)\"\nprintf \" src/test 에서 new RedisKeyRenderer( : %s 건\\n\" \"$(grep -rn 'new RedisKeyRenderer(' src --include=*.java | grep '/src/test/' | wc -l)\"\necho \" getMaxKeyBytes / getLimits 를 부르는 src/main 코드\"\ngrep -rn \"getMaxKeyBytes()\\|getLimits()\" src --include=*.java | grep \"/src/main/\" | sed \"s|.*/sdk/| sdk/|\"\necho \" 설정 자체는 등록되어 있다\"\ngrep -n \"APP_REDIS_LIMITS_MAX_KEY_BYTES\" docs/registries/env-keys.yaml | sed \"s/^/ /\"\nsed -n \"241p;254,256p\" $C/RedisSdkSettings.java | sed \"s/^/ /\"\necho\necho \"# 기본 이름공간\"\nsed -n \"153,155p\" $C/RedisSdkSettings.java",
|
|
"cwd": "/shared/codebase/clean-architecture-backend-template",
|
|
"exitCode": 0,
|
|
"executedAt": "2026-09-02T11:21:34+00:00",
|
|
"sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916",
|
|
"raw": "evidence/raw/a10-f004-pub-sub.txt",
|
|
"svg": "evidence/rendered/a10-f004-pub-sub.svg",
|
|
"rawSha256": "2065e7b4fc9e1444b40416736114107f0bdbe625010d303acd70f1fb6e6d3e74",
|
|
"lines": 89,
|
|
"redaction": "none — 코드베이스 정적 검색"
|
|
}
|