# 1. Responsibility

#024 Calendar owns date selection, month navigation, Annotation display, and the management entry points for Task Types, Tasks, Events, and Holidays. It does not own `commit / OUT / Delivery / WAIT / FIFO / BLOCKED`.

Runtime: **BoneCalendar 1.0.44**. HTML Functional Class: **`bf-calendar` / BoneCalendarFunctionalClass 1.0.15**.

# 2. Important boundaries

- Navigation cannot move before the month containing `min` or after the month containing `max`.
- `step` controls date-cell selectability.
- A Task references a Task Type by Runtime field **`typeId`**.
- Task Types and Tasks are separate data sets so storage can later be replaced by DB/API adapters.
- Events manage `customHoliday` and `anniversary`.
- National holidays are supplied through `annotations` with kind `holiday`.
- The common Calendar icon size applies to 🎌 / 🏖️ / ⭐ / 📑.
- There is no duplicate per-Task-Type “show icon on Calendar” setting.


# 2.1 Language / Redmine integration

`data-locale="auto"` (or no explicit locale) resolves the page `<html lang>` before the browser locale. Therefore Redmine English (`<html lang="en">`) takes priority even when the OS/browser language is Japanese.

Priority: explicit `data-locale` -> page `<html lang>` -> `navigator.language` -> `Intl` -> `en-US`. Use `data-locale="en"` or `data-locale="ja"` to force a language.

```html
<div class="bf-calendar" data-locale="auto"></div>
<div class="bf-calendar" data-locale="en"></div>
<div class="bf-calendar" data-locale="ja"></div>
```

# 3. Runtime-owned Property Schema

`BoneCalendar.getPropertySchema()` is the canonical schema.

Management UI properties include `showTaskTypeManagerButton`, `showTaskManagerButton`, `showEventManagerButton`, `showAnnotationManagerButton`, `selectedDayVisible`, `calendarTaskIcon`, `calendarTaskIconPosition`, and `calendarIconSizePx`.

```javascript
const schema = BoneCalendar.getPropertySchema();
const defaults = BoneCalendar.getPropertyDefaults();
```

# 4. Public API

```javascript
BoneCalendar.setTaskTypes(calendar, taskTypes);
BoneCalendar.getTaskTypes(calendar);
BoneCalendar.setTasks(calendar, tasks);
BoneCalendar.getTasks(calendar);
BoneCalendar.setTaskData(calendar, { taskTypes, tasks });
BoneCalendar.getTaskData(calendar);
BoneCalendar.validateTaskTypes(taskTypes);
BoneCalendar.validateTasks(tasks, taskTypes);
BoneCalendar.setEvents(calendar, events);
BoneCalendar.getEvents(calendar);
BoneCalendar.validateEvents(events);
BoneCalendar.setAnnotations(calendar, annotations);
BoneCalendar.getAnnotations(calendar);
BoneCalendar.validateAnnotations(annotations);
BoneCalendar.openTaskTypeManager(calendar);
BoneCalendar.openTaskManager(calendar);
BoneCalendar.openEventManager(calendar);
BoneCalendar.openAnnotationManager(calendar);
```

# 5. Minimal JavaScript

```html
<div id="calendar-host"></div>
<script>
const calendar = BoneCalendar.create({ value:"2026-09-20", selectedDayVisible:true });
document.getElementById("calendar-host").appendChild(calendar);
</script>
```

# 6. HTML Functional Class

The minimal HTML contract is direct: `bf-calendar` mounts itself. Do not add a sample-only controller, manual `BoneCalendar.create()`, or helper variables to make the example appear to work.

Current Functional Class: `BoneCalendarFunctionalClass 1.0.15`; current Runtime: `BoneCalendar 1.0.44`.

```html
<div class="bf-calendar"
     data-value="2026-08-13"
     data-theme="dark"
     data-icon-visual="emoji"></div>
```

```javascript
const host = document.querySelector(".bf-calendar");
const calendar = BoneCalendarFunctionalClass.getInstance(host);
```

## 6.1 Task Type — HTML Class contract / usage / sample

```json
[{"id":"meeting","label":"Meeting","kind":"meeting","icon":"●","backgroundColor":"#2563EB","backgroundOpacity":100,"textColor":"#FFFFFF","textOpacity":100}]
```

```html
<div class="bf-calendar" data-task-types='[{"id":"meeting","label":"Meeting","kind":"meeting","icon":"●","backgroundColor":"#2563EB","backgroundOpacity":100,"textColor":"#FFFFFF","textOpacity":100}]'></div>
```

```javascript
BoneCalendar.setTaskTypes(calendar, taskTypesFromApi);
BoneCalendar.openTaskTypeManager(calendar);
```

Use `data-show-task-type-manager-button="false"` or `showTaskTypeManagerButton` to hide the button.

## 6.2 Task — HTML Class contract / usage / sample

`start`, `end`, and `typeId` are required.

```json
[{"taskId":"task-001","date":"2026-09-20","start":"10:00","end":"11:00","typeId":"meeting","label":"Weekly meeting","content":"Review progress","memo":"Share materials first","showInRemarks":true}]
```

```html
<div class="bf-calendar" data-tasks='[{"taskId":"task-001","date":"2026-09-20","start":"10:00","end":"11:00","typeId":"meeting","label":"Weekly meeting"}]'></div>
```

```javascript
BoneCalendar.setTaskData(calendar, { taskTypes: taskTypesFromApi, tasks: tasksFromApi });
BoneCalendar.openTaskManager(calendar);
```

Task tooltip format: `start~end task name`, e.g. `10:00~11:00 Weekly meeting`.

## 6.3 Event — HTML Class contract / usage / sample

Events use a date (`YYYY-MM-DD`), not a date-time. Kinds are `customHoliday` and `anniversary`.

```json
[{"eventId":"event-001","date":"2026-09-23","kind":"anniversary","emoji":"⭐","label":"Company anniversary"}]
```

```html
<div class="bf-calendar" data-events='[{"eventId":"event-001","date":"2026-09-23","kind":"anniversary","emoji":"⭐","label":"Company anniversary"}]'></div>
```

```javascript
BoneCalendar.setEvents(calendar, eventsFromApi);
BoneCalendar.openEventManager(calendar);
```

The Event manager uses the #024 normal Calendar through the 📅 button for date selection.

## 6.4 Holiday — HTML Class contract / usage / sample

National holidays are supplied as `annotations`, not Events.

```json
{"2026-09-21":{"items":[{"kind":"holiday","label":"Respect for the Aged Day","icon":true,"emoji":"🎌"}]}}
```

```html
<div class="bf-calendar" data-annotations='{"2026-09-21":{"items":[{"kind":"holiday","label":"Respect for the Aged Day","icon":true,"emoji":"🎌"}]}}'></div>
```

```javascript
BoneCalendar.setAnnotations(calendar, holidayAnnotationsFromApi);
BoneCalendar.openAnnotationManager(calendar);
```

Official Cabinet Office holiday page: https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html


## 6.5 Sample folder

The installer places a runnable HTML Functional Class sample at:

- `/boneflow/sample/024/calendar/bf-calendar.html`
- `/boneflow/sample/024/calendar/bf-calendar.js`
- `/boneflow/sample/024/calendar/bf-calendar.css`
- `/boneflow/sample/024/calendar/index.html`

Open `http://localhost/boneflow/sample/024/calendar/bf-calendar.html`. The sample mounts a real `bf-calendar` and supplies Task Type, Task, Event, and Holiday Annotation data through the Runtime API.

The runnable Sample loads exactly one local stylesheet (`./bf-calendar.css`) and one local script (`./bf-calendar.js`). Those two files embed the formal dependency chain used by #024 plus the BoneCalendar Runtime and HTML Functional Class in load order. The download ZIP is self-contained with exactly `bf-calendar.html / bf-calendar.css / bf-calendar.js` and has no `../../../css/bone-calendar.css` style dependency.


# 7. Annotation

Formal kinds are `holiday / customHoliday / anniversary / task`. Selected-day details use the corresponding emoji. Task `content` is displayed as content and `memo` is displayed as a tooltip. `href` is allowed only for `task`.

# 8. #022 Hover Border Effect

Date-cell hover delegates to #022 BoneHoverBorderEffect 1.0.12. Formal effects: `normal / neon / spin / blink / dash / corner / chase / double / wave`. `cross` is not used.

# 9. #040 ColorPicker / #118 Transition

Color selection uses #040 ColorPicker Caller API. #118 Transition is used only for #040 Overlay OPEN/CLOSE.

# 10. Connection Image

#024 owns Calendar UI/date selection/Annotation/Task Type/Task/Event presentation and management entry points. It does not own or overwrite #048 Table or #054 Display Timeline runtime files.

# 11. Smoke / Validation / Completion

Do not mark Completed / Specification Frozen until user localhost verification succeeds.

Test URL: `http://localhost/boneflow/test/bone-calendar.html`


The standalone `bf-calendar.js` contains only the BoneCalendar Runtime and HTML Functional Class. It contains no Sample controller and the HTML uses `data-*` directly.

## 6.6 Theme / selected-day correction (Package 1.0.37)

- `inheritParent=true` means 100% parent layout adhesion. It does not replace Calendar Theme background/text/border colors with parent colors.
- Light Theme therefore remains light while parent adhesion is enabled.
- The selected-day panel has no internal scrollbar; it expands its content.
- `selectedDayVisible` remains the Runtime-owned visibility property and is exposed by the standalone Sample as an immediate checkbox.
- Historical note: Package 1.0.37 used BoneCalendar 1.0.16. The current #024 Runtime is 1.0.34; #054 remains a separate consumer and is not overwritten by this package.

## v1.0.41 Calendar Preview / Standalone parity correction
- Selected-day task primary text is `start~end task name`, e.g. `10:00~11:00 定例会議`.
- The selected-day panel has no internal scrollbar. In standalone sizing, configured height is treated as the minimum and the calendar may expand vertically when selected-day details are visible.
- Standalone Sample Task Type / Task / Event / Annotation data mirrors `/test/bone-calendar.html`.
- Browser smoke verifies the standalone three-file set: `bf-calendar.html`, `bf-calendar.css`, `bf-calendar.js`.


## 7. v1.0.42 External data operations in the real manager screens

The runtime manager modals, not a separate test-only panel, own practical external-data operations.

- Task Type master: single CRUD plus load current / replace all / bulk upsert / bulk delete IDs / clear all. Color, text color, icon and `showCalendarIcon` belong to the master.
- Task: views for Selected Day / All / Month / Week. The form visually separates #024 Calendar task core data from #054 Display Timeline display data.
- #024 task core: `taskId/date/start/end/typeId/label/content/memo/showInRemarks`.
- #054 display data: `displayType/commentOffsetX/commentOffsetY/commentWidth`, linked by `taskId`. Dedicated APIs are `getTaskDisplay054`, `getTasksDisplay054`, `setTaskDisplay054`, and `setTasksDisplay054`.
- Event: single CRUD plus bulk replace/upsert/delete/clear.
- Annotation/Holiday CSV: load current, replace, merge/update dates, delete specified dates, clear all, and Cabinet Office CSV conversion.
- `bf-calendar` reads `data-task-types`, `data-tasks`, `data-events`, and `data-annotations` during the initial mount.
- Calendar `height` is a minimum height. Content is allowed to grow vertically; the selected-day panel must not crush the month grid.


## 8. v1.0.43 Preview boot cache protection
The test page refreshes both the #024 Runtime and the `bf-calendar` HTML Functional Class with `cache:no-store`. The direct HTML Functional Class contract is also tested separately without a manual `BoneCalendar.create()` call or sample-only data variables.

## 9. v1.0.45 Manager correction

- Month and week task views now expose explicit month/week keys.
- Task core fields are balanced with Start Time before End Time.
- #054 task display is optional. When enabled, its display values are stored in a separate taskId-keyed store and never inside the formal #024 Task object.
- #054 common settings are kept in a separate optional box.
- Task Type is the visual master; background/text/effect colors use the formal #040 ColorPicker caller.


## 10. v1.0.46 ColorPicker / #118 Transition

Task Type remains the color/icon master and no longer serializes the temporary task-type effect fields. Background/text colors use the formal #040 ColorPicker Caller only. A separate optional Caller-display box configures #118 Transition type and direction for the #040 Overlay OPEN/CLOSE; it is not Task Type master data. Native color fallback and Consumer-owned open handlers are prohibited.


## 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 Task Type ColorPicker correction

Task Type background/text colors use the formal #040 ColorPicker Caller. The body-owned #040 overlay must remain visible above the Calendar manager modal, and Smoke verifies actual trigger-click opening.


### HTML Functional Class data CRUD

`bf-calendar` can register initial data through `data-task-types`, `data-tasks`, and `data-events`. After mount, `BoneCalendarFunctionalClass` provides `add/update/remove` APIs for Task Types, Tasks, and Events and synchronizes the resulting arrays back to the corresponding `data-*` attributes.

The Minimal page loads the same formal dependency chain as the working #024 test page: #001 Bone Core helper runtimes → BoneCore → #002 Bone Joint helper runtimes → BoneJoint → #020 Label → #022 Hover Border Effect → #118 Transition Runtime → #118 `bf-transition` Functional Class → #040 ColorPicker → #024 Calendar. The Calendar element itself remains the same three-attribute minimal contract.

# 12. Practical effects guide

This section states what visibly changes when a setting is applied.

| Goal | HTML setting | Visible/behavioral effect |
|---|---|---|
| Show selected-day details | `data-selected-day-visible="true"` | Shows the selected date and its Task/Holiday/Event details below the Calendar. `false` hides only the detail area; date selection still works. Runtime default is `false`. |
| Show Tasks | `data-show-tasks="true"` | Enables Task presentation in Calendar/details. `false` hides Task presentation without deleting Task data. |
| Sunday first | `data-week-start="sunday"` | Sunday becomes the leftmost weekday. |
| Fit parent | `data-inherit-parent="true"` | Fits the parent content width and grows vertically as needed. |
| Task Type manager button | `data-show-task-type-manager-button="true"` | Shows the Task Type manager button; hiding it does not delete data. |
| Task manager button | `data-show-task-manager-button="true"` | Shows the Task manager button; hiding it does not delete data. |
| Event manager button | `data-show-event-manager-button="true"` | Shows the Event manager button; hiding it does not delete data. |
| Holiday manager button | `data-show-annotation-manager-button="true"` | Shows the 🎌 Annotation/CSV manager button; hiding it does not delete data. |

Task Types can be initialized with zero Tasks. `data-task-types` is the master array; each Task `typeId` references a Task Type `id`. `setTaskTypes()` / `setTasks()` replace the full array, while `addTaskType()` / `updateTaskType()` and `addTask()` / `updateTask()` preserve unrelated records.

### CSV import/export and HTML Functional Class data

Bulk editors for task types, #024 tasks, events, and #054 display data provide CSV Export and CSV Import. CSV Export writes the currently registered records as UTF-8 BOM CSV. Therefore, use Sample Records -> Replace All -> CSV Export to obtain a CSV sample generated from real registered data. CSV Import expands the CSV into the bulk JSON editor first; review it, then choose Replace All or Add/Update. HTML `bf-calendar` can initialize multiple records with `data-task-types`, `data-tasks`, and `data-events`, and those registered records are also exportable to CSV.

- 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.

### Package 1.0.86 selected-day UI and colored Calendar task indicators
- Calendar date cells show one formal `📑` task indicator when one or more display-enabled tasks exist. Multiple tasks or Task Types do not create multiple Calendar indicators; position follows `calendarTaskIconPosition`.
- Multiple Task Types on the same date render separate indicators.
- With `selectedDayVisible=true`, selected-day details use an initially-open `details/summary` accordion. `false` hides the entire accordion.
- The redundant standalone selected-date line above the accordion is hidden; the date remains visible in the accordion summary.


### Work type table
The required Task Type `work` cannot be deleted. The eight standard work types are managed in a table with Enabled, fixed ID, label, icon, background color/opacity, and text color/opacity. Background and text colors use the formal **#040 ColorPicker Caller** on each row. On desktop the manager uses a wider panel so all columns are visible without horizontal scrolling. Disabling a work type preserves existing task data and removes it only from new-task choices.

### Package 1.0.86 Minimal — Redmine theme late-insertion simulation
`minimal.html` does not contain a `bf-calendar` host initially. It first displays an empty fixed-height (560px) container, then appends the `bf-calendar` element after `window.load`. The HTML Functional Class MutationObserver detects the inserted host and mounts Calendar automatically. This simulates a Redmine theme inserting Calendar after the original page has already rendered. No manual `BoneCalendar.create()` / `setTaskData()` call is used.


## 📖 Calendar common settings
Use 📖 in the Calendar footer to change Theme, manager-button visibility, and the common #118 Transition effect/direction used by Picker overlays. The Transition controls are moved out of the Task Type manager.

## v1.0.114 common settings visibility, guide visibility, and #118 Transition
- `data-show-settings-manager-button="true|false"` controls the Common Settings button.
- `data-show-guide-manager-button="true|false"` controls the Guide button.
- `data-picker-transition-effect` / `data-picker-transition-direction` / `data-picker-transition-speed` / `data-picker-respect-reduced-motion` configure the formal #118 Transition used by the #040 ColorPicker overlay. Changing the common setting reattaches existing #040 callers so the next OPEN/CLOSE uses the real #118 ENTER/EXIT path.
- Smoke / Validation verifies the ColorPicker panel `bf-transition` mount, #118 instance, and ENTER/EXIT state. A dead #118 must not report ALL PASS.


## v1.0.114 common settings -> Task Type #040 ColorPicker live wiring repair
- Task Type ColorPicker uses `Calendar Common Settings` as the single #118 configuration source; there is no separate Transition control in the Property UI.
- All formal #040 settings `transition / direction / speed / respectReducedMotion` are passed to every Task Type ColorPicker caller, including background/text callers in the eight work-type rows.
- `data-picker-transition-speed` and `data-picker-respect-reduced-motion` are added to the `bf-calendar` HTML Functional Class contract.
- #024 defaults `pickerRespectReducedMotion` to `false` so the selected common Transition visibly executes; enabling it lets #118 honor the OS reduced-motion preference.
- Smoke S49G now operates the Common Settings UI itself, verifies caller reattachment, the real Picker Panel / `bf-transition` instance, all four options, and ENTER/EXIT.

## v1.0.118 selection layout / variable height
- `selectionLayout` is a formal Runtime Property with `accordion` / `below-calendar`; default is `accordion`.
- `accordion` keeps the existing Selection accordion beside the Calendar.
- `below-calendar` creates a dedicated independent list block immediately after the Calendar main block, moves the selected-day list content into it, and lets the block grow naturally without an internal fixed-height scrollbar. Switching back to `accordion` moves the list content back into the Calendar accordion without reload.
- `Calendar Common Settings` exposes both `Show Selected Day` and Selection layout and applies visibility/layout changes immediately without a page reload.
- The HTML Functional Class maps `data-selection-layout="accordion|below-calendar"` to the same Runtime Property.
- Task, Task Type, and Event lists no longer use a fixed list `max-height`; they grow with their content. The Selection detail also remains `max-height:none; overflow:visible`.
- When an outer application container has a fixed height, `below-calendar` avoids forcing selected-day detail into the side Selection height and places it below the Calendar as its own block.
- Calendar Common Settings remains the single #118 Transition source for Task Type #040 ColorPicker callers. Consumer code must not manipulate #040 internal DOM/CSS.
- Smoke / Validation verifies live Common Settings switching, HTML-class initialization, variable-height behavior, #040 OPEN/CLOSE, and the real #118 ENTER/EXIT path.


### v1.0.118 USER localhost correction
- The existing Show Selected Day checkbox remains in the original Property area beside the task/manager visibility controls; Common Settings does not duplicate that visibility checkbox.
- `selectionLayout=below-calendar` uses a dedicated independent list element below Calendar main. It has no fixed content height or internal vertical scrollbar.
- Task Type, Task and Event list-item buttons explicitly override the generic 24px manager-button compatibility height, so wrapped content stays inside each item and each list follows its real content height.

### v1.0.121 selected-day controls
- The existing `selectedDayVisible` Property remains the single source of truth and is also exposed as “Show Selected Day” in Calendar Common Settings; no duplicate Property is introduced.
- `selectionLayout` remains separate: `accordion` (default) / `below-calendar` (a dedicated variable-height list below the Calendar body).
- The v1.0.118 Task Type / Task / Event list-item layout repair is preserved unchanged.


### v1.0.121 selected-day display correction
- Calendar Common Settings shows both Selected day visible and Selected day display format in the same Selected day / Display settings group.
- `selectionLayout=accordion` is the default in-Calendar accordion.
- `selectionLayout=below-calendar` renders the selected-day list as an **external sibling element immediately after** the fixed `.bone-calendar` root.
- The external list has natural content height with no internal vertical scrollbar and switches both ways without reload.

### Package 1.0.122 below-calendar visibility correction
- `below-calendar` remains an independent sibling immediately after `.bone-calendar`, grows with `height:auto` / `max-height:none` / `overflow:visible`, and owns a foreground stacking layer (`position:relative; z-index:2; isolation:isolate`).
- The Minimal verification host no longer uses a fixed-height/internal-scroll container.
- The ad-hoc Minimal selected-day control bar is removed; use the formal Property UI and Calendar Common Settings.

### Package 1.0.133 note
Work tasks prefer the selected `workTypeId` visual over the parent `work` Task Type visual. Standard background opacity is 60%. Changing Work Type in Task Manager auto-fills Task Name with that Work Type label. `below-calendar` is rendered as a separate element outside the Calendar root and its immediate host is made natural-flow/non-clipping while visible.

### Package 1.0.133 note
`below-calendar` mounts the selected-day list outside the fixed Calendar host, immediately after that host. Runtime does not rewrite the Calendar host height or overflow. The separate list grows naturally with its content.

## 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.


## Calendar task groups (Package 1.0.149)

Task groups are defined by #024 BoneCalendar itself (`taskGroups`, `data-task-groups`), not by a separate task-group Runtime or a duplicate Timeline. The built-in example, `regular-work`, includes a 09:00–18:00 work task and a 12:00–13:00 break for weekdays Monday through Friday. Use the Task Groups manager to edit it, or drag its group chip from the Calendar footer onto an installed formal #054 `BoneDisplayTimeline` to apply the template to the selected week and show that day's bars. `BoneCalendar.applyTaskGroup(root, id, {date,scope:'week'|'day',timeline})` is available. The operation preserves unrelated tasks; repeated applications use stable task IDs. The official #054 Runtime must be present, with a compatible time range. Other timeline instances rely on the existing consumer's `bone-calendar:tasks-change` listener for synchronization.

Package 1.0.149 / Runtime 1.0.46: 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.162 — 1日の所定勤務時間 / #054編集反映

所定勤務時間はCalendar共通設定および週報上部から設定（既定8時間、1～24時間の15分刻み）。勤務種別の休暇・欠勤の日数相当＝登録時間÷所定勤務時間。例：有給6時間÷所定8時間＝0.75日。通常勤務の日数は勤務実績日で集計し、休暇を実勤務に加算しない。#054バーを移動・伸縮した場合は操作終了時に#024タスクの時刻を更新し、#048週報と集計へ反映。既存SQLite/IndexedDB Adapterが保存するCalendar設定とタスクへ反映される。

### v1.0.162 Break-adjusted work-type day equivalents

For paid leave, compensatory leave, substitute holidays, absence and special leave, subtract only break intervals overlapping that specific record's time ranges before dividing by the configured standard workday minutes. A 09:00–18:00 paid-leave record with a 12:00–13:00 break produces 9h registered, 1h break, 8h credited, and 1.00 day at an 8h standard workday. Breaks outside the leave interval are not deducted. Work-type totals now distinguish registered time, breaks, and credited-equivalence time. Leave never counts as actual labor hours.


## #024 v1.0.163 client and ticket master / finance entries

Use the Task Manager's **Manage clients and tickets** dialog to add, edit, or delete registered Client IDs and Ticket Nos. Select registered values in the task form. Client/ticket master is stored within existing `clientMaster` settings in the official SQLite adapter. Existing references are preserved; deletion is rejected when referenced, and ID changes cascade to tasks.

Each task can include `financeEntries` with kind `income` or `expense`, nonnegative amount, account, subaccount and memo. Multiple ledger entries are supported. These are local records, not financial transactions or Redmine synchronizations. The #054 Timeline display time range can be edited separately from task start/end times above the Calendar report.

Windows PowerShell 5.1 and full local installation remain user-side QA; this is a Development Candidate.
