ddcore 0.28
0.28.3 — 2026-10-17
Fixed
- A number card whose value is a sentence no longer grows into a tall card. A
formattedvalue longer than 16 characters, such as226 granted · 885 denied · 3170 pending, is now shown at 15px instead of 22px. Plain numbers and amounts keep the large size.
0.28.2 — 2026-10-17
Fixed
- Chart X-axis labels no longer overlap. In a workspace or report chart with many points, such as 30 daily
dd/mmlabels, every label used to be drawn and they ran into each other. The chart now shows one label every few points, depending on how much room the longest label needs, and always keeps the last point's label. Every bar or point still shows its full label in the tooltip.
0.28.1 — 2026-10-16
Opens the 0.28 series. Nothing breaks: a site pinned to <0.28.0 only widens its ddcore range in ddcore.json (and its Docker image tag) to take it.
Added
ddcore.ai: the site's language model from server code. The provider is an OpenAI-compatible Responses API. The key comes fromDDCORE_AI_API_KEY. The models and the address come fromaiin ddcore.json (model,transcriptionModel,baseUrl,reasoningEffort,timeoutSeconds), or fromDDCORE_AI_*; the defaults aregpt-6-lunaandgpt-transcribe.ddcore.ai.respond({ instructions, input, tools?, schema?, … })returnstext,calls,jsonandusage, plusoutputfor a tool loop to replay untouched, encrypted reasoning included.ddcore.ai.transcribe(base64, { filename, language? })turns an audio into text.ddcore.ai.image(base64, type)makes an image part for the input.- Calls retry a 429, a 5xx or a dropped connection within their timeout. Errors are typed, and the prompt is never logged.
- Inside
ddcore test, every call goes to the newddcore.test.fakeAi({ respond, transcribe }), which receives the exact body a real call would send. A test without it throws instead of spending tokens.
See
docs/agent/ai.md.Feedback: Fill in with AI, and several audio notes.
- The dialog now shows the attachments right after the type. Record audio sits inside that card, and records as many notes as fit in the 10 files (
voice-note-1.webm,-2…). - On a site whose AI is on, Fill in with AI transcribes the notes and gives the model the transcripts, the screenshots, what was typed, the page, the context the user agreed to send, and the site's apps and current DocType. It fills in the title, the description and the type's fields, which the user reviews (and can undo) before sending.
- The new
POST /api/feedback/assistwrites nothing and allows 10 requests per user per hour. The boot flag issite.feedbackAssist, andfeedback.assist(DDCORE_FEEDBACK_ASSIST) turns it off. - The transcripts are saved on the new read-only field
Feedback.transcript, and they go in the mail too.
See
docs/agent/feedback.md.- The dialog now shows the attachments right after the type. Record audio sits inside that card, and records as many notes as fit in the 10 files (