33 < head >
44 <!-- Book generated using mdBook -->
55 < meta charset ="UTF-8 ">
6- < title > Contributing - ThetaDataDx Documentation</ title >
6+ < title > Changelog - ThetaDataDx Documentation</ title >
77
88
99 <!-- Custom HTML head -->
3535 const path_to_root = "" ;
3636 const default_light_theme = "navy" ;
3737 const default_dark_theme = "coal" ;
38- window . path_to_searchindex_js = "searchindex-d484317a .js" ;
38+ window . path_to_searchindex_js = "searchindex-0a611890 .js" ;
3939 </ script >
4040 <!-- Start loading toc.js asap -->
41- < script src ="toc-4e96455d .js "> </ script >
41+ < script src ="toc-4b833958 .js "> </ script >
4242 </ head >
4343 < body >
4444 < div id ="mdbook-help-container ">
@@ -146,7 +146,7 @@ <h1 class="menu-title">ThetaDataDx Documentation</h1>
146146 < a href ="https://github.com/userFRM/ThetaDataDx " title ="Git repository " aria-label ="Git repository ">
147147 < span class =fa-svg > < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 496 512 "> <!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --> < path d ="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z "/> </ svg > </ span >
148148 </ a >
149- < a href ="https://github.com/userFRM/ThetaDataDx/edit/main/docs-site/src/src/contributing .md " title ="Suggest an edit " aria-label ="Suggest an edit " rel ="edit ">
149+ < a href ="https://github.com/userFRM/ThetaDataDx/edit/main/docs-site/src/src/changelog .md " title ="Suggest an edit " aria-label ="Suggest an edit " rel ="edit ">
150150 < span class =fa-svg id ="git-edit-button "> < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 512 512 "> <!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --> < path d ="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z "/> </ svg > </ span >
151151 </ a >
152152
@@ -180,125 +180,15 @@ <h1 class="menu-title">ThetaDataDx Documentation</h1>
180180
181181 < div id ="mdbook-content " class ="content ">
182182 < main >
183- < h1 id ="contributing "> < a class ="header " href ="#contributing "> Contributing</ a > </ h1 >
184- < p > Thank you for your interest in contributing to ThetaDataDx.</ p >
185- < h2 id ="prerequisites "> < a class ="header " href ="#prerequisites "> Prerequisites</ a > </ h2 >
186- < ul >
187- < li > < strong > Rust stable</ strong > (see < code > rust-toolchain.toml</ code > – includes rustfmt and clippy)</ li >
188- < li > < strong > protoc</ strong > (Protocol Buffers compiler) – only needed if modifying < code > .proto</ code > files</ li >
189- < li > < strong > Python 3.9+</ strong > – for the Python SDK</ li >
190- < li > < strong > maturin</ strong > – for building the PyO3 Python bindings (< code > pip install maturin</ code > )</ li >
191- < li > < strong > Go 1.21+</ strong > – for the Go SDK</ li >
192- < li > < strong > cargo-deny</ strong > – for dependency auditing (< code > cargo install cargo-deny</ code > )</ li >
193- </ ul >
194- < h2 id ="development-setup "> < a class ="header " href ="#development-setup "> Development Setup</ a > </ h2 >
195- < pre > < code class ="language-bash "> git clone https://github.com/userFRM/ThetaDataDx.git
196- cd ThetaDataDx
197-
198- # Run the full workspace test suite
199- cargo test --workspace
200-
201- # For integration tests, create creds.txt:
202- # Line 1: email
203- # Line 2: password
204- </ code > </ pre >
205- < h2 id ="code-style "> < a class ="header " href ="#code-style "> Code Style</ a > </ h2 >
206- < p > All Rust code must pass formatting and linting checks:</ p >
207- < pre > < code class ="language-bash "> cargo fmt --all -- --check
208- cargo clippy --workspace -- -D warnings
209- </ code > </ pre >
210- < h2 id ="pre-commit-checks "> < a class ="header " href ="#pre-commit-checks "> Pre-commit Checks</ a > </ h2 >
211- < p > Run the full CI-equivalent check locally before pushing:</ p >
212- < pre > < code class ="language-bash "> # Core workspace
213- cargo fmt --all -- --check && cargo test --workspace && cargo clippy --workspace -- -D warnings
214-
215- # FFI crate
216- cargo build --release -p thetadatadx-ffi
217-
218- # Python SDK (if modified)
219- cd sdks/python && maturin develop && python -m pytest
220- </ code > </ pre >
221- < p > Do not push code that fails any of these checks. CI will reject it.</ p >
222- < h2 id ="how-to-add-a-new-endpoint "> < a class ="header " href ="#how-to-add-a-new-endpoint "> How to Add a New Endpoint</ a > </ h2 >
223- < p > All 61 DirectClient methods are generated by the < code > define_endpoint!</ code > macro in < code > direct.rs</ code > . Adding a new endpoint is a single macro invocation.</ p >
224- < h3 id ="steps "> < a class ="header " href ="#steps "> Steps</ a > </ h3 >
225- < ol >
226- < li >
227- < p > < strong > Update the proto definition</ strong > (if the endpoint uses a new message type)</ p >
228- < ul >
229- < li > Edit < code > .proto</ code > files under < code > crates/thetadatadx/proto/</ code > </ li >
230- < li > Regenerate Rust types with < code > cargo build</ code > </ li >
231- </ ul >
232- </ li >
233- < li >
234- < p > < strong > Add a < code > define_endpoint!</ code > invocation in < code > direct.rs</ code > </ strong > </ p >
235- < pre class ="playground "> < code class ="language-rust "> < span class ="boring "> #![allow(unused)]
236- </ span > < span class ="boring "> fn main() {
237- </ span > define_endpoint!(
238- /// Doc comment.
239- stock_history_eod, // Rust method name
240- GetStockHistoryEod, // gRPC RPC name
241- StockHistoryEodRequest, // protobuf request type
242- { symbol, start_date, end_date }, // parameter fields
243- parse_eod_ticks // response parser function
244- );
245- < span class ="boring "> }</ span > </ code > </ pre >
246- </ li >
247- < li >
248- < p > < strong > Expose in the FFI layer</ strong > </ p >
249- < ul >
250- < li > Add < code > extern "C"</ code > function in < code > ffi/src/lib.rs</ code > </ li >
251- < li > Update C header, Go SDK, and C++ SDK wrappers</ li >
252- </ ul >
253- </ li >
254- < li >
255- < p > < strong > Expose in the Python SDK</ strong > </ p >
256- < ul >
257- < li > Add PyO3 binding in < code > sdks/python/src/</ code > </ li >
258- < li > Add Python test</ li >
259- </ ul >
260- </ li >
261- < li >
262- < p > < strong > Update CHANGELOG.md</ strong > under < code > [Unreleased]</ code > </ p >
263- </ li >
264- </ ol >
265- < h2 id ="how-to-update-after-a-terminal-update "> < a class ="header " href ="#how-to-update-after-a-terminal-update "> How to Update After a Terminal Update</ a > </ h2 >
266- < p > When ThetaData releases a new terminal version:</ p >
267- < ol >
268- < li > Refer to < a href ="internals/reverse-engineering.html "> Reverse Engineering</ a > </ li >
269- < li > Capture new traffic and compare against existing codec expectations</ li >
270- < li > Update frame parsers, tick types, or message definitions</ li >
271- < li > Run the full test suite for backwards compatibility</ li >
272- </ ol >
273- < h2 id ="running-against-dev-servers "> < a class ="header " href ="#running-against-dev-servers "> Running Against Dev Servers</ a > </ h2 >
274- < pre > < code class ="language-bash "> export THETADX_HOST="127.0.0.1"
275- export THETADX_PORT="11000"
276- cargo test --workspace
277- </ code > </ pre >
278- < h2 id ="pull-request-process "> < a class ="header " href ="#pull-request-process "> Pull Request Process</ a > </ h2 >
279- < ol >
280- < li > < strong > Branch</ strong > – create from < code > main</ code > (< code > feat/description</ code > or < code > fix/description</ code > )</ li >
281- < li > < strong > Test</ strong > – run the full pre-commit check suite</ li >
282- < li > < strong > PR</ strong > – open against < code > main</ code > </ li >
283- < li > < strong > Review</ strong > – address feedback; all CI checks must pass</ li >
284- < li > < strong > Merge</ strong > – squash-merge preferred</ li >
285- </ ol >
286- < p > Every PR must include:</ p >
287- < ul >
288- < li > Passing CI (fmt, clippy, test, deny)</ li >
289- < li > Updated < code > CHANGELOG.md</ code > if user-facing</ li >
290- < li > Updated documentation if any public API changed</ li >
291- </ ul >
292- < h2 id ="community "> < a class ="header " href ="#community "> Community</ a > </ h2 >
293- < p > Join the ThetaData Discord: < strong > < a href ="https://discord.thetadata.us/ "> discord.thetadata.us</ a > </ strong > </ p >
294- < h2 id ="code-of-conduct "> < a class ="header " href ="#code-of-conduct "> Code of Conduct</ a > </ h2 >
295- < p > This project follows the < a href ="https://github.com/userFRM/ThetaDataDx/blob/main/CODE_OF_CONDUCT.md "> Contributor Covenant v2.1</ a > .</ p >
183+ < h1 id ="changelog "> < a class ="header " href ="#changelog "> Changelog</ a > </ h1 >
184+ < p > See the full changelog in the repository:</ p >
185+ < p > < a href ="https://github.com/userFRM/ThetaDataDx/blob/main/CHANGELOG.md "> < strong > CHANGELOG.md</ strong > </ a > </ p >
296186
297187 </ main >
298188
299189 < nav class ="nav-wrapper " aria-label ="Page navigation ">
300190 <!-- Mobile navigation buttons -->
301- < a rel ="prev " href ="internals/reverse-engineering .html " class ="mobile-nav-chapters previous " title ="Previous chapter " aria-label ="Previous chapter " aria-keyshortcuts ="Left ">
191+ < a rel ="prev " href ="tools/server .html " class ="mobile-nav-chapters previous " title ="Previous chapter " aria-label ="Previous chapter " aria-keyshortcuts ="Left ">
302192 < span class =fa-svg > < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 320 512 "> <!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --> < path d ="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z "/> </ svg > </ span >
303193 </ a >
304194
@@ -309,7 +199,7 @@ <h2 id="code-of-conduct"><a class="header" href="#code-of-conduct">Code of Condu
309199 </ div >
310200
311201 < nav class ="nav-wide-wrapper " aria-label ="Page navigation ">
312- < a rel ="prev " href ="internals/reverse-engineering .html " class ="nav-chapters previous " title ="Previous chapter " aria-label ="Previous chapter " aria-keyshortcuts ="Left ">
202+ < a rel ="prev " href ="tools/server .html " class ="nav-chapters previous " title ="Previous chapter " aria-label ="Previous chapter " aria-keyshortcuts ="Left ">
313203 < span class =fa-svg > < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 320 512 "> <!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --> < path d ="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z "/> </ svg > </ span >
314204 </ a >
315205
0 commit comments