Open Source on GitHub

A django starter for internal apps that leverages the include admin theme and components.

v0.29.0 2 stars 1 forks 12 issues

Changelog

Unreleased

  • 7ea2c2c: release: v0.29.0 — calendar entry pages, in-place day selection, .ics subscriptions

v0.29.0

  • d75caf5: feat(calendar): own design for the entry and view pages; .ics subscriptions work
  • a5a5b05: feat(calendar): day selection keeps your place; picker matches the grid height
  • 552bfa4: release: v0.28.0 — calendar app, agent discovery, starter-site pages

v0.28.0

  • 57cf053: feat(website): Datasets & Calendars, Blogs & Newsletters, and Prompts pages
  • 08c2d8e: feat: agent discovery (AGENTS.md, Agent Skills, llms.txt) + the write-hook safety net
  • 8ea1200: docs(help): "Prompting a coding agent" — copy-ready prompts for the first tasks
  • bdba82e: feat(calendar): the Events calendar — the one a person types into
  • 5d89d35: feat(calendar): provider-backed calendars, cancelled/image, colour pins, work-week default
  • 1fd3e37: chore(deps): Pillow floor 13.0 (fifteen 12.x CVEs), refresh the lockfile
  • c052276: feat(scheduler): the day-range board on the jobs page
  • e918b2f: feat(blog,runbook): the day-range board on posts, issues and runbook documents
  • 82a7e62: feat(calendar): reusable components — template tags, partials, RangeBoardDisplay
  • 1854e3a: docs(changelog): record the ICS UID fix carried in 3188819
  • 3188819: feat(calendar): 30/60/90-day board, weekends toggle, grouped day column, views dropdown
  • db577f6: fix(api,mcp,openapi): advertise MultipleChoiceField as an array of choice keys
  • 65546d4: feat(calendar): calendar datasets, a merged month grid, saved views, events + ICS API
  • 74a6661: release: v0.27.1 — paged dataset browser index

v0.27.1

  • 17062e9: feat(datasets): page the browser index, 10 per page by default
  • 326ebeb: release: v0.27.0 — bundled datasets, a dataset browser, and row links

v0.27.0

  • b05c276: fix(activity,api,datasets): distinct() that wasn't, and the one staff table that didn't resize
  • a176b2d: feat(datasets): bundled framework datasets, a staff browser, and row links
  • c822faf: release: v0.26.0 — activity drilldowns, probing detection, resizable tables

v0.26.0

  • 4385d4e: feat(activity): user + resource drilldowns, time windows, and a probing warning area
  • b24babb: feat(crud): resizable table columns + type-derived default widths
  • a920b08: release: v0.25.2 — a per-app typing ratchet

v0.25.2

  • 52f03e0: chore(utils): remove two stray phone-import stubs
  • 012bebe: chore(types): finish the signatures and add a per-app typing ratchet
  • 4d1cf0d: release: v0.25.1 — enable_rss removed; feeds are a publishing surface

v0.25.1

  • 75c525f: feat(feeds)!: remove enable_rss; feeds are a publishing surface
  • d3e7915: release: v0.25.0 — blogs + newsletters, and SmallStack framed as a platform

v0.25.0

  • d2e391e: test(blog): three tests asserted the enumeration oracle; update the contract
  • f801700: fix(blog): close the enumeration leak for ALL tiers, not two of three
  • 5b990cb: fix(blog): close the remaining MINOR/NOTE findings from the test programme
  • 77bcac5: fix(blog): make the feature switches and --dry-run mean what they say
  • 8bfa8cc: fix(api,webhooks): serialize() must emit JSON primitives; isolate fan-out
  • bdfd74e: fix(api): walk the MRO when deciding whether a form takes user=
  • e373de3: fix(api): scope generated writes to the user, and stop 500ing on FileFields
  • dec05b9: docs(blog): help page for showing posts in a project's own pages
  • 5747377: fix(tests): restore the MCP tool registries after every test
  • 5b7d224: feat(search): a worked SearchBuilder example — blog posts render as article cards
  • 2f7a0ac: docs(site): frame SmallStack as a platform to build on, across the shipped pages
  • 93e5726: feat(blog): blogs + newsletters, with a writing studio and runbook publishing
  • 3103393: release: v0.24.0 — the skill index agents read is generated, and checked

v0.24.0

  • 1d9fee4: feat(skills): generate the skill index, and gate it in lint
  • 6b7d34b: release: v0.23.1 — readable --worker-id labels on the shipped workers

v0.23.1

  • 187be26: fix(tasks): give the shipped workers a readable --worker-id label
  • 6253541: release: v0.23.0 — background tasks survive a dead worker, and can retry

v0.23.0

  • da2fb8f: fix(smallstack): W001's remedy must be the command that works here
  • 3a9b743: docs: anchor the migration list to migration ids, not a version (N2)
  • d32b623: feat(tasks): tasks.W005 + the ordering contract for the log takeover (Finding B)
  • 8a7e78b: fix(tasks): widen worker_id, and validate the id on the path tests use (R5b, R5c)
  • 8d1dc65: fix(tasks): only a reaped child is evidence of a late completion (R5a)
  • a496f68: fix(tasks): the 0.13 signal filter must not lie by silence or by severity
  • 210a297: build: pin django-tasks-db to one minor (>=0.13,<0.14)
  • 480fa80: fix(tasks): run on django-tasks-db 0.13; stop safe_reap closing a caller's connection
  • 6d6f94c: Merge branch 'main' into feat/task-reliability
  • 44f01a9: release: v0.22.0 — Django security update, dependency refresh, mcp SDK removed

v0.22.0

  • 7ce5c56: chore(mcp): drop the mcp SDK dependency — the protocol is implemented in-tree
  • cb70e6f: chore(deps): refresh dependencies; Django 6.1.2 security update
  • 590274b: feat(datasets): advertise filter widgets for computed columns
  • a2e0229: release: v0.21.11 — computed-column filters apply instead of returning every row

v0.21.11

  • f6adad0: fix(datasets): apply filters to computed (annotated) columns
  • 74658a1: release: v0.21.10 — help count perf on Postgres + downstream-friendly tests

v0.21.10

  • 26032ce: fix(help): count articles without re-parsing the markdown corpus on Postgres
  • a66a971: test(smallstack): de-couple the W001 tests from the repo's own version
  • 87472c3: Merge branch 'main' into feat/task-reliability
  • 570e187: docs(tasks): backoff is the delay's ceiling; two scoping corrections (T4, T5, U5)
  • 2c59dc1: fix(tasks): a cancelled retry must not be retry input, or hide its resurrection (U4)
  • c0579d3: release: v0.21.9 — Postgres green across the board (verified on PG 16)

v0.21.9

  • 866b865: fix: three more Postgres-only faults, found by running the suite on PG 16
  • 0b11c0e: feat(smallstack): warn when the reported version is a stale build artifact (V1b)
  • 596ad3e: docs: UPGRADING states four migrations, its from-version, and the destructive one
  • 11d82b4: Merge branch 'main' into feat/task-reliability
  • 26e28bf: fix(tasks): silence W001 on a documented opt-out, correct the startup-reap claim (U1, U2)
  • 207fcf3: fix(tasks): remove the MCP dispatch change swept into feeed7e (U3)
  • 3dca885: release: v0.21.8 — Postgres test-teardown fix + tokenization docs

v0.21.8

  • 4558b3f: test(tasks): pin the T3 guarantee on the shipped email task and its query cost
  • 6848cdf: fix(tests): test-only MCP tables must not FK-constrain accounts_user
  • 82b50cd: docs(tasks): make the double-execution guarantee discoverable (T3)
  • 70a019e: fix(tasks): record a reaped-then-completed task instead of losing the fact (T3)
  • 24eb9e5: fix(scheduler): advertise the max_retries cap, don't just enforce it (T6, D2)
  • c9dfe33: release: v0.21.7 — MCP async dispatch keeps ORM work on the request connection

v0.21.7

  • afe6adb: feat(tasks): system checks for three silent reliability misconfigurations
  • a212a8c: fix(mcp): dispatch async tools with async_to_sync, not asyncio.run
  • feeed7e: fix(tasks): a worker must not reap the task it is itself running (T2)
  • 76496c4: fix(tasks): key worker liveness on the process, not the --worker-id (W1, W2)
  • 7ffc466: docs(tasks): three reaper claims that only held on the defaults (D4, D5, D6)
  • 63b73ed: fix(scheduler): max_retries must not be more aggressive than @retry_policy (D3, D1)
  • 49f3301: fix(tasks): measure heartbeat staleness on the database clock (W4)
  • c3f0ca5: feat(tasks): lost-task reaper, opt-in retries, scheduler max_retries
  • a5a538c: release: v0.21.6 — Postgres correctness: search-in-migrations + telemetry connection ownership

v0.21.6

  • ab8837d: fix: two Postgres-only failures hidden by SQLite's forgiving semantics
  • e7a773b: release: v0.21.5 — mid-fold day false-outage fix on the 90-day timeline

v0.21.5

  • ddbd0cb: fix(heartbeat): sum a mid-fold day's summary and raw halves, never choose
  • a630ec8: release: v0.21.4 — status-page accuracy (prorated summaries) + config ergonomics

v0.21.4

  • 7c63113: fix(heartbeat): prorate daily expected checks; SLA-scope the summary counts
  • 8546681: fix(emails): one host setting satisfies email links and webhooks alike
  • 79053c4: test(heartbeat): stop pinning brand name and one theme's boolean glyphs
  • 9a9b082: release: v0.21.3 — heartbeat summary corruption fix + help-docs gap closure