## v1.0.174: A4印刷の列順・タイムバーFIT・最上部時刻目盛り

- 勤務時間はタイムバーの左側、タイムバーは開始／終了設定の範囲にFIT。
- 時刻目盛りをタイムバー列の最上部に表示。
- #048／#054 Runtimeへの変更なし。

## v1.0.170: A4月報・祝日アイコン印刷修正

- #024 の月表示／提出用印刷は、画面が縦表示でも横表示でも、A4用の「日付1行」連続月間表を使用します。28～31日を原則1枚へ印刷。週ごとの強制分割はしません。
- A4縦／A4横とも、日付・勤務時刻・休憩・実勤務・早朝・残業・深夜・正式#024由来の勤務バー・備考・祝日／イベントを残します。
- 備考が長く用紙からはみ出す場合は行全体を次ページへ送り、日付範囲とページ番号を更新します。
- 祝日 `icon: true` は表示フラグであり文字列ではないため、印刷では正式の 🎌 等の絵文字へ変換します。
- #048/#054/#125 Runtimeと既存SQLiteには変更を加えません。
- Windows PowerShell 5.1 / ユーザー localhost は未検証（Development Candidate）。

## v1.0.165: タスクグループにクライアント／チケットを設定

- #024 の「タスクグループ管理」→登録済みクライアント／チケット選択（関連付けはグループ単位）。
- クライアント／チケットの新規登録・変更・削除は既存「クライアント・チケットマスター」画面で管理し、タスクグループから開ける。
- グループを週に適用した際、選択した clientId / ticketNo を各 #024 タスクに引き継ぐ。既存の勤務・休憩タスク作成を保持。
- マスターID更新はグループとタスクにも追従。使用中のマスター削除を拒否。
- 保存先は既存 Calendar SQLite Adapter の calendarSettings.taskGroups。独立DB・別Runtime・Redmine通信は追加しない。
- インストール後の Windows PowerShell 5.1 と全依存込み localhost 検証は未実施。

# Bone Flow #024 - Calendar

Version: 1.0.16  
Status: Development

## 役割

#024 Calendar は Picker 等から再利用する **Primitive UI の共通日付選択基盤**です。

Development Order v1.1.1 の責務に従い、次を提供します。

- 月表示
- 前月 / 次月
- 日付グリッド表示
- 日付選択
- 選択日表示
- 今日の表示・選択
- `min / max / step` による日付選択可否（minより前・maxより後の月移動は禁止）
- `default / dark / light / neon` Theme
- 開始曜日 `sunday / monday / auto`（既定 `sunday`。`auto` は後方互換として `sunday` に解決。表示言語を切り替えても開始曜日は変わらない）
- 日曜=赤 / 土曜=青（Themeごとに自動調整）
- Font Awesome 相当の内蔵SVG / 絵文字アイコン切替
- 選択日を呼び出し元へ返却
- 親に吸着（親content領域へ100%吸着。Theme配色は維持）
- 単体時の幅・高さ・9方向配置
- Annotation IN（日付ごとの祝日 / カスタム休日 / 記念日 / タスク）
- 祝日・カスタム休日・記念日のセル内アイコン表示
- 日付hover/focusのTooltip表示
- task Annotationの任意 `href` リンク
- `showTasks` によるタスクTooltip・タスクdot表示 / 非表示切替（既定 `true`）

## Current implementation contract — Package 1.0.158

- Runtime: `BoneCalendar 1.0.52`.
- HTML Functional Class: `bf-calendar` / `BoneCalendarFunctionalClass 1.0.16`.
- Locale: explicit `data-locale` / `locale` (`ja`, `en`, BCP 47) has highest priority. `auto` / null resolves page `<html lang>` first so Redmine language wins over browser/OS language; then navigator/Intl fallback is used. Locale changes labels/text only; week ordering remains controlled by `weekStart` / `data-week-start`.
- A normal-use host such as `<div class="bf-calendar" data-value="2026-08-13" data-theme="dark" data-icon-visual="emoji"></div>` is mounted by the Functional Class itself. Manual `BoneCalendar.create()` and sample-only variables are not part of this HTML Functional Class contract.
- The standalone `bf-calendar.js` contains the formal dependency chain used by #024 plus the BoneCalendar Runtime and HTML Functional Class in load order; it does not contain a Sample controller.
- #040 ColorPicker Caller uses the formal `transition` option for #118 Overlay OPEN/CLOSE. `transitionEffect` / `transitionDirection` are not valid #024 Caller contracts and are not used.
- Dependency acceptance in the HTML Functional Class is capability/API based; it does not reject a compatible Runtime merely because its patch version string differs.
- Historical version notes below are change history, not the current Runtime/Functional-Class identity.

## v1.0.7 #040 ColorPicker / Class・Public API表示

- Calendar Theme（日曜/土曜/selected/holiday等）の色責務は変更しません。Theme内部値を新しいColor Propertyへ分解しません。
- テスト画面に実在する親Previewの `background` / `text color` の2項目だけを #040 ColorPicker v1.0.18 Caller APIへ移行します。
- Consumerは色選択Triggerのみを所有し、#040 Overlay / Tooltipは `document.body` 所有です。
- `allowedKinds: ["solid"]` とし、RETURNされた `#RRGGBB` を既存の親Preview外観同期経路へ戻します。
- Runtime `BoneCalendar` の動作APIはv1.0.6から追加・削除しません。Classを捏造せず、テスト画面の「Class リスト / Public API」で実際のPublic Object / Factory APIを列挙します。

## 最重要責務境界

#024 Calendar は親 INPUT の状態を知りません。

持たないもの:

- editingValue
- committedValue
- Bone.value 更新
- commit
- invoke
- OUT
- Delivery Channel
- WAIT / BLOCKED

日付選択時は `bone-calendar:select` Event と `onSelect` callback で日付を返すだけです。Annotationは表示専用で、選択値・commit・OUTを変更しません。

## Annotation IN

`annotations` は日付キーで表示情報を渡します。

```json
{
  "2026-08-11": {
    "items": [
      { "kind": "holiday", "label": "山の日", "icon": true }
    ]
  },
  "2026-08-13": {
    "items": [
      { "kind": "customHoliday", "label": "お盆休み", "icon": true }
    ]
  },
  "2026-08-10": {
    "items": [
      { "kind": "task", "label": "10:00 定例会議", "href": "/schedule/123" }
    ]
  }
}
```

種別:

- `holiday`: 祝日。セル内アイコン + Tooltip
- `customHoliday`: お盆休み・正月休み等。セル内アイコン + Tooltip
- `anniversary`: 記念日。セル内アイコン + Tooltip
- `task`: スケジュール・予定。セル内アイコンは増やさず、日付Tooltipに表示

`task.href` は任意です。相対URLまたは `http/https` のみ許可し、`javascript:` 等は拒否します。

`showTasks: false` の場合、task AnnotationだけをTooltip/aria-labelから除外し、日付下のタスクdotも非表示にします。祝日・カスタム休日・記念日の表示は維持します。

Font Awesomeモードでは内蔵SVG、絵文字モードでは `🎌 / 🏖️ / ⭐` を表示します。

## 祝日CSV変換（テスト画面のみ）

#024本体はCSV取得・変換を行いません。テスト画面で手動選択した内閣府CSVを読み込み、次の見出しを使って `calendar.annotations` JSONへ変換します。

```text
国民の祝日・休日月日
国民の祝日・休日名称
```

Shift-JIS系（CP932）/ UTF-8を想定し、「取込開始年」以降の行だけを変換します。既定開始年は2026です。テスト画面のサンプル祝日データは、添付確認済みCSVの2026年・2027年分を使います。変換後JSONはPreview適用と保存ができます。

## #032 DateTimeBox v1.0.11 からの分離

比較元は `BoneFlow_032_DateTimeBox_v1.0.11.zip` の Theme 対応内蔵Calendar実装です。

採用した考え方:

- native date popup を使わない
- 月ナビゲーション
- 日付セル
- selected 表示
- min / max による disabled
- Theme変数
- CDNを使わない内蔵SVG

分離したもの:

- DateTimeBox editing/commit/invoke
- 時・分Picker
- 小数秒
- Security
- Joint / Delivery
- OUT WAIT / BLOCKED

## step

#024 の `step` は **日単位**です。

- `any`: 全日付をstep条件では制限しない
- 正整数: N日刻み
- `min` がある場合は `min` を基準日とする
- `min` がない場合は `1970-01-01` を基準日とする

## API

```text
BoneCalendar.create(options)
BoneCalendar.destroy(element)
BoneCalendar.setOptions(element, patch)
BoneCalendar.getOptions(element)
BoneCalendar.setValue(element, YYYY-MM-DD)
BoneCalendar.getValue(element)
BoneCalendar.setView(element, YYYY-MM)
BoneCalendar.getView(element)
BoneCalendar.previousMonth(element)
BoneCalendar.nextMonth(element)
BoneCalendar.selectToday(element)
BoneCalendar.setAnnotations(element, annotations)
BoneCalendar.getAnnotations(element)
BoneCalendar.validateAnnotations(annotations)
BoneCalendar.annotationsForDate(annotations, YYYY-MM-DD)
BoneCalendar.validateDate(value, options)
BoneCalendar.isDateSelectable(value, options)
BoneCalendar.syncParentStyle(element)
BoneCalendar.isInstance(element)
BoneCalendar.resolveWeekStart(weekStart, locale)
BoneCalendar.monthMatrix(year, month, weekStart, locale)
BoneCalendar.daysInMonth(year, month)
BoneCalendar.isLeapYear(year)
BoneCalendar.today()
```

## Event

```text
bone-calendar:select
bone-calendar:month-change
```

## Test URL

```text
http://localhost/BoneFlow/test/bone-calendar.html
```

Browser Runtime QA はユーザー localhost 実行で確認します。

## Runtime QA UI

テスト画面は #027 TextBox の共通QA構成を基準に、次を持ちます。

- 接続イメージ 5ケース（`BoneJoint.evaluate()` 実判定 / `BoneJoint.drawLine()` 実描画）
- Smoke Test / Validation Report
- JSON / MD Runtime Report保存
- Runtime Console
- Completion

#024 は OUT を持たないため、Completion の WAIT / BLOCK は `N/A（OUTなし）` と表示します。

## v1.0.8 Test UI integration
- Header に「ガイドを開く」を追加し、Class / Public API・使用方法・操作説明を実Runtimeから確認可能にした。
- Test Property の初期 `max` は選択日 `2026-08-10` の1年後 `2027-08-10`。
- Theme Property を「テーマ (theme)」として明示（default / dark / light / neon）。Runtime Theme契約自体は変更しない。
- 日付セル Mouse Over に #022 Hover Border Effect v1.0.12 を `trigger: mouseover` で適用。Effectは normal / neon / spin / blink / dash / corner / chase / double / wave から選択可能。


## v1.0.9 Class / Public API Guide correction

- `ガイドを開く / Open Guide` belongs to the `Class リスト / Public API` section.
- The guide lists the actual `BoneCalendar` Public Object / Factory API; no wrapper Class is invented.
- Every one of the 24 real Public APIs has an individual guide.
- Each individual guide contains: when to use, arguments, usage steps, sample code, operation details, return value, role, and responsibility boundary.
- Japanese / English switching applies to the guide.
- Calendar selection/month/theme/annotation/#022/#040 behavior is unchanged by this guide-only correction.


## v1.0.11 Hover Border Effect Property UI

- Added the visible `マウスオーバー時の枠Effect（#022） / Mouse-over Border Effect (#022)` Property group to the Calendar test UI.
- The group exposes the same #022 control surface used by existing consumers: enable, effect, color, direction, speed, Spin outer width, and Spin glow.
- Effect selection supports `normal / neon / spin / blink / dash / corner / chase / double / wave`.
- Direction supports `clockwise / counterclockwise`; speed supports `slow / normal / fast`.
- Effect color is selected through the formal #040 ColorPicker v1.0.18 Caller API with `allowedKinds:["solid"]`; no native `<input type="color">` path is added.
- The selected settings are passed to `BoneHoverBorderEffect.attach(day, options)` with `trigger:"mouseover"` for each Calendar date cell.
- #024 Calendar runtime selection/month/annotation/theme API is unchanged except the component version.


## v1.0.11 #020型統合ガイド

`Class リスト / Public API` の `ガイドを開く` は #020 Label v1.0.62 を表示構造の基準とします。

- ガイド入口はClass/Public APIセクションに1つだけ置きます。
- ガイド内左ナビで `Class / Public API` / `使用方法` / `操作説明` を切り替えます。
- 使用方法では実在24 Public APIごとに、いつ使うか・引数・手順・サンプルコードを表示します。
- 操作説明では実在24 Public APIごとに、動作・戻り値・役割・責務境界を表示します。
- `BoneCalendar.Component` 等の存在しないClassは追加しません。


## v1.0.12 Runtime QA correction

- v1.0.11 guide rebuild accidentally omitted the existing #040 ColorPicker caller helper functions used by Parent background/text and #022 Effect color controls.
- Restored the exact v1.0.11 caller helper path: trigger display update, caller attach/detach, and #040 RETURN handling.
- This restores normal boot flow before Preview creation, connection-image rendering, #022 date-cell attachment, and automatic Runtime QA execution.
- Calendar runtime behavior, #020-style guide content, Theme, max=1 year, Annotation, and commit/OUT responsibility are unchanged.

## v1.0.15 repair Consumer ColorPicker validation correction

- User localhost Runtime QA for v1.0.12 reached Smoke 39/39 PASS and Validation 26/27 PASS; only V18 failed.
- #024 consumer markup already uses hidden #RRGGBB sources plus Consumer-owned buttons for Parent background, Parent text, and #022 Effect color.
- V18 incorrectly searched the entire `document` for `input[type="color"]`, which also includes #040 ColorPicker's own body-owned internal/compatibility controls.
- V18 now scopes the native-color prohibition to the #024 Consumer-owned `.bf-page` DOM and explicitly verifies the three Consumer triggers are buttons.
- #040 internal DOM/API is not modified. No Calendar runtime behavior or Property behavior is changed.


## Runtime-owned Property Schema (v1.0.15)

`BoneCalendar.getPropertySchema()` / `getPropertyDefaults()` / `getPropertyDefinition(key)` are the formal property source. The UI must not maintain a competing schema.

## HTML Functional Class (v1.0.15)

Historical v1.0.15 note: the then-current bridge was `BoneCalendarHTMLClass 1.0.7` and Runtime identity was `BoneCalendar 1.0.16`. Current identity is listed at the top of this document.

## Current dependency contract

- #022 BoneHoverBorderEffect 1.0.12: normal / neon / spin / blink / dash / corner / chase / double / wave (`cross` removed); lineWidth is formal.
- #040 BoneColorPicker 1.0.18.
- #118 BoneTransition 1.0.3 + bf-transition Bridge 1.0.4 is required by #040.
- DOC-0024 / TOC-0024 are the formal Guide route.


## v1.0.17 #024 Task / Selected-Day Extension

- Historical v1.0.17 note: at that time BoneCalendar Runtime stayed 1.0.15 for the then-current #054 Weekly v1.0.41 compatibility. This is not the current Runtime identity.
- Runtime-owned Properties: `calendarIconSizePx` (8..24, default 14), `calendarTaskIcon` (default 📑), `calendarTaskIconPosition` (`right` default / `center` / `left`), `selectedDayVisible` (default false; #024 test page explicitly enables it).
- Calendar task-present icon is rendered below the date number.
- Common icon size applies to 🎌 holiday / 🏖️ customHoliday / ⭐ anniversary / 📑 task indicator.
- Selected-day panel displays `📑 タスク`, `🎌 祝日`, `🏖️ カスタム休日`, `⭐ 記念日` in Japanese with emoji. `content` is visible; `memo` is a hover/focus tooltip.
- New #024 Task Editor writes `start`, `end`, `typeId`, `content`, `memo`, `showInRemarks`; start/end/typeId are required by the editor and end must be later than start.
- For backward compatibility with #054 Weekly v1.0.41, an incoming legacy `{kind:"task",label:"..."}` annotation remains valid as display-only (`timelineReady:false`). When any timeline field is supplied, start/end/typeId become an all-or-nothing validated contract.
- #048 Table and #054 Display Timeline files are not overwritten by this package.


## v1.0.18 Task Data CRUD correction
- #024 test/reference page now exposes task data as a visible table.
- Each task shows date, start, end, typeId, name, content, memo, and remarks flag.
- Edit loads the exact row back into the editor; Update can also move the task to another date.
- Delete removes only the selected task and preserves non-task annotations on the same date.
- Optional selected-date-only filter is available; default view shows all task data.
- BoneCalendar Runtime stays 1.0.15; #048 Table and #054 Display Timeline are not packaged or overwritten.


## v1.0.19 Installer MANIFEST repair

- v1.0.18 generated MANIFEST lines as `<sha256>  <path>` while the #017-standard installer parser requires `<sha256> *<path>`.
- v1.0.19 restores the exact #017 canonical star-prefixed MANIFEST path format and adds a regression check using the installer regex.
- Historical note: that revision kept BoneCalendar 1.0.16. Current Runtime is 1.0.21; #048 Table and #054 Display Timeline files remain outside #024 package ownership.


## v1.0.21 Task Type / Task external-data and modal management

- Task Type master and Task records are Runtime-owned external-data inputs, designed so the storage adapter can later be replaced by DB/API integration.
- Task Type master uses stable `id`; Task records use `typeId` reference and `taskId / date / start / end / typeId / label / content / memo / showInRemarks`.
- Public APIs: `setTaskTypes/getTaskTypes`, `setTasks/getTasks`, `setTaskData/getTaskData`, `validateTaskTypes/validateTasks`, `openTaskTypeManager/openTaskManager`.
- HTML Functional Class accepts `data-task-types` and `data-tasks` JSON arrays plus `data-show-task-type-manager-button` / `data-show-task-manager-button`.
- Calendar bottom owns `タスク区分` and `タスク` buttons; each button visibility is a Runtime Property.
- Both management screens default to modal CRUD. The old inline task-management panels are removed.
- Task Type data/UI does not contain `カレンダーへアイコン表示`; Calendar task-presence indicator is a separate Calendar appearance setting.
- Timeline-ready Task tooltip is exactly `開始時間~終了時間 タスク名`.
- Historical note: that revision stayed on `BoneCalendar 1.0.16`. Current Runtime is `1.0.21`; #048/#054 files are not overwritten.


## v1.0.22 Runtime Schema compact JSON display
- Runtime Schema table balance adjusted with fixed column proportions.
- Array/Object default values (including taskTypes) are shown as a compact expandable summary instead of one long inline JSON string.
- Expanded values use pretty-printed JSON code in a bounded scroll area so the schema does not consume excessive width or height.


## v1.0.34 Event management
- Calendar footer adds an 「イベント」 management button.
- Event manager opens as a modal by default and supports add/edit/delete.
- Event fields: date, event kind (customHoliday / anniversary), emoji, event name.
- Runtime-owned Properties: showEventManagerButton / events.
- External-data APIs: setEvents / getEvents / validateEvents / openEventManager.
- Event data uses eventId/date/kind/emoji/label so later DB/API adapters can replace the storage layer.
- Event date is date-only (`YYYY-MM-DD`). The Event manager does not use a datetime control. The `📅` button opens a normal #024 Calendar instance and the selected day is written back to the event date field.
- 🏖️ customHoliday / ⭐ anniversary sample data is managed through events rather than hard-coded Annotation samples.


## v1.0.34 Event date Calendar display
- The Event manager date selector remains the normal #024 Calendar opened by the 📅 button.
- The Calendar selector now expands inside the Event manager layout instead of creating an internal modal-panel scroll area.
- The Event manager panel itself does not use an internal scrollbar for the expanded Calendar on normal desktop viewports.

## v1.0.34 🎌 Annotation IN / 祝日CSV管理

- Calendar下部へ `🎌` 管理ボタンを追加する。
- 正式Property `showAnnotationManagerButton`（boolean / default=true）でボタン表示・非表示を制御する。
- `🎌` ボタンは既定でモーダル `Annotation IN / 祝日CSV変換` を開く。
- モーダルでは取込開始年、内閣府形式CSV、Annotation JSONの確認・適用・保存を行う。
- CSV変換後は同一Calendarの `annotations` へ反映し、`bone-calendar:annotations-change` を通知する。
- 従来テスト画面の大きなAnnotation設定パネルは表示せず、互換/回帰テスト用にhidden保持する。


## v1.0.34 Annotation manager layout / official source link
- 「Annotation IN / 祝日CSV変換」モーダルは操作ボタンを幅内で折返し、モーダル横方向にはみ出さない。
- 内閣府「国民の祝日」公式サイトへの外部リンクを表示する。


## v1.0.34 DOC-0024 guide update
- DOC-0024 JA/EN content is package-owned for this reopened #024 update.
- HTML Functional Class sections now document Task Type / Task / Event / Holiday contracts, usage, external data injection, manager APIs, and samples.
- Installer copies DOC-0024 content and merges DOC-0024 / TOC-0024 registry entries, then verifies the installed route.


## v1.0.37 Theme / Selected-Day correction

- `inheritParent=true` は親content領域への100%レイアウト吸着のみ。Theme背景/文字/枠色を親色で上書きしない。
- Light Themeは親に吸着ONでもLightのまま表示する。
- 選択日パネルは内部スクロールを持たず、内容をそのまま展開する。
- `selectedDayVisible` は既存Runtime-owned Propertyのまま、Standalone Sampleにも表示/非表示チェックを追加。
- Historical note: 当時の #054 Weekly v1.0.41 互換のため `BoneCalendar 1.0.16` を維持していた。現行Runtimeは `1.0.21`。

## v1.0.41 Calendar Preview / Standalone parity correction
- Calendar Preview の選択日タスク主表示を `開始時間~終了時間 タスク名` とする。例: `10:00~11:00 定例会議`。
- 選択日パネルは内部スクロールを持たず、単体表示では configured height を最小高さとして必要分だけ縦方向へ展開する。
- Standalone Sample の Task Type / Task / Event / Annotation データは `/test/bone-calendar.html` と同一契約・同一基準データを使用する。
- Standalone 配布物は `bf-calendar.html` / `bf-calendar.css` / `bf-calendar.js` の3ファイルだけで動作することをブラウザSmoke対象とする。



## v1.0.41 Candidate reopened changes
- bf-calendar external data operations: Task Type / Task / Event set/add/update/remove/get/clear.
- Task Type is the master for color/icon and supports `showCalendarIcon`.
- #054 display data (`displayType`, `commentOffsetX`, `commentOffsetY`, `commentWidth`) is kept outside the formal #024 Task object and related only by `taskId`.
- Calendar uses auto content height with configured `height` as minimum height when `inheritParent=false`; selected-day display must not compress the month grid.
- `selectedDayVisible` remains externally controllable via `data-selected-day-visible`.

## v1.0.42 Candidate — 現場利用 / 外部データ管理修正

- `bf-calendar` の `data-task-types` / `data-tasks` / `data-events` / `data-annotations` を初期表示時に Runtime へ実投入する。
- タスク区分はマスター。`id / label / kind / icon / backgroundColor / backgroundOpacity / textColor / textOpacity / showCalendarIcon` を持つ。
- Calendarタスク本体は `taskId / date / start / end / typeId / label / content / memo / showInRemarks`。
- #054 Display Timeline 表示情報は Calendarタスク本体と画面・一括操作を分離し、`taskId` で関連付ける。`displayType / commentOffsetX / commentOffsetY / commentWidth` はRuntimeの別storeへ保持し、正式#024 Taskオブジェクトには書き込まない。専用API `getTaskDisplay054 / getTasksDisplay054 / setTaskDisplay054 / setTasksDisplay054` を公開する。互換入力として旧 `display054` / flat形式を受け付けた場合も別storeへ移送する。
- タスク管理モーダルに `選択日 / 一覧 / 月別 / 週別` の4表示を追加する。
- タスク区分 / タスク / イベント / Annotation の既存管理モーダル内で、単体CRUDに加えて「現在値読込 / 一括置換 / 一括追加・更新 / 指定ID一括削除 / 全削除」を行える。
- タスク管理の一括操作は `#024 Calendar タスク本体` と `#054 Display Timeline 表示データ` を別JSONエディタに分ける。#024タスク本体の一括更新では既存taskIdの#054表示情報を保持する。
- Calendar本体は固定heightで内容を圧縮しない。`height` は最低高さとして扱い、選択日やデータ量に応じて自然に縦方向へ拡張する。`inheritParent=true` でも幅を親へ吸着しつつ高さはautoで拡張する。
- `selectedDayVisible` のON/OFFを維持し、ONでも月グリッドを潰さない。


## v1.0.43 Candidate — Test page cache/boot regression fix
- `bone-calendar-html-class.js` に付与していた古い固定version queryを廃止。
- `ensureFreshAssets()` が Runtime と HTML Functional Class の両方を `cache:no-store` で再取得してから Preview を生成。
- Runtime更新後に古い `bf-calendar` がキャッシュされ、Previewが空になる経路をテスト対象へ追加。

## v1.0.45 Candidate — Manager layout / optional #054 / ColorPicker correction

- Runtime: BoneCalendar 1.0.18.
- Task Manager: month/week now expose explicit `月キー` / `週キー` inputs. Core fields are regrouped so Date/Task Type and Start/End are balanced pairs; Start Time precedes End Time.
- #054 per-task display is optional. `#054表示を使用` is OFF by default for a new Calendar Task. When enabled, display values are written to the separate taskId-keyed #054 store; the formal #024 Task object remains unchanged.
- #054 common settings are a separate optional box using the v1.0.45 Weekly contract: `startTime`, `endTime`, `timelineStepMinutes`, `timelineSnapMinutes`, `timelineShowGrid`, `timeBarHeightPx`.
- Task Type Manager is regrouped into Basic / Color+Icon / Calendar Display. (The v1.0.45 optional Task Type effect experiment is superseded by v1.0.50.)
- Background/Text colors use the formal #040 `BoneColorPicker.attachCaller(...)` route.


## v1.0.50 Candidate — #040 ColorPicker / #118 Transition correction

- Task Type remains a master for `id / label / kind / icon / backgroundColor / backgroundOpacity / textColor / textOpacity / showCalendarIcon`. The temporary `effectEnabled / effect / effectColor` fields are removed from Task Type output.
- Background and text colors use formal #040 `BoneColorPicker.attachCaller(...)` only. Consumer-side native `input[type=color]`, custom open handlers, and `openCaller()` double registration are prohibited.
- `ColorPicker表示 / #118 Transition（任意）` is a separate Caller-display box. It does not become Task Type master data.
- The box exposes the formal 23 `Transition種類` values from #118 and `方向` (`up/down/left/right`). The selected Transition type is propagated to the formal #040 Caller as `transition`. Direction is forwarded under the formal #118 property name `direction`; the obsolete guessed keys `transitionEffect` / `transitionDirection` are not used. The setting affects only ColorPicker Overlay OPEN/CLOSE.
- Direction is disabled in the UI when the chosen Transition does not consume Direction.


## v1.0.50 boot contract correction

The test-page fresh-asset/boot/report guards are aligned with BoneCalendar Runtime 1.0.19. This fixes a page bootstrap failure and does not change Calendar runtime responsibility.


## v1.0.50 Candidate — HTML Functional Class truth / #040+#118 wiring correction

- Guideの最小HTMLをそのまま正式テスト対象にする。手動 `BoneCalendar.create()`、Sample controller、初期化用サンプル変数は禁止。
- `bf-calendar` Functional Class 1.0.14 が `data-*` を読み、Runtime Public APIで直接mountする。
- Task Type background/text color callers remain formal `BoneColorPicker.attachCaller()` consumers. #040 が要求する #118 Runtime + `bf-transition` Functional Class を依存として使用し、Consumer独自Transitionは作らない。
- ColorPicker Overlay用Transition種類は正式 `transition`、方向は `direction` をCallerへ渡す。推測キー `transitionEffect` / `transitionDirection` は使わない。
- Calendar manager modal stacking is kept below the body-owned #040 overlay, and Smoke verifies actual caller OPEN through both controller and trigger click paths.


## v1.0.51 Candidate — Installer dynamic-manager contract correction

- `open-task-types` / `open-tasks` / `open-events` / `open-holidays` are not static elements in `bone-calendar.html`; manager launch buttons are Runtime-generated controls.
- Installer no longer requires those Runtime-generated IDs inside source HTML.
- Installer validates manager capability in `bone-calendar.js` via `openTaskTypeManager / openTaskManager / openEventManager / openAnnotationManager` and the Runtime-generated `dataset.managerOpen` route.
- The HTML Functional Class minimal contract remains a plain `<div class="bf-calendar" ...></div>` without manual `BoneCalendar.create()`.



## v1.0.55 Candidate — Runtime QA repair

- Runtime `BoneCalendar 1.0.21`; HTML Functional Class `bf-calendar` bridge `1.0.15`.
- Test boot no longer re-evaluates an already loaded Calendar Runtime/Functional Class; no-store fetch is verification-only so the singleton instance registry and automatic `bf-calendar` mount are preserved.
- Smoke fixtures for legacy task href/showTasks are independent from the holiday-only sample annotations.
- Public API/Class tests derive their count from the runtime instead of stale hard-coded counts.
- Selected-day task rows display the formal Japanese kind label with the task emoji (for example `📑 タスク`).
- #040 body-owned Overlay smoke checks formal open state and caller metadata without a zero-frame geometry race during #118 transition startup.

## v1.0.52 Candidate — Installer contract audit

- Installer dependency acceptance is file/capability based; dependency source version strings are not exact-match gates.
- `js/bone-transition-functional-class.js` is the required formal #118 HTML Functional Class dependency.
- Installer no longer treats display wording, Runtime internal source tokens, Sample prose, CSS fragments, or `dataset.managerOpen` as install contracts.
- DOC-0024 install verification is structural: Registry/TOC exactly once and JA/EN route files present and non-empty.
- JavaScript syntax plus the public BoneCalendar / `bf-calendar` capability contract are verified before and after copy.
- The exact Guide minimal `bf-calendar` markup remains the Functional Class fixture; no manual `BoneCalendar.create()` is added.

- v1.0.52 Runtime 1.0.20 separates #054 per-task display values into a taskId-keyed store; `getTasks()` returns only the formal #024 Task core.


## v1.0.55 HTML Functional Class CRUD / Minimal ColorPicker repair

- `BoneCalendarFunctionalClass 1.0.15` exposes Task Type / Task / Event `set/get/add/update/remove` APIs against a `.bf-calendar` host.
- CRUD results are synchronized back to `data-task-types`, `data-tasks`, and `data-events`.
- Default external data remains declarative through `data-task-types`, `data-tasks`, and `data-events`; no post-mount `setTaskData()` is required.
- `minimal.html` keeps the Calendar element contract to `class=bf-calendar` + `data-value` + `data-theme` + `data-icon-visual`, while loading the formal #020 -> #022 -> #118 Runtime -> #118 `bf-transition` Functional Class -> #040 dependency chain so the Task Type ColorPicker can actually open.
- `bone-calendar.html` loads `bone-transition-functional-class.js` directly; no installer-time script-slot injection is used.


## v1.0.55 Minimal ColorPicker / Runtime QA correction

- `minimal.html` now loads the same #001 Core / #002 Joint helper chain used by the working `bone-calendar.html` test page before #020 / #022 / #118 / #040 / #024. The `.bf-calendar` element itself remains the exact three-attribute contract.
- Runtime `BoneCalendar 1.0.22` destroys body-owned #040 Task Type ColorPicker callers when the Calendar instance is destroyed and avoids needless forced reattachment on manager open/reset. Caller IDs are unique per attachment to prevent duplicate DOM IDs.
- S04/S17 now scope their assertions to the main Calendar grid/header instead of accidentally counting the nested Event date-picker Calendar. S40 validates schema structure rather than an exact Japanese prose fragment.
- Status remains Development until user localhost verification.


## v1.0.55 Minimal guide addition

- `sample/024/calendar/minimal.html` keeps the existing three-attribute `bf-calendar` live sample and adds the Calendar guide below it.
- The guide is embedded in the same HTML page and covers installation, HTML Functional Class initial `data-*` registration, Task Type / Task / Event CRUD, integrated #040 ColorPicker usage, and major HTML properties.
- Japanese / English switching is implemented without adding another JavaScript file.
- The distributable contract remains exactly one `bf-calendar.js` plus one `bf-calendar.css`.
- Runtime remains `BoneCalendar 1.0.22`; HTML Functional Class remains `1.0.15`.


## v1.0.86 Minimal screen / Calendar-owned guide correction

- v1.0.55 の `minimal.html` へガイド本文を埋め込む変更は不採用。Minimal は最小HTML画面の確認専用とする。
- `minimal.html` は `bf-calendar.css` 1個、`bf-calendar.js` 1個、`class="bf-calendar"` + `data-value` + `data-theme` + `data-icon-visual` のみで自動mountする。
- ガイドは Calendar Runtime が所有し、Calendar下部の「ガイド」ボタンからモーダルで開く。Minimal HTML本文へガイドセクションを追加しない。
- ガイドは日本語 / English、最小HTML、HTML Functional Class / `data-*` 初期登録・CRUD、#040 ColorPicker / #118 Transition、主要Propertyを含む。
- Runtime は `BoneCalendar 1.0.37`。HTML Functional Class は `1.0.15`。


## v1.0.58 blank-screen correction

- v1.0.58 is rejected: `create()` referenced `skipManagers` before its `const` declaration, causing a browser `ReferenceError` and leaving `minimal.html` blank.
- v1.0.58 / BoneCalendar 1.0.36 moves the declaration before first use and adds a regression test for declaration order.
- `minimal.html` remains one `bf-calendar.js` + one `bf-calendar.css` with the three-attribute `bf-calendar` host.

## v1.0.86 test-page layout isolation correction

- The #024 test page was inheriting generic `.bf-header` / `.bf-page` layout rules from dependency CSS, collapsing the title into a one-character-wide column.
- v1.0.86 scopes the test-page shell to `main[data-ui-id="UI-024"]` and explicitly resets header/page display while preserving the #017-style structure.
- BoneCalendar Runtime remains 1.0.34.


### 一括操作 — サンプル・ツールチップ・登録情報出力

各一括操作には「複数サンプルをセット」を用意する。押すと複数件の有効なJSON例を入力欄へ入れるだけで、まだ登録は行わない。各操作ボタンはtitleツールチップで「何を入力するか」「一括置換と追加/更新の違い」「削除時のID指定」を説明する。「登録情報を出力」は現在の taskTypes / tasks / taskDisplay054 / events / annotations / display054Settings を1つのJSONへ出力する。

- Package 1.0.86 / Runtime 1.0.34: selected-day Task cards resolve `Task.typeId -> Task Type.id` and apply the Task Type `backgroundColor/backgroundOpacity` and `textColor/textOpacity`; the Task Type icon is also used in the selected-day row.

## 勤務 [work] / 勤務種別
## 勤務種別管理画面の操作
タスク区分管理で必須区分 `work`（勤務）を選ぶと、勤務種別8種をテーブルで編集できます。デスクトップでは管理モーダルを広く使用し、`有効 / ID（固定） / 名称 / アイコン / 背景色 / 背景透過率 / 文字色 / 文字透過率` を横スクロールなしで確認できます。背景色と文字色は各行の色ボタンから正式 **#040 ColorPicker Caller** を開いて選択します。色コードをJSONへ直接入力して管理する方式ではありません。透過率は0～100です。`有効` をOFFにすると既存タスクは保持され、新規タスク登録時の勤務種別候補からだけ除外されます。固定IDは編集できません。

`work` は必須タスク区分で削除できません。名称・アイコン・背景色/透過率・文字色/透過率は変更できます。勤務タスクでは `workTypeId` を指定します。標準勤務種別は `normal`（通常勤務）、`paid-leave`（有給）、`holiday-work`（休日出勤）、`compensatory-leave`（代休）、`substitute-work`（振替出勤）、`substitute-holiday`（振替休日）、`absence`（欠勤）、`special-leave`（特別休暇）の8種です。各勤務種別は名称、アイコン、背景色/透過率、文字色/透過率、`enabled` を持ちます。`enabled:false` は過去データを削除せず、新規タスクの選択候補から除外します。

### v1.0.86 勤務種別テーブルの幅
勤務種別テーブルは勤務種別グループの左右2列をまたいで全幅を使用します。デスクトップでは各列に余白を確保し、色ボタンや透過率入力が重ならない状態で8列を同時表示します。画面幅が狭い場合だけ横スクロールへ切り替えます。


## v1.0.86 Minimal ZIP contract
- `BoneFlow_024_bf-calendar_Sample_v1.0.129.zip` is generated from the same formal `minimal.html` shown at `/boneflow/sample/024/calendar/minimal.html`.
- The ZIP contains `minimal.html`, `bf-calendar.js`, and `bf-calendar.css`; it does not substitute `bf-calendar.html` for the Minimal page.
- This keeps the browser Minimal sample and downloadable Minimal sample on one HTML contract.

## v1.0.86 Minimal offline detailed guide bundle
- `minimal.html` remains the four-data-attribute minimal runtime screen; the Calendar-owned `ガイド / Guide` button remains available from the rendered Calendar UI.
- `BoneFlow_024_bf-calendar_Sample_v1.0.129.zip` additionally contains `docs/024-Calendar.md`, `docs/DOC-0024-ja.md`, and `docs/DOC-0024-en.md` so the same detailed configuration guide can be consulted completely offline after download.
- The guide sources document settings, effects, HTML Functional Class data attributes, Task Type / Work Type, Task / Event, CSV/bulk operations, and Runtime Property usage. The ZIP guide is documentation only and does not add executable code to `minimal.html`.

## v1.0.86 Minimal / Redmine theme integration simulation
- `minimal.html` now renders an empty fixed-height (560px) target first.
- After `window.load`, the standalone `bf-calendar.js` appends a new `.bf-calendar` element with the four formal attributes (`data-value`, `data-theme`, `data-icon-visual`, `data-selected-day-visible`).
- The Functional Class `MutationObserver` detects the newly inserted element and mounts Calendar automatically. This reproduces the integration pattern where a Redmine theme adds Calendar after the original page DOM has already been displayed.
- No manual `BoneCalendar.create()` or `setTaskData()` call is used.


## 📖 Calendar 共通設定
Calendar下部の📖から Theme、タスク区分/タスク/イベント/🎌/📖管理ボタンの表示・非表示、Picker系の #118 Transition 種類・方向を設定します。#118設定はタスク区分画面から共通設定へ移動し、ColorPicker等のPicker系OPEN/CLOSEで共有します。

## v1.0.114 共通設定表示・ガイド表示・#118 Transition
- `data-show-settings-manager-button="true|false"`: 「共通設定を表示」を制御します。
- `data-show-guide-manager-button="true|false"`: 「ガイドを表示」を制御します。
- `data-picker-transition-effect` / `data-picker-transition-direction` / `data-picker-transition-speed` / `data-picker-respect-reduced-motion`: #040 ColorPicker Overlay の正式 #118 Transition を設定します。共通設定で変更した場合、既存 #040 Caller を再接続し、次回 OPEN/CLOSE から実 #118 ENTER/EXIT を使用します。
- Smoke / Validation は表示文言だけでなく、ColorPicker panel の `bf-transition` mount、#118 instance、ENTER/EXIT state を実確認します。#118 が動作しない場合は ALL PASS にしません。

## v1.0.118 選択日表示形式 / 可変高さ
- `selectionLayout` を正式Propertyとして追加する。値は `accordion` / `below-calendar`、default は `accordion`。
- `accordion` は従来どおりCalendar横のSelection領域にアコーディオン表示する。
- `below-calendar` は選択日要素そのものを Calendar本体（`.bone-calendar__calendar-main`）の直後へ独立した兄弟要素として移動し、内容量に応じて下方向へ自然に伸ばす。内部縦スクロールバーで内容を押し込まない。`accordion` へ戻すと同じ要素を再読込なしで Calendar本体内へ戻す。
- 「📖 Calendar 共通設定」に「選択日を表示」チェックと「選択日表示形式」を置き、表示 / 非表示と accordion / below-calendar を再読込なしで即時切替する。
- HTML Functional Class は `data-selection-layout="accordion|below-calendar"` を同じPropertyへ接続する。
- Task / Task Type / Event の一覧は固定 `max-height` を持たず、右側フォームの高さへstretchさせない。親Gridを `align-items:start` / `grid-auto-rows:max-content`、一覧自身を内容高さとして、項目末尾下に巨大な空白領域を残さない。Selectionも `max-height:none; overflow:visible` を維持する。
- 親コンテナが固定高さでも、`below-calendar` では横並びSelection領域へ押し込まず、Calendar下の独立枠として表示する。
- タスク区分ColorPickerの #118 Transition設定元は引き続きCalendar共通設定のみ。#040内部DOM/CSSをConsumer側から操作しない。
- Smoke / Validation は共通設定の即時切替、HTML class初期反映、可変高さ、#040 OPEN/CLOSE、実 #118 ENTER/EXIT を検証する。


### v1.0.118 USER localhost修正
- 既存Property「選択日を表示」は、タスク区分/タスク/イベント等の表示設定と同じProperty領域に保持する。Calendar共通設定へ重複追加しない。
- `selectionLayout=below-calendar` は Accordion 要素自体を移動せず、Calendar本体下に専用の独立リスト要素を生成/配置し、そのリストは固定高さ・内部縦スクロールを持たず内容量に応じて伸びる。
- Task Type / Task / Event の一覧項目は、Redmine互換用の汎用 `button height:24px` の影響を受けず、折り返した全テキストを項目枠内に収める。各一覧も項目内容の合計高さに追従する。

### v1.0.121 選択日表示コントロール
- 既存Property `selectedDayVisible`（「選択日を表示」）を維持し、Calendar共通設定の表示/非表示欄からも同じPropertyをON/OFFできる。新しい重複Propertyは作らない。
- `selectionLayout` は別設定で、`accordion`（デフォルト）/ `below-calendar`（Calendar本体の下に独立した可変高さリスト）を切り替える。
- v1.0.118で修正済みのTask Type / Task / Event一覧項目レイアウトは変更しない。


### v1.0.121 選択日表示修正
- Calendar共通設定の「選択日 / 表示設定」に「選択日を表示」と「選択日表示形式」を同じ場所で表示する。
- `selectionLayout=accordion` は従来のCalendar内アコーディオン（既定）。
- `selectionLayout=below-calendar` は固定 `.bone-calendar` の**外側**、直後の兄弟要素 `.bone-calendar__selected-day-below` に選択日リストを表示する。
- 下部リストは固定高さ・内部縦スクロールを持たず、内容量に応じて下方向へ自然に伸びる。
- `accordion ⇄ below-calendar` は再読込なしで即時切替する。

- Package 1.0.129: `neon` Theme must not apply CSS `filter` to the `.bone-calendar` root because Calendar manager modals are `position: fixed`; neon emphasis uses `box-shadow` so managers stay viewport-fixed.

## Package 1.0.133 — fixed-frame below-calendar
`below-calendar` は Calendar の固定枠の内側に出しません。Runtime child の親を Calendar host とし、その host の外側（host の直後）へ選択日リストを独立要素として配置します。Calendar host の `height` / `max-height` / `overflow` は変更しません。別要素は内容量に応じて自然に伸びます。

## Package 1.0.134 actual Calendar anchor correction

- `below-calendar` は固定Hostの下端ではなく、実際の `.bone-calendar` の描画矩形を基準に直下表示します。
- 外部Selectionは `document.body` へ別DOMとしてPortalし、固定Hostの `height` / `max-height` / `overflow` は変更しません。
- Runtime: `BoneCalendar 1.0.38`。
- v1.0.133 の「固定Hostの後ろへ配置」は不採用です。



Package 1.0.135 task-bulk selected-day refresh isolation
- Runtime: BoneCalendar 1.0.38.
- #024 Task bulk replace / add-update / delete / clear updates data without refreshing the selected-day presentation during the bulk action.
- A pending selected-day refresh is applied once when Task Manager closes.
- below-calendar actual-Calendar anchoring from Package 1.0.134 is unchanged.
- Work Type color/name/60% opacity behavior is unchanged.
- USER localhost verification is required before Completed/Frozen.


Package 1.0.136 below-calendar manager isolation
- Runtime: BoneCalendar 1.0.39.
- below-calendar remains a separate body portal anchored to the actual Calendar bottom; fixed host height/overflow are not modified.
- While any #024 manager dialog is open, external selected-day portals are temporarily suppressed so they cannot float above the modal.
- Task-bulk pending selected-day refresh is flushed before the Task Manager portal is restored.
- ResizeObserver repositions the external block when the actual Calendar box changes size.
- USER localhost confirmation is required before Completed / Frozen.

Package 1.0.137 manager list visual-color synchronization
- Runtime: BoneCalendar 1.0.40.
- Task Type manager list rows use each Task Type background/text color and configured opacity.
- Task manager Task Type / Work Type select options and selected value use configured visual colors.
- Task list rows use effective Work Type visual for work tasks and Task Type visual otherwise.
Package 1.0.139 Smoke QA portal contract alignment
- Runtime remains BoneCalendar 1.0.40.
- S53/S54/S55 now validate the current below-calendar body Portal contract instead of the retired sibling placement.
- No Calendar Runtime behavior change in this package.


## #024 Calendar タスクグループ (Package 1.0.153)

タスクグループは **#024 BoneCalendar Runtime 内の正式データ** (`taskGroups`) です。別のRuntime、独立したTaskGroup JS/CSS、独自Timelineを使いません。`taskGroups` はテンプレートであり、適用時に限って既存の `tasks` に変換します。

デフォルト例 `regular-work / 通常勤務`: `weekdays:[1,2,3,4,5]` (月～金)、`items` は 勤務 `09:00`–`18:00` (`typeId:work, workTypeId:normal`) と休憩時間 `12:00`–`13:00` (`typeId:break`) の2件。`weekdays` は日曜0～土曜6。

API: `getTaskGroups`, `setTaskGroups`, `getTaskGroup`, `addTaskGroup`, `updateTaskGroup`, `removeTaskGroup`, `validateTaskGroups`, `applyTaskGroup`, `openTaskGroupManager`。Functional Class: `data-task-groups` / `data-show-task-group-manager-button`、`BoneCalendarFunctionalClass.getTaskGroups/setTaskGroups/applyTaskGroup` など。

`applyTaskGroup(calendar, 'regular-work', {date:'2026-09-14', scope:'week'})` は該当週の適用曜日へタスク登録します。`scope:'day'` では指定日のみ。IDは `tg-{groupId}-{YYYYMMDD}-{itemNo}` で同一グループの再適用は追加重複しません。既存のその他タスクを削除しません。

Calendar下部のタスクグループチップを、**正式な** `BoneDisplayTimeline` Runtime の `.bone-display-timeline` へドラッグすると、同じ `applyTaskGroup` を通って週のタスクを登録し、正式 `BoneDisplayTimeline.setItems` でドロップ先の日付分をタイムバーに反映します。タイムバー範囲外の時刻は事前にエラーにし、Calendarのタスクも変更しません。Timeline側は #054 Runtime をインストールしておく必要があります。#054のRuntimeや内部DOMは変更しません。CalendarとTimelineは同一ページ内が前提です。`data-date` / `data-timeline-date` / `data-calendar-date` の日付があるドロップ先はそれを優先し、ない場合はCalendar選択日を使用します。マルチTimelineの自動一斉再描画は行わず、該当日の別タイムバーは既存Consumerが `bone-calendar:tasks-change` を受けて同期します。

HTML属性のタスクグループデータ例:

```html
<div class="bf-calendar" data-value="2026-09-14" data-task-groups='[{"id":"regular-work","label":"通常勤務","weekdays":[1,2,3,4,5],"items":[{"label":"勤務","start":"09:00","end":"18:00","typeId":"work","workTypeId":"normal"},{"label":"休憩時間","start":"12:00","end":"13:00","typeId":"break"}]}]'></div>
```

注意: 対象のタスク区分 (`work` と `break` 等) が存在すること。初期デフォルトタスク区分を変更したとき `break` が存在しない場合、初期通常勤務テンプレートは自動追加されません。ユーザーが明示した `taskGroups` は必ず検証します。

Package 1.0.153 / Runtime 1.0.50: Installer gracefully skips unrecognized #000 dependency tree and cumulative DOM, keeps #000 unchanged when incompatible, preserves all existing group CRUD; selected group highlighted. USER localhost not yet reverified.


#024 v1.0.153 — Calendar本体のタスクグループ統合 (2026-10-19)
- 追加先: bf-calendar の Calendar本体。専用タスクグループRuntime/独自カレンダー/独自JSONは追加しない。
- 選択日と同じ details/summary アコーディオンを実装。初期状態は開き、グループ数、名称、曜日、勤務・休憩の時間帯を表示。
- 通常カレンダーのグループ管理ボタンはアコーディオン内へ移動し、重複しない。
- グループ操作とグループ内タスク操作を分離。タスク行左端のチェックで選択し、編集・削除を行う。グループ更新で確定。
- タイムバーの横・縦切替は Calendar から正式 #054 BoneDisplayTimeline.setOptions({orientation}) に委譲。#054 Runtime が存在しない画面では切替できたと装わず案内を表示。
- 正式 sample/024/calendar/minimal.html も bf-calendar HTML Class経由で表示する。従来の外部#054週報サンプルは改変しない。
- Chromium direct-HTML-Class/Runtime/CSS browser test: 0 JS errors、accordion開閉/checkbox/グループ追加更新削除 PASS。
- Node regression: 23 files / 273 PASS lines; JS syntax 26 files PASS。
- MANIFEST/SHA256: ZIP作成前後照合。Windows Installer・ユーザーlocalhostは未実施。

## Package 1.0.157 / Runtime 1.0.51 — vertical payroll rows + foreground managers

#024 vertical week/month view retains each 168px date column, adds four labelled rows (開始時間 / 終了時間 / 休憩時間 / 勤務時間) above the formal #054 track, with fixed 112px sticky label column, and uses #048 cell renderers without altering #048/#054. Only the actual #054 row keeps the 672px vertical time axis. Drag target dataset belongs to that timebar row. #024 manager overlays move to document.body when opened, restoring the original Calendar parent when closed, so task/Task Type management stays in front of the timeline. Runtime and standalone must be tested on user Windows localhost.

## 1.0.158 / Runtime 1.0.52 — Work-type totals and #054 refresh

#024 owns the week/month report work-type breakdown under a native expandable section: for all currently configured workTypes, display per-type distinct days, registered scheduled time, gross hours, break overlap and net actual hours. The actual-labor types are normal, holiday-work, substitute-work. Leave, compensatory leave, substitute holiday, special leave and absence are counted as subtype days and registered time but never as actual worked hours. Start/end/label/type edits through #024 manager or public API must refresh formal #048 Table and #054 bars and recalculate weekly/monthly totals immediately. Date/times are measured from #024 task records only; no parallel store or changes to frozen #054/#048. Date range is 7 days for week or actual days for month. Windows installer not executed in development container.

## v1.0.162 / BoneCalendar 1.0.55 — #054 reverse sync and scheduled-workday hours

Official #054 edit event `bone-display-timeline:change` (drag, resize-start, resize-end, api-move, api-resize) on each #048 renderer cell is committed through `BoneCalendar.updateTask()` by exact taskId and cell date, triggering the existing #024 tasks-change auto-save. Renderer `setItems` events are ignored to avoid loops. A public `standardWorkdayMinutes` option (default 480 minutes, range 60–1440, 15 minute step) controls leave/absence day equivalents in work-type totals; actual work types continue counting distinct attendance dates. Six hours of paid leave at 480 minutes/day = 0.75日. The setting is editable via #024 common settings or the formal report toolbar, and is automatically stored under Calendar Standard's `calendarSettings` by the existing DB adapter. No #048/#054/#125 changes.

## v1.0.162 — 勤務種別・休暇の日数換算と休憩控除

週・月の勤務種別合計は、各種別の開始～終了を重複排除して登録時間を計算した後、同じ日付の休憩タスクとの重複時間のみ控除します。登録時間9時間・休憩1時間・所定8時間の有給は 8/8=1.00日です。登録6時間に休憩1時間が重なれば 5/8=0.625日（画面小数2桁で0.63日）です。無関係な時間帯の休憩は控除しません。

帳票では登録時間、休憩時間、日数換算時間をすべて表示します。休暇・欠勤の時間は実勤務時間へ加算しません。通常勤務などの物理勤務実績は、従来どおり勤務日数と実勤務時間を計上します。



## #024 Calendar v1.0.163: マスター／タイムバー／収支明細

- クライアント・チケットは、#024の共通設定 `clientMaster.clients` と `clientMaster.tickets` に保存します。新しい独立DBは作成せず、既存 `BoneCalendarDB` 経由でSQLiteへ保存／復元します。
- タスク管理画面の「クライアント・チケットの登録／編集／削除」からマスターを操作し、タスクでは登録済みクライアントID・チケットNoから選択します。旧データの未登録参照は、移行前に消失させずに表示します。
- 使用中のクライアント／チケットの削除はエラーとし、ID変更時には既存タスクの参照を一緒に更新します。
- タスクの `financeEntries[]` は `{ entryId,kind:'income'|'expense',amount,account,subAccount,memo }`。金額は円、小数2桁までです。収入・支出を混合した複数明細に対応します。ここでは実際の請求・決済・Redmine API通信は行いません。
- #054 表示範囲の開始・終了時刻は、正式週報の上部で変更できます。タスク個別の開始／終了時刻とは別設定で、既存 `display054Settings.startTime` / `endTime` に保存されます。
- `bf-calendar` 正式HTML Functional Classの既存APIを維持し、同一 #024 Runtime へマスターCRUDを追加しました。
- オフライン動作。CDN・外部連携・URL query/hash付きJS/CSS参照を追加しません。既存#048・#054・#125・#021 Runtimeは変更しません。
- Windows PowerShell 5.1 Installerはこの実行環境では動作未検証です。localhost QA未実施のためCompleted/Frozenではありません。

## #024 v1.0.174 — 有給残数・使用者／クライアントマスター

- 有給タスク (`typeId=work`, `workTypeId=paid-leave`) は、同日の正式な休憩タスクと重複する時間を差し引き、所定勤務時間で除して取得日数を算出する。取得日は実際の勤務日数・実勤務時間には合算しない。
- 週／月／提出用レポートには「有給取得（期間）」を独立表示する。
- `paidLeaveOpeningDays` は残有給の初期日数（未設定 `null`）。`paidLeaveBaselineDate` は控除開始日（未設定は登録済み全期間）。残有給 = 初期日数 − 基準日以降の有給取得日数。未設定時は残数を「未設定」と表示し、負の残数を勝手に確定しない。所定勤務時間は既存設定を使う。
- `clientMaster.clients[]` に任意の `idNo` を追加。既存 `id` は参照キーとして引き続き維持する。IDNoは空欄可、入力時は重複不可。既存レコードは読み込み時に空文字を補完する。
- `userMaster` は `{activeUserId,users:[{id,name,tel,email}]}`。レポートの「使用者マスター」から登録・更新・削除・A4表示対象の選択が可能。選択した使用者の名前をA4表題へ表示し、タスク本体に使用者割り当てを勝手に追加しない。
- データは既存 `BoneCalendar.getOptions()` / `setOptions()` と `calendarSettings` のSQLiteアダプターで保存・読込。既存SQLiteスキーマに別テーブルは追加しない。
- #048 Table, #054 Display Timeline, #125 は変更対象外。

**Package 1.0.174 / Runtime 1.0.66 / HTML Functional Class 1.0.17**。ステータスはCandidate、ユーザーlocalhost実検証までは完了扱いしない。
