Changes in version 0.3.1 (2026-08-19) - Bugfix (CRAN policy compliance): gui_render_report() could attempt to write knitr's intermediate .knit.md file into the installed package library directory (the default location rmarkdown::render() uses for intermediate files, based on the input template's own location), rather than into a writable temporary directory. This is invisible on most systems since users typically have write access to their own package library, but violates CRAN policy against writing outside tempdir(), and fails outright on systems where the library is mounted read-only (as CRAN's Debian check systems now do). Fixed by explicitly setting intermediates_dir and knit_root_dir to a session-specific temporary directory; the function's actual output file location (supplied by the caller, e.g. Shiny's own temp path during a download, or a user-chosen path) is unaffected by this change. Verified by reproducing the exact failure as a non-root user against a read-only-permissioned package library, then confirming the fix resolves it under the same condition. Changes in version 0.3.0 (2026-07-30) - New TGA Analysis tab, wrapping biocharkit's new TGA module (requires biocharkit >= 0.3.0): - Curve analysis: upload a full TGA curve, get a smoothed DTG curve with auto-detected decomposition peaks (matched against typical moisture/hemicellulose/cellulose/lignin temperature ranges), a proximate analysis (moisture/VM/ash/fixed carbon) read straight off the curve at adjustable temperature breakpoints, a TG/DTG plot, and CSV/600 dpi TIFF downloads. - Batch mode (same checkbox pattern as the Isotherms/Kinetics tabs): run the proximate analysis separately per sample ID across a long-format multi-sample data frame. - Kissinger kinetics sub-panel: upload a small heating-rate/peak- temperature table (one row per heating rate) and fit non-isothermal activation energy and pre-exponential factor. - New logic functions gui_tga_curve(), gui_tga_stages(), gui_tga_stages_batch(), gui_tga_kissinger() in R/logic.R, following the same column-mapping/validation pattern as the rest of the app. - Combined session report gained matching "TGA Analysis" and "TGA — Kissinger Kinetics" sections. Changes in version 0.2.0 - Isotherms tab: added Temkin, Dubinin-Radushkevich, and Sips models alongside Langmuir/Freundlich; added batch mode (fit every group in a sample-ID column separately, one row of results per group). - Kinetics tab: added Elovich and intraparticle diffusion models alongside pseudo-first/second-order; added batch mode. - New Thermodynamics tab (van't Hoff analysis). - New BET Surface Area tab. - New Proximate / Ultimate Analysis tab. - FTIR tab: added optional baseline correction (linear or rolling-minimum) and one-click automatic peak detection. - XRD tab: added an option to deconvolve a full 2theta/intensity pattern into crystalline peaks and a crystallinity index, instead of requiring pre-computed peak areas. - Results tables now use DT (sortable, searchable, paginated) instead of static tables. - New combined session report: every analysis run in the session is accumulated and downloadable as a single HTML report from the Home tab. - Internal: DT, grDevices, and rmarkdown usage moved into real, independently-tested R/ functions (gui_datatable(), gui_snapshot_png(), gui_render_report()) rather than being used only inside the Shiny app script. - Fixed an upstream bug in biocharkit::find_ftir_peaks() (see that package's NEWS) that affected the new automatic peak detection feature. Changes in version 0.1.0 - Initial release. - run_biocharkit_gui() launches a local Shiny app wrapping the biocharkit package. - Tabs: Sample ID Parser, Adsorption Capacity, Isotherms, Kinetics, FTIR (functional-group density and peak assignment), XRD Crystallinity, Correlation Matrix. - Excel import via gui_read_excel() / gui_list_sheets(), with interactive column mapping (no coding required) for every analysis. - Results downloadable as CSV; isotherm/kinetics/FTIR-spectrum plots downloadable as 600 dpi TIFF.