Commit Graph
100 Commits
Author SHA1 Message Date
ypshimandClaude Haiku 5.5 16ab317094 feat(ground): 지반·지층 card inputs, layer rows, water level, section drawing
- types/ground.ts: 위치 (육상·하상·해상), 지하수위 고려 and EL, 지층 행
  (name and 하단 EL, from the top down). Checks G01 (layer order), G02 (water
  level range), G03 (layer name).
- The 지반고 still feeds the soil cover check; the layer rows and water level
  are inputs and do not change the 3D model.
- view/ground-svg.ts: the 삽도 drawn from the inputs and the generated
  footings and piles on one EL scale.
- 일괄 적용 copies 위치 and 지하수위 to the checked piers (속성 복사 item,
  off by default). Changes list shows arrays and booleans as text.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-26 10:11:42 +09:00
ypshimandClaude Haiku 5.5 0e70cfb969 refactor(ground): remove the unversioned-file fallback
- A file without a schema number is refused again; the example output in
  RAG/pierzainer_ground now has schema 2, so the temporary path is not needed.
- The legacy fixture is removed; tests cover the missing and null schema
  numbers and a pier without a ground object.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 18:09:50 +09:00
ypshimandClaude Haiku 5.5 bfd41d7c8d feat(ground): draw the terrain grid around the piers in the 3D view
- ground-model.ts: read schema 2 terrain_grid (origin, step, nx, ny, z),
  checked the same way as the stored project form; schema 1 is still read.
- view/terrain.ts: the grid as a mesh in pier-scene coordinates
  (x = E − pivot E, z = −(N − pivot N), y = EL), same as the pier frame.
  Cells with a missing corner are not drawn.
- scene.ts: draws the terrain in place of the 60 m plane when the model has a
  grid; the camera fits the members, not the terrain.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 17:57:30 +09:00
ypshimandClaude Haiku 5.5 be76425c8f feat(ground): accept ground_model.json written before the schema number
- A file with no `schema` key is read as schema 1, but every pier must have a
  `ground` object, so a renamed field is refused instead of loading as empty.
- `schema` null or any other number is still refused.
- The project file keeps the normalised model and checks it with its own
  check (checkStoredGroundModel), so a saved model reopens.
- Temporary: remove the no-schema branch once examples/out is regenerated.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 17:41:24 +09:00
ypshimandClaude Haiku 5.5 c3606011b5 feat(ground): load ground_model.json and apply the pier-centre ground EL
- ground-model.ts: read and check schema 1 of the Python ground model.
- ② 지반·지층 card: import the json, show the DTM value beside the excel
  value, and apply it only when the user presses the button (tracked as an
  override, revertible).
- groundEl becomes an editable, tracked input; the project file keeps the
  imported model and checks it on open.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 16:48:27 +09:00
ypshim 304b350481 Revert "fix(rebar): warn when the pile spacing along a 열 is above the 2250 mm maximum"
This reverts commit d61e5d082f.
2026-10-23 16:20:44 +09:00
ypshimandClaude Haiku 5.5 d61e5d082f fix(rebar): warn when the pile spacing along a 열 is above the 2250 mm maximum
The card only checked the minimum spacing. A 12000 mm footing with 5 piles per 열 gives 2650 mm, above the maximum. The card
now marks such a row ("최대 2250 mm를 넘습니다. 본수를 늘리세요") and the alert list gets a warning (P02). Tests check 5 and 6
piles on a 12000 mm footing.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 16:20:37 +09:00
ypshimandClaude Haiku 5.5 65f8ca2279 test(rebar): the footing rebar follows the footing inputs (L, W, H); P1 unchanged
The B-bar counts are computed from the footing dimensions already, so no formula change was needed. Tests check the P1
values, that a wider and longer footing adds B1–B8 bars, and that a 2200 mm height builds rebar and 3D.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 16:16:47 +09:00
ypshimandClaude Haiku 5.5 174a026cc1 feat(view): dimension lines on the plan — overall length and width, and the pile chains (끝단 거리 700, 간격 2250)
The plan has overall dimension lines (length along the top, width at the right) and two chains: along the length, the
distances from the footing edge to the first pile and between piles; across the width, the same for the pile rows. The
chains are read from the pile positions, so they follow the layout.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 16:15:39 +09:00
ypshimandClaude Haiku 5.5 6050435af1 feat(view): dimension lines on the 정면 — footing length above, h1 at the right, the visible pile length at the left
The side view has dimension lines with 45° ticks: the footing length (mm) above the footing, the footing height h1 at its right,
and the visible pile length (끊음) at its left. The margins are wider (1.5 m) for the labels; the plan uses the same margin so the
two views stay aligned. The old h1 label is replaced by the dimension label.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 16:14:08 +09:00
ypshimandClaude Haiku 5.5 f76bfc9d5a fix(view): footing labels read at about 11 px (0.5 m in the 22 px/m drawing)
The dimension labels were 0.28 m, about 6 px on screen. They are 0.5 m now, so the mm values can be read.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 16:12:12 +09:00
ypshimandClaude Haiku 5.5 c0a4ce57ad fix(view): the 끊음 marks are short "//" breaks, and the pile label sits clear below them
The break lines ran across the members at a slant. They are now two short slanted strokes on the column stub and across the
pile group, and the pile label is moved below the break.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 16:11:21 +09:00
ypshimandClaude Haiku 5.5 a2e4648f7b feat(view): side view (정면) to the right of the footing plan on one scale; 본수 card, plan and side in one row
Plan and side use the same scale (22 px per m) and share their horizontal extent, so the footing lines up. The side view breaks
the column (3 m above the footing) and the piles (4 m below it) so its height stays near the plan's. The row is three columns
from 1100 px, the side view drops to its own row between 800 and 1100 px, and it stacks below 800 px.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 16:10:14 +09:00
ypshimandClaude Haiku 5.5 4477bbe52c feat(view): the 열별 본수 card sits beside the footing plan on ② (grid, stacks on narrow screens)
The pile-count card (−/+ and the 20본 total) is on the left and the plan on the right, in one row; the side view is below.
Changing a count is now seen on the plan next to it. The layout stacks below 800 px.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 16:07:52 +09:00
ypshimandClaude Haiku 5.5 675f8124ca feat(view): 확대기초·말뚝 plan and side drawings on ② (2단계), drawn from the model
The footing card shows a plan (footing rectangle, pile circles, column, pier axis, mm labels) and an elevation (footing,
piles to their tips, column, h1 and pile length). The drawings are SVG strings built from the model, so they follow the
inputs. θ is noted as not yet applied. Tests check the pile count, the mm labels and the width input.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 16:02:37 +09:00
ypshimandClaude Haiku 5.5 df19cc47e9 feat(view): 확대기초·말뚝 inputs on ② (입력만): footing L, W, h1, blinding margin and thickness, steel and PHC pile lists
The footing card takes L, W, h1 (default 2000), the blinding margin on each side (100) and thickness (100). The pile is picked
from the 강관 or PHC list by outer diameter and wall; the inner diameter, area and weight are read from the list. Defaults are
the 1단계 constants, so P1 is unchanged. The model reads them (footing width, height, blinding, pile diameter; the footing
length for grouping). 복합 말뚝 and the rule-pending items stay disabled; the footing rebar is not yet tied to these
inputs (1·2단계 후).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 16:01:02 +09:00
ypshimandClaude Haiku 5.5 e580677887 fix(view): round the lengths shown in the 재료표 and in the Excel rows to 0.1 mm
Single-piece lengths such as the B9 and C7 pieces showed long unrounded decimals (2128.1174619702915). They are rounded to
0.1 mm for display and in the Excel rows; the totals are unchanged.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 15:54:17 +09:00
ypshimandClaude Haiku 5.5 65c53f2b5d feat(view,rebar): column diameter D as a free input on ② (1200–3000 mm, 50 mm steps), with three checks
D is an input on the column card (default 2000 mm). The 3D column, the piles of a cast-in pier and the column rebar follow it;
n_div stays 46. Three checks run on each regenerate and appear in 알림: D below the Level width (2100), D + 2c within the
coping width, and the 주철근 arc spacing ≥ max(1.5·d_b, 40). Spec §5.2 records the rule (approved 2026-10-23).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 15:50:52 +09:00
ypshimandClaude Haiku 5.5 a6b92ae341 fix(view): pick the solplate table's header by its row (L, W, T, T1, T2), not by the first "S(%)" label
The drawing has two "S(%)" labels; the first one in the file belonged to another table, so the solplate header was missing.
The header is now the S(%) label with the most solplate column names on its row. The full 운곡교 교각도(2) DXF reads all ten
solplate rows; a test adds a stray label.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:58:12 +09:00
ypshimandClaude Haiku 5.5 22fd1dc5f4 feat(view): solplate taper across the 교각축 직각 (thick T1 at the (−) side); 교량받침 본체 as a box
The solplate's L (A + margin) runs across the 교각축 직각 and its W (B + margin) along the 교축; the top tapers across L with
T1 at the (−) side (T1 = T + L·|S|/200). The 교량받침 본체 is one box per bearing: the solplate plan less 100 mm on each
side, from the mortar top (EL.X) up h3 = 181 mm, turned with the bearing row. It is shown with the bearing group.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:56:26 +09:00
ypshimandClaude Haiku 5.5 a108a76707 fix(view): the reference fill also sets A, B and S, so the solplate appears; warn for bearings without solplate values
"도면값 채우기" set only EL.X, h1 and h2, so no solplate was drawn. It now also sets A, B and the solplate slope S from the
reference values. The bearing card warns how many bearings lack A, B or S.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:49:50 +09:00
ypshimandClaude Haiku 5.5 a50f4f5ee5 feat(view): solplate in the 3D model (2단계): wedges from the drawing's A, B, S; read the solplate table from DXF
Each bearing gets a solplate wedge: tapered along the 교축 with T1 on the 시점 side, underside at the bearing top (block
top + h3). A, B come from the drawing's ELEVATION table, S and T1/T2 from the SOLPLATE table (NO, S(%), L, W, T, T1, T2),
read by position. The 공통 규칙 (T 30, margin 100, h3 181) feed the plan; changing them regenerates the piers. A new
"솔플레이트" part can be shown or hidden. A solplate table is read only when its S values are found; a missing S is reported.
Also commits the option-1 test change (drawing EL.X minus Excel z).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:46:53 +09:00
ypshimandClaude Haiku 5.5 1d8746d533 feat(rebar): solplate geometry (pure) — tapered along the 교축, thick end T1 on the 시점 side
Per bearing: L = A + margin along the 교축 (s), W = B + margin across it; the underside is the bearing top (block top
EL.X + h3); the top tapers from T1 = T + L·|S|/200 at the 시점 side (−s) to T2 = T − L·|S|/200 at the 종점 side, so
T1 + T2 = 2T and the volume is L·W·T. Corners follow the bearing row (rowSkew). Tests cover L, W, T1, T2, the underside,
the volume and the centring. The model and the 3D do not use it yet.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:42:31 +09:00
ypshimandClaude Haiku 5.5 55abc4be13 fix(view): find the table's header and No column by their place on the table row, not by the first label in the file
The drawing has other "EL.X" and "NO" labels. The header is now the EL.X label with the most table column names to its right
on the same row; the No header is the NO label on that row. The full 운곡교 교각도(2) DXF reads all ten bearings (EL.X, h1, h2)
without errors. Tests add the distractor labels.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:36:50 +09:00
ypshimandClaude Haiku 5.5 4048c326e3 feat(view): read the bearing ELEVATION TABLE from a DXF drawing (교각도(2) P1) by position
The reader takes TEXT and MTEXT entities (x, y, text). The EL.X header row names the columns; the No column holds the
bearing numbers; each value is the nearest entry under its header on the same row. On the 운곡교 교각도(2) drawing all ten
bearings read back the reference values (EL.X, h1, h2). The 도면 불러오기 button accepts .dxf as well as sheets. The test
fixture holds only the table's text entries.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:34:33 +09:00
ypshimandClaude Haiku 5.5 6f32bd96c4 feat(view): 도면 불러오기 — read the bearing drawing values from an xlsx or csv sheet on ②
The sheet needs the header names No, EL.X, h1 and h2 (case, spaces, dots and units in parentheses are ignored). Rows are
checked: No must be a unique positive integer, EL.X must be in metres (30–100), h1 and h2 must be positive mm up to 1000.
Any error stops the import with the first messages; a valid sheet fills this pier's drawing values and regenerates the
pier. The parser is pure and tested.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:28:06 +09:00
ypshimandClaude Haiku 5.5 e4e141c801 feat(rebar,view): 받침 기준 — project-wide choice between Excel z (default) and drawing EL.X, with per-bearing drawing input on ②
The project has one basis: 엑셀 z (default) or 도면 EL.X. On ②, the bearing card lists EL.X, h1 and h2 for each bearing
(per pier), with a button to fill the reference values. With the drawing basis the model takes the drawing EL.X as the
bearing height; the coping tops stay within the 5 mm tolerance, the front block is 164 mm and the back 139 mm (excluding the
pad). The check compares EL.X − h1 − h2 with the Excel-basis coping top. The basis and the drawing values are saved in the
project file (optional fields). Changes regenerate every pier at once.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:25:44 +09:00
ypshimandClaude Haiku 5.5 802a1eab97 fix(view): EL.X = block top including the 50 mm mortar; coping top = EL.X − h1 − h2 (matches the model)
With this definition the drawing's coping top matches the model's coping top to within 1 mm on all ten bearings. The earlier
0.211 m offset came from reading EL.X as the solplate top, which was wrong. The reference table now uses EL.X − h1 − h2,
and the check tests the match.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:17:12 +09:00
ypshimandClaude Haiku 5.5 553c696638 feat(view): bearing 공통 규칙 inputs (mortar h2, bearing h3, solplate T, margin) and recalculated E, L, W, T1, T2
On the bearing card, four inputs drive E = h1 + h2 + h3 + h4, L = A + margin, W = B + margin and T1/T2 = T ± L·|S|/2. The
defaults are the drawing values, so every row gives back the drawing values; changed rows are marked. The values are screen
state for now and do not change the model or the project file (Q16 stays open).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:12:36 +09:00
ypshimandClaude Haiku 5.5 64795e0a19 fix(view): solplate reference shows centre T = 30 with the (−) and (+) side thicknesses (taper along the axis)
The solplate tapers along the bridge axis. T is the centre thickness (30), T1 the thickness on the 교각축 직각 (−) side
(38) and T2 on the (+) side (22); T1 + T2 = 2T. The table's T column had shown the (−) side value, so T is now 30 on every
row. A test checks T1 + T2 = 2T.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:10:23 +09:00
ypshimandClaude Haiku 5.5 ee6848c418 feat(view): bearing reference tables on ② (drawing values, read-only, not used in the model)
The P1 상세도 ELEVATION TABLE and 솔플레이트 TABLE are shown on the bearing card. The model does not use them (Q16). The
ELEVATION table compares the drawing's coping top (EL.X − E) with the model's coping top; the difference is a constant
0.211 m on all ten bearings. The solplate table checks T1 and T2 against T ± L·|S|/2 with the 공통 규칙 T = 30 mm; all
rows match. Tests check E = h1+h2+h3+h4, L and W, the T1/T2 rule, and the constant offset.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 14:02:27 +09:00
ypshimandClaude Haiku 5.5 4d5e3cc04e feat(rebar): P3 and P6 end at the coping middle level; e_top computed from it
The coping middle level is (Level underside + step top)/2. P3's top and P6's upper limit are this level, and e_top is the
step top minus it (P1: 1322, replacing the 1623 reverse-engineered value). On P1 P3 goes from 38 to 39 ties and P6 stays at
8 levels. With taper h2 = 3000 the middle level is 13275: P3 37 ties, P6 8 levels (32 bars), e_top 2072.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 13:30:28 +09:00
ypshimandClaude Haiku 5.5 f989315e02 feat(rebar): P1 top = C3 − 100 with e_P1 computed; coupler rule keeps 2.5 m below the P1 top
e_P1 is no longer an input: P1 top = C3 (lowest coping top − 127 − 2·57.2 = 43.170) − 100 = 43.070, so e_P1 = step top −
43.070 = 485 mm. The P1 top moves from 15147 to 14862 mm; the top piece shortens by 285 mm. Couplers are placed at k·3000
with at least 2500 mm below the P1 top (a value to confirm). On P1 the coupler count stays at four (3, 6, 9, 12 m). P2 and
the tie top do not change.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 13:19:09 +09:00
ypshimandClaude Haiku 5.5 f37a0bf9ce fix(rebar): column heights Hc and h_cop from the model (Level underside, step top) instead of P1 constants
Hc = Level underside − footing top, and h_cop = step top at the column centre − Level underside. P1 gives 12703 and 2644,
unchanged. With taper h2 = 3000 the Level underside moves down, so Hc = 11203 and the P2 top (Level underside + l_d)
moves to 13039, while the P1 top stays at the step top (15147). The 3D and the 철근표 use the same heights.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 13:10:51 +09:00
ypshimandClaude Haiku 5.5 df6aeb5c46 fix(rebar): side rows on the 250 grid up to the 400 mm top margin, not a fixed count of seven
C12 and C13 come from one grid from the Level underside + 127 at 250 mm, up to top − 400 mm (상면 여유). The fixed count of
seven rows is kept only for callers that give no top. P1 is unchanged (C12 5, C13 2); a taper of 3000 mm now gives C12 11
and C13 2, and the C13 first row is always the last C12 row plus 250.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 12:31:58 +09:00
ypshimandClaude Haiku 5.5 7ff2f7b53f docs(rebar): note on the C12 row that the drawing's bottom 6th row is C7·C8 (no added bars)
The 250 grid runs from the Level underside + 127 for C12 and C13 together. The drawing's sixth C12 row at the bottom is the
bottom bar C7·C8 (코핑철근.md §6.1), so no bars are added and the counts stay the same.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 12:16:48 +09:00
ypshimandClaude Haiku 5.5 355bf4ea75 feat(rebar): C12 in the taper band (h2) and C13 in the end band (h1), from the coping geometry
The split between C12 and C13 follows the end underside, not a fixed level: C12 rows lie between the Level underside and
the end underside (taper height h2), C13 rows between the end underside and the top (end height h1). The break is the end
underside + 127 mm, the taper line's start at the end face. P1 is unchanged (C12 41.288–42.288, C13 42.538–42.788). Tests
check the band rule for h1 and h2 changes.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 12:03:24 +09:00
ypshimandClaude Haiku 5.5 ecaa45306c docs(rebar): record that the side-row levels follow 코핑철근.md §6.1 (z_0 = Level underside + 127)
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 11:52:49 +09:00
ypshimandClaude Haiku 5.5 0a5edfb152 feat(rebar,view): coping end height h1, taper h2 and Level width as inputs on ② (1단계)
The three values are inputs on the coping card, with the P1 values (1000 · 1500 · 2100) when absent, and they are tracked
like the other shape inputs. The geometry and the coping rebar read them from one CopingGeom: the U heights follow the
closed form (h1 − 2c) + h2·min(x_s, x_L0)/x_L0, which reproduces the P1 values. The side rows are assumed to keep their
position relative to the Level underside (명세 확인 필요). P1 results are unchanged; the full suite passes.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 11:44:44 +09:00
ypshimandClaude Haiku 5.5 5b5db60657 feat(view): ② coping card shows d_IP2 and the 계단 구간 표 (read-only, from the model)
The coping card lists d_IP2 and a table of the step segments: range, front and back coping tops, the lateral step, and
the block heights including the 50 mm pad (150 / 200 as in the 삽도). The table is read from the model; nothing new is
computed or entered. Tests check the P1 values against the 삽도.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 11:40:09 +09:00
ypshimandClaude Haiku 5.5 b5eb0d68c0 feat(view): move all 3D info panels to the right stack (부재 표시, 시점, 색 기준, 원점)
The four panels are in one stack on the right of the 3D view, 180 px wide, with the ⓘ origin note opening to its left.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 11:33:45 +09:00
ypshimandClaude Haiku 5.5 0889ebfc34 feat(view): move all 3D info panels to the left stack (부재 표시, 시점, 색 기준, 원점)
The right stack is gone. 색 기준 and the ⓘ origin note now sit under 시점 in the left stack, so every 3D info panel is on the
left. The stack is 180 px wide; the origin note opens to the right of its button.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 11:33:06 +09:00
ypshimandClaude Haiku 5.5 86a4b2fd80 feat(view): drop the 3D title band; pier name in 교각 목록; view menu under 부재 표시, origin under 색 기준
On wide screens the pier name moves to the 교각 목록 (name · type), the band is gone and the 3D view takes the full height.
A left stack holds 부재 표시 and then 시점; a right stack holds 색 기준 and then the ⓘ origin note. The active pier is scrolled
into view when it changes. Below 600 px the title is kept above the model and the stacks sit below it.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 11:31:46 +09:00
ypshimandClaude Haiku 5.5 e66c259d1e feat(view): collapsible 시점 menu, origin toggle, and remembered panel states on the 3D band
The title stays. The view buttons become a menu that shows the current view and closes on a choice, Esc or an outside
click. The origin note is an ⓘ toggle. 부재 표시 and 색 기준 are collapsed by default and show their state in the summary
(e.g. 부재 표시 7/7 ▾, 색 기준: 역할 ▾); their open state is remembered per viewer, with guarded storage access.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 11:24:43 +09:00
ypshimandClaude Haiku 5.5 678215267c feat(view): on narrow windows only, the 시점 buttons move to the right of the 3D title band
Between 601 and 1100 px the title stays on the left and the view buttons and origin note sit on the right. Wider windows
keep the current order; below 600 px the band wraps as before.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 11:19:32 +09:00
ypshimandClaude Haiku 5.5 2902404061 feat(view): 3D area with a thin title band and collapsible info panels left and right
The title, view buttons and origin sit in one 44 px band on the model. 부재 표시 is a collapsible panel on the left and
색 기준 (③ only) a collapsible panel on the right, both over the canvas, about 170 px wide, with 44 px touch targets.
Below 600 px the band wraps and the panels fall below the model.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 11:14:34 +09:00
ypshimandClaude Haiku 5.5 65e751e4bb feat(view): fixed frame with its own scroll for the side panels, the table and the model
On wide screens the page is one fixed-height frame: the left list, the centre (model band on top, table below) and the
right results each scroll on their own. The model band is 280–560 px (48vh) and the 3D view follows its container
through a ResizeObserver. The table header stays on top. Below 1100 px the panels stack with a 60vh height limit.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 11:08:20 +09:00
ypshimandClaude Haiku 5.5 61260413c6 feat(view): turn the bearing blocks, pads and block rebar to the bearing row (삽도)
Each block takes the skew of its bearing row against the perpendicular of its stretch axis (rowSkewDeg, from the bearing
azimuth). The blocks and pads are turned to that skew, and the S1/S2 bars are drawn in the block frame and turned with
it, so their lengths and embedments do not change. ② shows the row skew (P1: front −4.42°, back −3.11°). Approved
2026-10-23 with the drawing as reference.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 11:01:19 +09:00
ypshimandClaude Haiku 5.5 e8541b29cb feat(view): one top row for the status and backup, transient results as toasts
The status line and the backup banner share one row (the banner appears only when a backup exists). Results and notices
show as toasts that close after 4 s; problems stay until closed. The status line keeps only the empty-state hint.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 10:51:12 +09:00
ypshimandClaude Haiku 5.5 e999b11a21 feat(rebar): piece lengths for C9–C13 and P1·P2 so the 재료표 has no missing bars
A row can now carry pieces (length, count). C9, C10, C11 and C9·C11 사이 have U and 삿갓 pieces per position (3 loops each);
C12 and C13 have 일자 and ㄷ pieces per bar; P1 and P2 have their splice pieces, each counting all the bars. The
재료표 totals from the pieces, so no bar is left out. 개수 stays the 철근표 count; the piece count is kept beside it. The
삿갓 length h − 100 is an assumption (Q-K5) and is noted on the ④ screen.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 10:27:17 +09:00
ypshimandClaude Haiku 5.5 99c71b7277 feat(view): ④ 재료표 as its own result stage, with pier selection, Excel per pier and print
The 철근재료표 moves from ③ to a new stage ④ in the header. It shows the checked piers (or the current one), one table
per pier with 강종 → 직경 → 번호 and subtotals, and a total across piers. The Excel export has one sheet per pier and a
합계 sheet. Print uses A4 landscape without the header and buttons. ③ keeps a summary line and a link to ④.
Spec §5, §6.9 and §7 record the stage (approved 2026-10-23).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 10:22:11 +09:00
ypshimandClaude Haiku 5.5 b6bf087334 feat(rebar): 철근재료표 by 강종 → 직경 → 번호 with unit weights, 할증 and Excel export
The quantity table sits below the 철근표 for the whole pier. Lines group by grade and nominal diameter, with
subtotals, unit weight 0.00617·d² (kg/m), the total in kg and ton, and a 할증 total. 할증 is an input in 공통 설정,
default 0 as an assumption. Couplers are counted, not weighed. Bars with no length yet (C9, C10, C11, C12, P1, P2) are
listed as missing and kept out of the totals. The table exports to Excel with SheetJS.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 10:16:56 +09:00
ypshimandClaude Haiku 5.5 30e5e75c22 feat(view): round bar bends at the centre-line radius; bend factors as inputs on ③
Bars drawn through several points are one tube each, with every bend rounded by R·tan(φ/2) at the centre-line radius
(inner factor × d + d/2). The inside-radius factors (D16 and below, D19–D25, D29–D35, D38 and above) are inputs in 공통
설정, with KDS-based defaults 2 / 3 / 4 / 5. The size-class limits sit in one place (SIZE_CLASS), which also fixes
D25 (25.4) being read as the D29–D35 class in hookLength. The helper bendDeduction gives the centre-line deduction for
the length option, which is not yet applied to the 철근표 lengths.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 10:13:16 +09:00
ypshimandClaude Haiku 5.5 03bb1f9929 fix(rebar): stack the three C9·C10·C11 폐합 to the right so they do not overlap
The three 폐합 of one position were drawn at the same x, so their U bars overlapped. Loop i now sits at x + i·2d and its
삿갓 one bar (d) beside its U, so no U meets another loop's U or 삿갓. The 철근표 counts and lengths are unchanged.
The rule is geometry only; the spec (§4.3) needs the stacking note.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 10:04:36 +09:00
ypshimandClaude Haiku 5.5 f398b4341f feat(rebar): select several bars on ③ and show only the selected ones (선택만 보기)
The 철근표 has a selection checkbox per row. Select-all / clear and 선택만 보기 sit above the table. In 선택만 보기 the other
bars are hidden in 3D and the members stay at 50% for context. A 3D click or an alert [보기] selects one bar; the
selection clears when the member tab or the pier changes. The selection is screen state and is not saved to the project.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 09:57:04 +09:00
ypshimandClaude Haiku 5.5 b3533b69df feat(rebar): rebar strength per 규격 prefix as inputs on ③ (D SD300, H SD400, S SD500)
fyH and fyS become a grade per prefix (D · H · S), chosen from SD300 · SD400 · SD500. The defaults are the P1 values, so
the P1 results do not change. Each bar takes its grade from its 규격 (fyOf). The 철근표 has a 강도 column. Older files
that stored fyH / fyS are read into the grade map. Only fck is still an assumed value (I02). Approved 2026-10-23.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 09:51:36 +09:00
ypshimandClaude Haiku 5.5 398fa997e2 feat(view): ③ rebar view at 50% for members, ground and blinding; deeper rebar colour
On ③ the members, the ground and the blinding concrete are drawn at half opacity without depth writes, so the bars show
through. Outside ③ each part returns to its own opacity. Rebar colours are shaded to 0.8 and slightly glossier so they
read through the members. Approved 2026-10-23.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 09:24:53 +09:00
ypshimandClaude Haiku 5.5 e0e220f35c fix(view): put the ③ colour control in the 3D title row, centred
The colour basis control sits in the 교각 3D 뷰 title row between the 시점 buttons and the origin note.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 09:15:48 +09:00
ypshimandClaude Haiku 5.5 4140699007 fix(view): move the ③ colour control into the 3D viewer window
The colour basis control and legend sit below the 3D canvas and show only on ③, so they belong to the model window.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 09:12:31 +09:00
ypshimandClaude Haiku 5.5 d35e27e7de feat(view): colour the ③ 3D rebar by diameter or by member, with a legend
Role colours stay the default (spec §6.7). A control on ③ switches to diameter (nominal size, H and S of one size
share a colour, Okabe–Ito palette) or member (받침블럭 · 코핑 · 기둥 · 확대기초). The legend lists only the items
the model has. Highlighting and the state colours are unchanged. Approved 2026-10-23.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 09:10:20 +09:00
ypshimandClaude Haiku 5.5 5d5ad7e997 fix(view): show the per-member fck as a rebar-only change, not an orange pending change
The fck row on ② no longer uses the orange changed style, since fck does not change the shape and is not counted in 변경 n건.
The row says 배근에만 반영 instead.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 09:04:07 +09:00
ypshimandClaude Haiku 5.5 7cf5835689 feat(rebar): per-member fck on ② for column, coping and footing
Each member can take its own fck on its ② card. A member without one uses the ③ 공통 fck, and fy stays common.
The rebar table and the 3D model both read the resolved value. The I02 note stays until every fck member has its
own value. The project file stores the values as optional fckByMember and refuses a bad value on open.
Changing the fck is not a shape change, so it is not counted in the pending changes.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 08:53:39 +09:00
ypshimandClaude Haiku 5.5 d8fd6adcf0 fix(rebar): pass the ③ material to C15/C16, coping bottom and column bars
The stair bars in the 철근표 and the 3D model, and the 3D bottom and column bars, were built with the default fck,
so a changed fck did not reach them. buildRebar3D now takes the material, and a material change rebuilds the scene.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 08:52:13 +09:00
ypshim b35f5ff0ed feat(rebar): add 3D coupler modeling for P1/P2 (368) and P4/P5 (35) with separate summary table rows 2026-10-22 18:00:28 +09:00
ypshim 9900aa6d8e feat(rebar): apply 4-bar symmetric vertical stacking offset (±1.5 db, ±0.5 db) to P6 crossties to resolve centre intersection interference 2026-10-22 17:50:57 +09:00
ypshim a2317caf6c feat(rebar): add downward 90° hooks (135 mm) to P6 crossties in 3D rebar model 2026-10-22 17:45:22 +09:00
ypshimandClaude Haiku 5.5 4aa8dbb3cb fix(view): ② and ③ use the ① layout — model above the table in the centre column
The model sits at the top of the centre column and the table or member card
below it, between the pier list on the left and the results on the right, as in
the ① screen and the 시안.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:33:36 +09:00
ypshimandClaude Haiku 5.5 a692f1f507 feat(view): 철근표 and the 3D rebar model point at each other (③)
- The 3D model of ③ draws each bar family from the rebar modules (coping top and
  bottom bars, shear loops, side bars, column bars and ties, footing B1–B8, bearing
  S1/S2) and names every bar as its 철근표 number.
- A table row click highlights the bar in 3D (the others dim); a click on a 3D bar
  selects its row in the table and sets the member tab. Drags still rotate.
- The rebar is shown only on ③. Not drawn yet: C14, C15/C16, B9–B12, the couplers,
  and the bars of a bent coping.
- Tests: family names and counts (P1 46), highlight behaviour.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:31:26 +09:00
ypshimandClaude Haiku 5.5 8c96ab76f5 feat(view): show the 3D model on the 형상계획 and 철근배근 screens
The 3D viewer (views, canvas, part toggles) moves into a slot at the top of ②
and ③ while those screens are shown, and back to ① otherwise. Moving the
element keeps the WebGL context; the viewer is measured after its screen is
visible.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:28:02 +09:00
ypshimandClaude Haiku 5.5 e7f57f0a8a feat(view): 교각 목록 and bulk line in the ③ left column (시안 ③)
The ③ screen had no pier list. The left column now has the 교각 목록 with
checkboxes and a 배근 status (계산됨 / 오류), the 선택 n기 line with 속성 복사…,
then 부재 · 배근 타입. The checks are shared with ① and ②.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:25:32 +09:00
ypshimandClaude Haiku 5.5 1074fdf428 feat(view): shear-segment table for 2·3주형 on the ③ coping tab
The segment table lists each column's Level and the segments between columns
(추천안, Q-K2), so a 2주형 shows 좌 경사 3, Level 1 9, Level 2 9, 기둥 사이 1 18,
우 경사 3. One column is unchanged.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:22:04 +09:00
ypshimandClaude Haiku 5.5 13318e9393 feat(core): rebar for 2·3주형 — shear bars per column, column bars per column (plan)
- Coping §9: C10 at each column centre (@300, k_max as for one column), C9 / C11
  outside, and the gaps between columns filled @250 from both C10 groups with the
  remaining length shared evenly (추천안, Q-K2). One column gives the T형 result.
- Column bars and couplers repeat per column (P1 230 × 2 for 2주형, × 3 for 3주형).
- Footings: each footing's bars are summed per name; the longest length governs.
- C14 is kept as the T형 layout with an RB-M01 note (per-column rule open, Q-K11).
- Tests: counts for 2주형 and 3주형; T형 unchanged; too-close columns refused.
- Not yet: the ③ shear-segment table for multi columns (still single column), the
  C14 per column, and a drawing for multi columns. Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:20:49 +09:00
ypshimandClaude Haiku 5.5 8ac5d2973c feat(view): 전단철근 구간 표 on the ③ coping tab (시안 ③)
- Segments of C9 (좌 경사), C10 (Level), C11 (우 경사): first and last bar in
  metres, spacing, count, and bar number. From the bar positions (코핑철근.md §3).
- Test: 0.300–4.550 (18 @250), 4.800–7.200 (9 @300), 7.450–11.700 (18 @250).
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:17:12 +09:00
ypshimandClaude Haiku 5.5 488b65af31 fix(view): alert [보기] highlights the bar it is about (시안 ③, spec §6.1)
[보기] only switched the member tab. The alert now names its bar (RB-F08 → B2),
and [보기] switches to the member, highlights that row, and scrolls to it.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:13:03 +09:00
ypshimandClaude Haiku 5.5 140d34a844 fix(view): ③ rebar table reads left to right and scrolls inside its panel
The text columns were right-aligned and the table pushed the 비고 column out of
view. Text columns are now left-aligned, numbers (길이, 개수) right-aligned, and
the table scrolls sideways inside its panel.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:09:47 +09:00
ypshimandClaude Haiku 5.5 cdc0e5ac9c feat(view): ③ screen follows the 시안 — table columns, basis badges, alert buttons
- 철근표 columns as in the 시안: 구분 · 번호 · 규격 · 간격 · 실간격 · 위치 · 방향 ·
  형상 · 길이 · 개수 · 근거 · 비고. Metadata per bar from the rebar documents.
- 근거 badges: 입력 / 기본값 / 계산 / 가정 (the 가정 badge is italic amber).
- 번호 click highlights that row.
- 알림: [보기] opens the member tab; I02 [입력] focuses the fck input.
- Member tabs show the warning count.
- 공통 설정 moved to the right column (알림 → 검토 필요 → 공통 설정), as in the 시안.
- The 시안's "fck를 입력해야 생성" blocker is not used: the defaults are assumed
  values (I02), as decided on 2026-10-22.
- Not in this step: the drawings and the 정면·단면 연동 (시안 도면 뷰어).
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:08:21 +09:00
ypshimandClaude Haiku 5.5 9ba7b55eab feat(core,view): ③ 공통 설정 — fck and fy as inputs (spec §6.2)
- Material {fck, fyH, fyS}, defaults 27 / 400 / 500 as assumed values (I02).
  The rebar calculations take the material: the C7/C8 splice, the P2 development
  length, the P3 lap, and the B2 split use it instead of fixed numbers.
- ③ screen: 공통 설정 inputs with a note that the defaults are assumed (I02).
- Project file stores the material as an optional field; older files open with
  the defaults.
- Tests: fck 27 → 35 shortens the laps by √(27/35); the C7 piece follows fck;
  a non-default fy drops I02; the file round trip.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:06:11 +09:00
ypshimandClaude Haiku 5.5 64d415f891 fix(view): stage navigation highlights the active stage
The highlight is the 'current' class, but the stage switch only changed
aria-current, so ① stayed highlighted while ③ was shown. The switch now moves
the class with aria-current.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 12:04:44 +09:00
ypshimandClaude Haiku 5.5 5cc166c2e1 feat(core): RB-C07 — delete P4 ties that interfere with the footing top bars
- A P4 is deleted when |z_P4 − z_bar| < (d_P4 + d_bar)/2 against B5 and B1
  (the 확대기초 top layer, from the 상면). B11/B12 are not checked (Q-C9 무시).
- The P6 crossties start from the first kept P4.
- Tests: the document's example keeps all 8; B5 moved to −70 deletes the P4 at
  −60; a P4 just outside the limit is kept.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:49:16 +09:00
ypshimandClaude Haiku 5.5 02d740d8ca fix(view): left-align the rebar table text and clarify the C14 note
- The 번호·규격 and 비고 columns of the ③ table read left to right; the note
  wraps instead of stretching the table.
- C14 note: "위 2줄 11본씩, 아래 5 · 6 · 3 · 2 (합 38)".

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:48:18 +09:00
ypshimandClaude Haiku 5.5 33d5edef35 fix(view): enable the import apply button after the sample names are filled
Setting the project name programmatically does not fire 'input', so the apply
button stayed disabled after 샘플 P1 사용 even with P1 checked. The button is
now refreshed after the names are filled.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:47:23 +09:00
ypshimandClaude Haiku 5.5 12239c6652 feat(view): standing input and names for the P1 project (운곡교P1 · 운곡교)
- The sample button and ?sample=1 fill the project name 운곡교P1 and the bridge
  name 운곡교. The sample is RAG/운곡교P1입력.xlsx.
- Test: the app's copy stays byte-identical to the RAG file (skipped when the
  RAG folder is absent) and reads one pier, P1, T형, 말뚝기초, 10 bearings.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:42:56 +09:00
ypshimandClaude Haiku 5.5 4d8bbf7f6e test(core): footing drawing-reproduction checks from the document's test table
- Leg offsets (B1 +25.4, B3 +22.25, B5 +28.6, B7 +23.85) and B11 / B12 heights
  (550 / 950 / 1350; 569.1 / 969.1 / 1369.1).
- Reproduction counts: W 7800 → B4 30 / B2 29; L 9350 → B8 36 / B6 35.
- Variables: W 8000 with s 150 → 50 steps, e 150; W 12000 → 92 steps.
- Splice cases: L 8700 → B2 11946 (no splice), L 12400 → B4 12200,
  W 8800 → B6 12046.
- Not covered: the 배근도 H 2200 case for B10 (the document's count is unclear).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:39:42 +09:00
ypshimandClaude Haiku 5.5 1c6194cd48 feat(core): cap bars of C9–C11 and piece count (추천안 for Q-K5)
- Recommended l_cap = h − 100 (top cover), so l_cap stays below h (RB-K04).
  Cap length = 1740 + 2·l_cap. The shear rows show U and cap ranges.
- Piece count 6 per position (3 closed stirrups × U + cap): C9 + C10 + C11 gives
  270 pieces, as in the document.
- P1/P2 per-line pieces are shown from the document (기둥철근.md §3.2).
- Tests: cap length and the 270 check.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:38:28 +09:00
ypshimandClaude Haiku 5.5 5641bbe265 feat(core): lengths for coping, column and the B2 split (추천안)
- Coping: C9/C10 lower U = 1740 + 2h with h linear along the slope and 2300 on
  the Level (3522 / 6098 / 6249 / 6340 from the document); C12 (3717–10183),
  C13 11746, C14 3447.5, C15 3852, C16 4070.
- Column: P3 = C_t + 1.3·l_d(H19) lap (추천안 for Q-C6, lap 1146.6), P5 = C_t.
- Footing: B2 13646 is split into two pieces at a splice with 1.3·l_d(S25,
  SD500) (추천안 for Q-B6), piece ≈ 7776 each.
- Not done: C9/C11 cap (삿갓) lengths (Q-K5 open), P1/P2 per-line pieces.
- Tests against the document values; P1 summary updated.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:37:08 +09:00
ypshimandClaude Haiku 5.5 73bff19aba feat(core): B9 shear bars of the footing (plan C5)
- B9 (확대기초철근 (1).md §9): H16 with the 135° stirrup hook, on the odd grid
  (i_W = 1, 5, …), 16 rows, 20 per row (even rows start at i_L 1, odd at 3),
  320 bars, length l_v 1750 + 2 × 189 ≈ 2128.
- The rebar summary now lists B9; the alert about B9 is gone. Positions and
  hooks are the document's proposed rules (Q-B18, Q-B19), noted on the row.
- Tests: the document's B9 values; P1 summary has 320 and only the splice alert.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:34:56 +09:00
ypshimandClaude Haiku 5.5 3af8729e9f feat(core,view): footing rebar B1–B12 (plan C5) and the ③ rebar screen v1
- Footing (확대기초철근 (1).md): grid counts from W and L, layer heights,
  B1–B4 and B5–B8 counts and lengths (B2 13646, B6 11396), B10-1/B10-2,
  B11 (60) and B12 (47) with their lengths. B9 is not computed yet.
- rebarSummary: one 철근표 per pier from the model (bearing, coping, column,
  footing), with alerts: RB-F08 (B2 needs a splice, Q-B6), RB-F09 (B9 not
  computed).
- ③ screen v1: stage nav button, member tabs (받침블럭 · 코핑 · 기둥 · 확대기초),
  rebar table with 번호 · 규격 · 개수 · 길이 · 비고, alert list, and the open
  questions (Q-B5, Q-B6, Q-C9). Drawings and the 강조 연동 are not in v1.
- Tests: footing values from the document; P1 summary totals; warnings.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:33:47 +09:00
ypshimandClaude Haiku 5.5 a403ab9641 feat(core): coping main bars C1–C8 (plan C3) and column rebar C4
- Nominal bar diameters (H29 28.6, S32 31.8, …) as used by the documents. With
  them, C7/C8 l_s = 1.3·l_d(28.6, fck 27) = 1717.6, which is the document's 1717.
- C1–C8 (코핑철근.md §5): width layout 127 · 110.5 · 21@125 · 110.5 · 127 with 24
  bars (12 + 12); heights 43.284 / 43.227 / 43.170; top bar lengths 12744 /
  12629.6 / 12515.2; bottom pieces ≈ 7448.
- C4 (기둥철근.md): P1 r 875 and P2 r 843.2; couplers P1 +3/6/9/12 m, P2 +150;
  230 + 230 main pieces and 368 couplers; tie radius 900.45; P3 38 at @300 from
  2.340; P5 19 at @120; P4 8 at @120 from −0.060; P6 8 levels × 4 = 32, length
  ≈ 2071.
- Not yet: C4 interference checks (P4 vs B11, Q-C9), bar lengths of P3/P5/P4
  and coupler shapes, the coping/column drawing checks, and the ③ screen.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:28:03 +09:00
ypshimandClaude Haiku 5.5 b962cf1a1c feat(core): bearing-block drawing check and coping rebar C3 (plan C2·C3)
- Drawing check (spec §6.3): an integrated 2500 × 1200 block gives 18@125 = 2250
  along (ends 50 + 75) and 7@125 = 875 across (ends 162.5).
- C3 coping rebar, from RAG/코핑철근.md (2026-10-22 final):
  - C10: 9 bars @300 at 4800–7200 (k_max 4, beyond the Level edge).
  - C9 / C11: 18 bars each @250 outward, ends at 300 and 11700 (end gap 300).
  - Refuses a coping too short for C9 (RB-K01).
  - Side bars C12 5 rows / C13 2 rows at the 42.538 break; C14 38 bars;
    C15 11 bars, C16 22 bars.
- spec §6.4 is older than 코핑철근.md (C10/C9/C11 layout, C12 row count, C14
  dimensions). This follows the final document; spec §6.4 needs an update.
- Not yet: C1–C8 main bars (shape and lengths), the C12/C13 bar lengths and
  shapes, the drawing check of the coping sheet, and the ③ screen.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:08:27 +09:00
ypshimandClaude Haiku 5.5 daf78d0586 feat(core): rebar common rules (plan C1) and bearing-block bars (plan C2)
- C1: development length l_d = 0.6·d_b·fy/(λ√fck), splice 1.3·l_d, standard
  hooks (main 90°, tie 90°, stirrup 135° as written in the spec). fck 27 and
  fy 400/500 are marked as assumed values (I02).
- C2: bearing-block bars, one block per bearing (배치 분리). Bars S1 and S2 at
  @125 with 8 bars per 1200 mm side (7 gaps = 875, ends 162.5), 2500 mm long,
  coping embedment from the block height (pad included, Q16 결정).
- Tests: development and splice lengths; hook table limits; embedment 600 /
  550 / 619.1 / 569.1; P1 has 80 bars each of S1 and S2 over 10 blocks.
- Not yet: the ③ screen and the drawing check against the bearing-block drawing.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:05:27 +09:00
ypshimandClaude Haiku 5.5 e297db1251 fix(core): replace abolished E04 with I02 in the unimplemented list
E04 (fck 미입력 차단) was abolished on 2026-10-22; fck and fy are now inputs
with assumed defaults, reported as I02 in the rebar stage (spec §10, §13 Q8).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 11:03:14 +09:00
ypshimandClaude Haiku 5.5 17b5b24682 feat(core,view): per-row pile counts 열별 본수 (plan C4)
- A 열 is one row across the footing width; each has its own count along the
  length. Default floor((L − 1400) / 2250) + 1 per 열, as in spec §4.6.
- Counts are validated: one per 열, whole numbers 2–30. Spacing below the
  2250 mm minimum is shown as a warning, not refused (the plan's 6본 → 5@1800
  example).
- PierInput gains an optional pileRows; absent means the defaults, so existing
  files and the P1 results are unchanged.
- Change tracking compares arrays by value; 열별 본수 can be reverted and
  copied (copy item off by default).
- The footing card has −/+ per 열 with spacing, total, and the display string.
- Tests: defaults 4열 × 5본 = 20 and the 1단계 text; 6본 → 5@1800; limits;
  model-level 21 piles.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 10:34:39 +09:00
ypshimandClaude Haiku 5.5 5b162c2441 feat(core,view): shape-option rules (plan C5) and pier selection rules (plan C6)
- C5: each member's options come from one table. Only the defaults (the 1단계
  model) are selectable. The others show as disabled chips with 규칙 미정 (Q6).
  The member summary is built from the defaults.
- C6: 전체 선택 acts only on visible, buildable piers; it reads 선택 해제 only
  when all of those are checked. A check survives a change of the type filter.
  The pier list scrolls past 300 px, for 20 piers.
- Tests: defaults are the only choices; unknown options refused; the 20-pier
  mixed list with two failed piers; filter and check persistence.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 10:15:03 +09:00
ypshimandClaude Haiku 5.5 56362570ec feat(view): 형상계획 ② screen skeleton with five members (plan.md C1)
- ① and ② are switched from the stage nav. ② shows the pier list with change
  counts, the five members (교량받침, 코핑, 기둥, 확대기초·말뚝, 지반·지층) with
  a change count each, a member card, and a change list with per-item revert.
- The member card shows 기본 and 선택 summaries separately. Only members with
  existing inputs get fields (코핑 폭·길이, 말뚝 길이); the others show values
  and a note that their inputs come in a later step. Unselected members' inputs
  are not shown.
- The field rows are shared between ① and ②.
- Added a global [hidden] rule so hidden screens stay hidden.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 10:07:34 +09:00
ypshimandClaude Haiku 5.5 f75431d898 feat(view): attribute-copy dialog (시안 ⑥, plan C8)
- 속성 복사… opens the four-step dialog: source (current inputs), items,
  targets (same-type filter on by default), and a preview with changed values
  and skipped items per target. Apply changes only the visible, ticked targets.
- Items that the model does not have yet (기둥, 받침, 배근, 기초 형상) are shown
  as 예정 and disabled. Coping length and pile length are off by default.
- Option: regenerate the targets right after applying (default on); otherwise
  they show as 재생성 필요 through the normal change tracking.
- Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 10:01:18 +09:00
ypshimandClaude Haiku 5.5 4accf1f3be feat(core): attribute-copy engine (plan C7)
- planCopy previews the changes and the skipped items for one target; applyCopy
  applies exactly the planned changes.
- Default selection copies only the coping width; coping length and pile length
  are off by default (spec §9). Pile items are skipped when the foundation type
  differs. Coordinates, IPs, bearings and elevations are not in any item.
- Equal values are not counted, so the preview count equals the applied count.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:59:48 +09:00
ypshimandClaude Haiku 5.5 fae8d7b9b8 feat(view): reflect 시안 ① main screen and ⑤ save dialog
- Header follows the mockup: dark bar, project line, stage chips (② shows the
  pending change count), save status, 저장 / 엑셀 불러오기 / 프로젝트 열기 and
  the primary 선택 교각 다시 생성 · 변경 n button.
- Left column: pier list with header row, 선택 n기 bulk bar, 입력값 and the
  2단계 input card. The bottom input panel is gone.
- First save opens 시안 ⑤ (project name, bridge, client, author, 좌표계, memo);
  later Ctrl+S / 저장 write the same file, as the spec's B5 requires.
- Project info (client, author, 좌표계, memo) is kept in the project file.
- Style layer uses the mockup's tokens (#18212B header, #1F5FA8 primary,
  #D5DBE2 borders, #E3EDF8 selected row, JetBrains Mono for numbers).
- Not reflected: ② and ③ screens (not built yet), and the mockup's static
  front preview (the app draws the model in 3D). Not verified in a browser.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:57:02 +09:00
ypshimandClaude Haiku 5.5 0b62f694c5 feat(core,view): input cards with change tracking (plan B1 · C2)
- Three values per pier: defaults (as imported), input (generated), draft
  (current cards). Overrides = draft vs defaults; pending = draft vs input.
- Editable now: 코핑 폭, 코핑 길이, 말뚝 길이. Changing a card does not touch the
  3D view until 다시 생성; the header and the card show 변경 n.
- Revert puts a field back to its imported default.
- Project files store defaults and draft (optional; v1 files still open).
- Tests: 코핑 폭 3100 → 3300 gives one override and one pending change;
  regenerating clears pending but keeps the override; revert; file round trip.
- Not verified in a browser (no debuggable Chrome in this session).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:48:47 +09:00
ypshimandClaude Haiku 5.5 f5303e4c2b feat(view): project save/open, Ctrl+S, save status, IndexedDB auto-backup (plan B2–B5)
- 저장 (Ctrl+S) downloads <교량명>_교각설계.pzr.json; 프로젝트 열기 reads it
  back and regenerates every pier without the source workbook.
- Save status in the header: 저장 전 / 변경 있음 · 미저장 / 저장됨. The
  snapshot excludes the history so a save is not counted as a change.
- Auto-backup to IndexedDB 0.8 s after changes while unsaved; on start a banner
  offers recovery or discard. Storage failures are reported, not fatal.
- beforeunload warns while there are unsaved changes.
- B1 (default-vs-changed tracking) is not added yet: inputs are not editable
  until the 2단계 input cards exist.
- Not verified in a browser (no debuggable Chrome in this session).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:44:49 +09:00
ypshimandClaude Haiku 5.5 5ce6d0e2f1 feat(core): project file save/open with schema check (plan B3)
- serializeProject / parseProject for the .pzr.json format (spec §8,
  schemaVersion 1). Parsing refuses other versions and damaged piers, and
  names the first broken pier.
- The 3D model is not stored; it is regenerated on open.
- Tests: save → open equality without the source workbook; regenerated
  models equal for 20 piers; version and damage refusals.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-22 09:39:44 +09:00