Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
e74cced
build(deps): replace puma and rack-timeout with falcon and point html…
gildesmarais Sep 5, 2026
98b08fb
refactor(boot): remove Rack::Timeout hooks and update specs
gildesmarais Sep 5, 2026
1a28267
feat(server): add config/falcon.rb, remove Rack::Timeout from config.…
gildesmarais Sep 5, 2026
c549414
build(docker): migrate server boot to falcon and make healthcheck TLS…
gildesmarais Sep 5, 2026
46feec5
docs: document Falcon server architecture, request timeouts, and TLS …
gildesmarais Sep 5, 2026
8218039
refactor(scripts): migrate bin/dev-with-frontend to falcon and remove…
gildesmarais Sep 5, 2026
a8ee365
build(docker): add openssl-dev to builder stage for native extension …
gildesmarais Sep 5, 2026
ae6f2e9
perf(telemetry): hoist AppLogger to process singleton to eliminate pe…
gildesmarais Sep 5, 2026
4ad9ed6
refactor(cache): remove Rack::Cache to eliminate blocking disk I/O in…
gildesmarais Sep 5, 2026
f61adb6
feat(feeds): add request body limits on creation and single-flight co…
gildesmarais Sep 6, 2026
653acbb
feat(server): harden Falcon TLS ciphers, align timeout to 55s, and pr…
gildesmarais Sep 6, 2026
b5359f7
chore(api): regenerate OpenAPI schema and frontend types for 400 Bad …
gildesmarais Sep 6, 2026
4517365
fix(server): require app.rb in Falcon preload and enforce body cap ac…
gildesmarais Sep 6, 2026
baeed52
test(api): mark redundant 400 spec as openapi: false to prevent schem…
gildesmarais Sep 6, 2026
8c739a0
fix(boot): unlock request concurrency in development reloader
gildesmarais Sep 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .devcontainer/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ services:
- RACK_ENV=development
- BUNDLE_PATH=/usr/local/bundle
- PORT=4000
- BOTASAURUS_SCRAPER_URL=${BOTASAURUS_SCRAPER_URL:-http://host.docker.internal:4010}
command: sleep infinity
user: vscode
working_dir: /workspace
Expand Down
7 changes: 3 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,13 @@ RUN apk add --no-cache \
'libc-dev>=0.7' \
'make>=4' \
'openssl=~3' \
'openssl-dev=~3' \
'libxml2-dev>=2' \
'libxslt-dev>=1' \
&& gem install bundler:$(tail -1 Gemfile.lock | tr -d ' ') \
&& bundle config set --local without 'development test' \
&& bundle install --retry=5 --jobs=$(nproc) \
&& bundle binstubs bundler html2rss \
&& bundle binstubs bundler html2rss falcon \
&& bundle clean --force \
&& rm -rf /usr/local/bundle/cache \
/usr/local/bundle/bundler/gems/*/.git \
Expand Down Expand Up @@ -76,8 +77,6 @@ RUN apk add --no-cache \
--no-create-home \
--uid "$UID" "$USER" \
&& mkdir -p /app \
&& mkdir -p /app/tmp/rack-cache-body \
&& mkdir -p /app/tmp/rack-cache-meta \
&& chown "$USER":"$USER" -R /app

WORKDIR /app
Expand All @@ -92,4 +91,4 @@ COPY --chown=$USER:$USER config ./config
COPY --chown=$USER:$USER public ./public
COPY --from=frontend-builder --chown=$USER:$USER /app/frontend/dist ./frontend/dist

CMD ["bundle", "exec", "puma", "-C", "./config/puma.rb"]
CMD ["bundle", "exec", "falcon", "host", "./config/falcon.rb"]
7 changes: 2 additions & 5 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,18 @@ source 'https://rubygems.org'
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }

# gem 'html2rss', '~> 0.29'
gem 'html2rss', github: 'html2rss/html2rss', branch: 'experiment/httpx-default'
gem 'html2rss', github: 'html2rss/html2rss', branch: 'master'
gem 'html2rss-configs', github: 'html2rss/html2rss-configs'

# Use these instead of the two above (uncomment them) when developing locally:
# gem 'html2rss', path: '../html2rss'
# gem 'html2rss-configs', path: '../html2rss-configs'

gem 'base64'
gem 'rack-cache'
gem 'rack-timeout'
gem 'falcon'
gem 'roda'
gem 'zeitwerk'

gem 'puma', require: false

group :development do
gem 'irb', require: false
gem 'rake', require: false
Expand Down
116 changes: 101 additions & 15 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
GIT
remote: https://github.com/html2rss/html2rss
revision: f0b73c2ae11dcc4aabc3386ecc0d7b6ee1b54013
branch: experiment/httpx-default
revision: 4260c842a5632fbef712cf3bee3a4fddcfee3654
branch: master
specs:
html2rss (0.29.1)
addressable (~> 2.7)
Expand Down Expand Up @@ -64,13 +64,45 @@ GEM
addressable (2.9.0)
public_suffix (>= 2.0.2, < 8.0)
ast (2.4.3)
async (2.45.1)
console (~> 1.29)
fiber-annotation
io-event (~> 1.21)
async-container (0.38.0)
async (~> 2.44)
async-http (0.103.0)
async (>= 2.35.1)
async-pool (~> 0.12)
io-endpoint (~> 0.18)
io-stream (~> 0.14)
protocol-http (~> 0.66)
protocol-http1 (~> 0.41)
protocol-http2 (~> 0.28)
protocol-url (~> 0.2)
async-http-cache (0.4.6)
async-http (~> 0.56)
async-pool (0.12.0)
async (>= 2.0)
async-service (0.25.0)
async
async-container (~> 0.34)
string-format (~> 0.2)
async-utilization (0.5.0)
console (~> 1.0)
bake (0.25.0)
bigdecimal
samovar (~> 2.1)
base64 (0.3.0)
bigdecimal (4.1.2)
brotli (0.8.0)
builder (3.3.0)
climate_control (1.2.0)
concurrent-ruby (1.3.8)
connection_pool (3.0.2)
console (1.37.0)
fiber-annotation
fiber-local (~> 1.1)
json
crack (1.0.1)
bigdecimal
rexml
Expand Down Expand Up @@ -114,6 +146,23 @@ GEM
zeitwerk (~> 2.6)
erb (6.0.7)
erubi (1.13.1)
falcon (0.57.0)
async
async-container (~> 0.20)
async-http (~> 0.97)
async-http-cache (~> 0.4)
async-service (~> 0.19)
async-utilization (~> 0.3)
bundler
localhost (~> 1.1)
openssl (>= 3.0)
protocol-http (~> 0.31)
protocol-rack (~> 0.7)
samovar (~> 2.3)
fiber-annotation (0.2.0)
fiber-local (1.1.0)
fiber-storage
fiber-storage (1.0.1)
hana (1.3.7)
hashdiff (1.2.1)
http-2 (1.2.2)
Expand All @@ -122,6 +171,11 @@ GEM
i18n (1.15.2)
concurrent-ruby (~> 1.0)
io-console (0.9.2)
io-endpoint (0.18.0)
openssl (>= 3.3.0)
io-event (1.21.1)
io-stream (0.14.0)
openssl (>= 3.3)
irb (1.18.0)
pp (>= 0.6.0)
prism (>= 1.3.0)
Expand All @@ -137,6 +191,8 @@ GEM
rexml (>= 3.4.4)
language_server-protocol (3.17.0.6)
lint_roller (1.1.0)
localhost (1.8.0)
bake
logger (1.7.0)
loofah (2.25.2)
crass (~> 1.0.2)
Expand All @@ -150,7 +206,6 @@ GEM
minitest (6.0.6)
drb (~> 2.0)
prism (~> 1.5)
nio4r (2.7.5)
nokogiri (1.19.4-aarch64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.4-aarch64-linux-musl)
Expand All @@ -167,6 +222,7 @@ GEM
racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-musl)
racc (~> 1.4)
openssl (4.0.2)
parallel (2.1.0)
parser (3.3.12.0)
ast (~> 2.4.1)
Expand All @@ -175,19 +231,26 @@ GEM
prettyprint
prettyprint (0.2.0)
prism (1.9.0)
protocol-hpack (1.5.1)
protocol-http (0.71.0)
protocol-http1 (0.41.0)
protocol-http (~> 0.68)
protocol-http2 (0.28.0)
protocol-hpack (~> 1.4)
protocol-http (~> 0.62)
protocol-rack (0.22.1)
io-stream (>= 0.10)
protocol-http (~> 0.58)
rack (>= 1.0)
protocol-url (0.18.0)
public_suffix (7.0.5)
puma (8.0.2)
nio4r (~> 2.0)
racc (1.8.1)
rack (3.2.7)
rack-cache (1.17.0)
rack (>= 0.4)
rack-session (2.1.2)
base64 (>= 0.1.0)
rack (>= 3.0.0)
rack-test (2.2.0)
rack (>= 1.3)
rack-timeout (0.7.0)
rackup (2.3.1)
rack (>= 3)
rails-dom-testing (2.3.0)
Expand Down Expand Up @@ -267,6 +330,8 @@ GEM
prism (>= 1.2, < 2.0)
rbs (>= 3, < 5)
ruby-progressbar (1.13.0)
samovar (2.5.1)
console (~> 1.0)
sanitize (7.0.0)
crass (~> 1.0.2)
nokogiri (>= 1.16.8)
Expand All @@ -278,6 +343,7 @@ GEM
simplecov (1.2.0)
simpleidn (0.3.0)
stackprof (0.2.28)
string-format (0.2.0)
thor (1.5.0)
tsort (0.2.0)
tzinfo (2.0.6)
Expand Down Expand Up @@ -309,13 +375,11 @@ PLATFORMS
DEPENDENCIES
base64
climate_control
falcon
html2rss!
html2rss-configs!
irb
puma
rack-cache
rack-test
rack-timeout
rake
roda
rspec
Expand All @@ -340,13 +404,22 @@ CHECKSUMS
activesupport (8.1.3.1) sha256=85458765f25ea48b9019c46b6bb3fa5683197bf4280d9f06710a6e8d7a831376
addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
async (2.45.1) sha256=95849f7432eca535146c69f3078dab3c7228d0075ed71f48733f3e585dd7c267
async-container (0.38.0) sha256=71479d8551870d684e602f463d7b8368909c835a64e38b555e1821512ffffc88
async-http (0.103.0) sha256=137e3d5d419f7d72d5fa33cf04f30232e79c57b690025a650b8f9e48ece8bc41
async-http-cache (0.4.6) sha256=2038d1f093182f16b50b4db271c25085e3938da10bfcfc2904cadb0530fddfd6
async-pool (0.12.0) sha256=5580493dc024bd704dab2ed0bf1307100722e49cbb825c7965f8501194f58506
async-service (0.25.0) sha256=71d9d75c2898dddf6549150cecd57156453e5b61da69fa87f10a0c97becfb6d1
async-utilization (0.5.0) sha256=96c347634e09edcbcb7f70cf8c5a1ae058c64d88186341e3f924a44440f95981
bake (0.25.0) sha256=a47bdc6a26addc048827debc36fe27bb4d5d71ac2958ad910b5386e9baf49869
base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
brotli (0.8.0) sha256=0c5a42046b3b603fb109656881147fd76064c034b7d19c1b4fcc32a093a4d55d
builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f
climate_control (1.2.0) sha256=36b21896193fa8c8536fa1cd843a07cf8ddbd03aaba43665e26c53ec1bd70aa5
concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
connection_pool (3.0.2) sha256=33fff5ba71a12d2aa26cb72b1db8bba2a1a01823559fb01d29eb74c286e62e0a
console (1.37.0) sha256=8093b286c2595a063849c098594fee5155ecc7967d36f3aa8cbe7569c8f3efd7
crack (1.0.1) sha256=ff4a10390cd31d66440b7524eb1841874db86201d5b70032028553130b6d4c7e
crass (1.0.7) sha256=94868719948664c89ddcaf0a37c65048413dfcb1c869470a5f7a7ceb5390b295
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
Expand All @@ -361,6 +434,10 @@ CHECKSUMS
dry-validation (1.11.1) sha256=70900bb5a2d911c8aab566d3e360c6bff389b8bf92ea8e04885ce51c41ff8085
erb (6.0.7) sha256=c5ca6dc25b0ef974a44dc8f59fe847577122483b1968a38dec305c60bf91ee92
erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
falcon (0.57.0) sha256=c9b060bc23a3b90a80376078aae037d8f48e0b2f12f5f30f360d4b29d7baf0f7
fiber-annotation (0.2.0) sha256=7abfadf1d119f508867d4103bf231c0354d019cc39a5738945dec2edadaf6c03
fiber-local (1.1.0) sha256=c885f94f210fb9b05737de65d511136ea602e00c5105953748aa0f8793489f06
fiber-storage (1.0.1) sha256=f48e5b6d8b0be96dac486332b55cee82240057065dc761c1ea692b2e719240e1
hana (1.3.7) sha256=5425db42d651fea08859811c29d20446f16af196308162894db208cac5ce9b0d
hashdiff (1.2.1) sha256=9c079dbc513dfc8833ab59c0c2d8f230fa28499cc5efb4b8dd276cf931457cd1
html2rss (0.29.1)
Expand All @@ -369,19 +446,22 @@ CHECKSUMS
httpx (1.8.3) sha256=cb88f2285c4ef17164d803a640dc393d28722cba7f282ad0e7f9f926cd02dc47
i18n (1.15.2) sha256=00f9eb62412fe593b2a65a97daa75300d37abb8f7202ec748e94b6d46a9dd1b5
io-console (0.9.2) sha256=efa74f891dd03c0939a931dfc6e74c2813d904763d456ea9762b0525e748db08
io-endpoint (0.18.0) sha256=720d186bcd584e8ba490bfc91dab332cc3c5ffee848b5b03894555cb275151aa
io-event (1.21.1) sha256=b3088f89ad67edf9be9fc2f48a5fae0790e92862487551eeb337b49098eb99e6
io-stream (0.14.0) sha256=07d9b13ea2066ccbbc761fff8d69ad5a31e47561d31e02cc271f3ed9c1a8f1cd
irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3
json (2.21.2) sha256=1f1d3b7cf2b3ba1a69beca0bb6db13d5438b80bff3cd54cdaaa620b9b07c1c6a
json_schemer (2.5.0) sha256=2f01fb4cce721a4e08dd068fc2030cffd0702a7f333f1ea2be6e8991f00ae396
kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa
language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
localhost (1.8.0) sha256=df7ea825b4f64949c588c17efac86bc47ddc4460d723778abe933b71759b2701
logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
loofah (2.25.2) sha256=2007f746959ac65552456e04b433e83deb22759ab38c838b4445c70e43425918
mcp (1.5.0) sha256=6f97785fa6e069eb667aa3d50299851ea9aca904b4abe8306f156bb8fd9eaff0
mime-types (3.7.0) sha256=dcebf61c246f08e15a4de34e386ebe8233791e868564a470c3fe77c00eed5e56
mime-types-data (3.2026.0701) sha256=cd8811e1fb89d836499ba0582368a10ee74cef929ba956d1d5ddca045e6a730f
minitest (6.0.6) sha256=153ea36d1d987a62942382b61075745042a2b3123b1cd48f4c3675af9cc7d6f1
nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1
nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af
nokogiri (1.19.4-arm-linux-gnu) sha256=a301313e38bb065d68239e79734bcd6f56fb6efaacebde29e9abf2a4735340ca
Expand All @@ -390,19 +470,23 @@ CHECKSUMS
nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551
nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a
nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b
openssl (4.0.2) sha256=1037ad2868ae58df9ad917891c0c0f9815a1172f6846d4bcdd508e4c2ee747c2
parallel (2.1.0) sha256=b35258865c2e31134c5ecb708beaaf6772adf9d5efae28e93e99260877b09356
parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
protocol-hpack (1.5.1) sha256=6feca238b8078da1cd295677d6f306c6001af92d75fe0643d33e6956cbc3ad91
protocol-http (0.71.0) sha256=38577bf3df0bf0c3f7ee7e21b43fcb4bd7624e36f697dbe9c3eea344f14bd9ba
protocol-http1 (0.41.0) sha256=9863874a1228948a896c3e7ea16d13a680c8f3ed50706007c78b7033018b0ea3
protocol-http2 (0.28.0) sha256=b7c6195dcfa80ec2484670e9fd8fc21024cc654a391aa0792433aff1188c1691
protocol-rack (0.22.1) sha256=1185d245927ef9849a603700d6991ca353bc89724fbf98efa4a4333ed62a9fc3
protocol-url (0.18.0) sha256=b16f55983094b46d18e04b709333b260e4ab5962a32696728e33a6c396150ed6
public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
puma (8.0.2) sha256=c8ed871dfbbe66448ea9ffd46692342d9804d4071522b52b5331b7b6e7b686fb
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rack (3.2.7) sha256=93e13e1c24f93556671d85d2d79fa228c3485815c50d7e2f265b5330c6528fb7
rack-cache (1.17.0) sha256=49592f3ef2173b0f5524df98bb801fb411e839869e7ce84ac428dc492bf0eb90
rack-session (2.1.2) sha256=595434f8c0c3473ae7d7ac56ecda6cc6dfd9d37c0b2b5255330aa1576967ffe8
rack-test (2.2.0) sha256=005a36692c306ac0b4a9350355ee080fd09ddef1148a5f8b2ac636c720f5c463
rack-timeout (0.7.0) sha256=757337e9793cca999bb73a61fe2a7d4280aa9eefbaf787ce3b98d860749c87d9
rackup (2.3.1) sha256=6c79c26753778e90983761d677a48937ee3192b3ffef6bc963c0950f94688868
rails-dom-testing (2.3.0) sha256=8acc7953a7b911ca44588bf08737bc16719f431a1cc3091a292bca7317925c1d
rails-html-sanitizer (1.7.1) sha256=e797a7c9b01e567307e317c576b49ab4168017e63eea4dba9ce3cb587e2f22c2
Expand All @@ -429,12 +513,14 @@ CHECKSUMS
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
ruby-lsp (0.26.11) sha256=4cc8f1587237ff8c9031680b5491df901a82559eeaa1ae96863ffe700b32583d
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
samovar (2.5.1) sha256=8a9fc41eb8868084f0321eb41678c485cfbc7d282fb306c0be67c3284b1d2394
sanitize (7.0.0) sha256=269d1b9d7326e69307723af5643ec032ff86ad616e72a3b36d301ac75a273984
securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1
sentry-ruby (7.0.0) sha256=e9616ff521355a983fad404ca575d8bb1f1949a8cac42a7a893dd02156bcdb1a
simplecov (1.2.0) sha256=ea6acd05eece5a41990e2a5171c57d15700d329326c7666c85ee8c6a0dd0977e
simpleidn (0.3.0) sha256=12ca730bed2f3db04d11e9bfd1bca3e11fb37f55b21eb2e9793fb5814bf54d03
stackprof (0.2.28) sha256=4ec2ace02f386012b40ca20ef80c030ad711831f59511da12e83b34efb0f9a04
string-format (0.2.0) sha256=bc981c14116b061f12134549f32fa2d61a17b5a35dd6fd36596c21722a789af6
thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b
Expand Down
3 changes: 1 addition & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ setup: ## Full development setup
cp .env.example .env 2>/dev/null || echo "RACK_ENV=development" > .env; \
echo "Created .env file"; \
fi
@mkdir -p tmp/rack-cache-body tmp/rack-cache-meta
@echo "Setting up frontend..."
@cd frontend && CI=1 pnpm install --frozen-lockfile
@echo "Setup complete!"
Expand Down Expand Up @@ -146,7 +145,7 @@ openapi-lint-spectral: ## Lint OpenAPI using Spectral OAS rules
openai-lint-spectral: openapi-lint-spectral ## Alias for openapi-lint-spectral

clean: ## Clean temporary files
@rm -rf tmp/rack-cache-* coverage/
@rm -rf coverage/
@cd frontend && rm -rf dist/ node_modules/
@echo "Clean complete!"

Expand Down
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,13 @@ feed.example.com {
}
```

Alternatively, Falcon supports direct in-process TLS termination and HTTP/2 negotiation by providing certificate and private key paths:

```bash
TLS_CERTIFICATE_PATH=/path/to/fullchain.pem
TLS_KEY_PATH=/path/to/privkey.pem
```

## Custom feeds (escape hatch)

When auto-source is not enough, mount a YAML feeds file:
Expand Down
1 change: 0 additions & 1 deletion Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ task :test do
sh ['docker run',
'-d',
'-p 4000:4000',
'--env PUMA_LOG_CONFIG=1',
"--env BUILD_TAG=#{smoke_build_tag}",
"--env GIT_SHA=#{smoke_git_sha}",
"--env HEALTH_CHECK_TOKEN=#{smoke_health_token}",
Expand Down
3 changes: 0 additions & 3 deletions app.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# frozen_string_literal: true

require 'roda'
require 'rack/cache'
require 'json'
require 'base64'

Expand Down Expand Up @@ -54,8 +53,6 @@ def development? = self.class.development?
opts.merge!(check_dynamic_arity: false, check_arity: :warn)
use RequestContextMiddleware
use RateLimiter
use Rack::Cache, metastore: 'file:./tmp/rack-cache-meta', entitystore: 'file:./tmp/rack-cache-body',
verbose: development?

plugin :content_security_policy do |csp|
csp.default_src :none
Expand Down
Loading
Loading