Repository: nasa/fprime (language: python)

Issue:
Add GitHub Action - Markdown link check
| | |
|:---|:---|
|**_F´ Version_**| latest |
|**_Affected Component_**|  |
---
## Feature Description

A workflow for checking broken links in Markdown files should be integrated through the GitHub Action [markdown-link-check](https://github.com/gaurav-nelson/github-action-markdown-link-check).

This GitHub Action should check all Markdown files in the repository and report any broken links it detects.

The action should be configurable to exclude certain parts of the repository (e.g., specific directories or files) from link checking.

If broken links are detected, the action should display an error and stop the workflow, with a message indicating the files and links involved.

## Rationale

Broken links can be frustrating for users and affect the quality and user experience of a site or software. They can also be difficult to spot manually, especially in large repositories with many Markdown files.

Adding a GitHub Action that automatically checks for broken links in Markdown files would make it easier to maintain and improve the quality of the repository by quickly flagging broken links and allowing contributors to fix them.

It could also improve the user experience for people using the repository, providing them with quality content without broken links.



Discussion / hints:
I'd like to take this up 😃 
That'd be great! I really would love to have this, just never got the time to get to it.
Once you have the PR ready for this, we can help fixing the markdown links that may be invalid. It's possible some might not be that trivial to resolve if files have been moved around and such.

Fix patch:
diff --git a/.github/actions/markdown-check/README.md b/.github/actions/markdown-check/README.md
new file mode 100644
index 0000000000..93950692fb
--- /dev/null
+++ b/.github/actions/markdown-check/README.md
@@ -0,0 +1,5 @@
+### Markdown Link Checker
+
+Uses the following GitHub Action: https://github.com/gaurav-nelson/github-action-markdown-link-check
+
+Config file options: https://github.com/tcort/markdown-link-check#config-file-format
\ No newline at end of file
diff --git a/.github/actions/markdown-check/mlc-config.json b/.github/actions/markdown-check/mlc-config.json
new file mode 100644
index 0000000000..ae95b7d16f
--- /dev/null
+++ b/.github/actions/markdown-check/mlc-config.json
@@ -0,0 +1,23 @@
+{
+    "ignorePatterns": [
+      {
+        "pattern": "^(https?://)?localhost"
+      },
+      {
+        "pattern": "https://www.raspberrypi.com/documentation/computers/configuration.html"
+      },
+      {
+        "pattern": "https://en.wikipedia.org/wiki/"
+      }
+    ],
+    "replacementPatterns": [
+      {
+        "pattern": "^[./]*api/cmake/",
+        "replacement": "https://nasa.github.io/fprime/UsersGuide/api/cmake/"
+      },
+      {
+        "pattern": "^[./]*api/c\\+\\+/",
+        "replacement": "https://nasa.github.io/fprime/UsersGuide/api/c++/"
+      }
+    ]
+}
\ No newline at end of file
diff --git a/.github/actions/spelling/README.md b/.github/actions/spelling/README.md
index 8dd5e9f88d..6954dea8fa 100644
--- a/.github/actions/spelling/README.md
+++ b/.github/actions/spelling/README.md
@@ -5,7 +5,6 @@ File | Purpose | Format | Info
 [allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow)
 [reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject)
 [excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes)
-[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only)
 [patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
 [candidate.patterns](candidate.patterns) | Patterns that might be worth adding to [patterns.txt](patterns.txt) | perl regular expression with optional comment block introductions (all matches will be suggested) | [candidates](https://github.com/check-spelling/check-spelling/wiki/Feature:-Suggest-patterns)
 [line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
diff --git a/.github/actions/spelling/advice.md b/.github/actions/spelling/advice.md
index 84eb9218e2..b7271e4e95 100644
--- a/.github/actions/spelling/advice.md
+++ b/.github/actions/spelling/advice.md
@@ -9,8 +9,7 @@ If items relate to a ...
   File paths are Perl 5 Regular Expressions - you can [test](
 https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
 
-  `^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](
-../tree/HEAD/README.md) (on whichever branch you're using).
+  `^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude README.md (on whichever branch you're using).
 
 * well-formed pattern.
 
diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt
index a7ca55455c..332226f8fd 100644
--- a/.github/actions/spelling/expect.txt
+++ b/.github/actions/spelling/expect.txt
@@ -378,6 +378,7 @@ fsw
 fus
 FWCASSERT
 Gangianpour
+gaurav
 gbl
 gcc
 gcda
@@ -605,6 +606,7 @@ Merewether
 methoddoc
 methodstub
 microcontrollers
+mlc
 mman
 MMAPALLOCATOR
 MML
@@ -1018,6 +1020,7 @@ tcgetattr
 TCIFLUSH
 tclist
 tcomp
+tcort
 TCPCLIENT
 TCPHELPER
 tcpserver
@@ -1164,6 +1167,7 @@ WAITALL
 watney
 Wdog
 whitebox
+wikipedia
 WLE
 Wno
 WORKDIR
diff --git a/.github/workflows/markdown-link-check.yml b/.github/workflows/markdown-link-check.yml
new file mode 100644
index 0000000000..33ea6fa695
--- /dev/null
+++ b/.github/workflows/markdown-link-check.yml
@@ -0,0 +1,17 @@
+name: Check Markdown links
+
+on: 
+  push:
+    branches: [devel]
+  pull_request:
+    branches: [devel]
+
+jobs:
+  markdown-link-check:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v4
+    - uses: gaurav-nelson/github-action-markdown-link-check@v1
+      with:
+          use-quiet-mode: 'yes'
+          config-file: ./.github/actions/markdown-check/mlc-config.json
diff --git a/Autocoders/Python/README.md b/Autocoders/Python/README.md
index 5b2503d6db..85d178d122 100644
--- a/Autocoders/Python/README.md
+++ b/Autocoders/Python/README.md
@@ -136,7 +136,7 @@ Cmake file that is present in all parts of directory tree to be built by cmake.
 ### Requirements
 
 The Autocoder's requirements are covered by installing the F´ software package. This is covered by the install document 
-found at: [INSTALL.md](../../INSTALL.md).
+found at: [INSTALL.md](../../docs/INSTALL.md).
 
 ## Schematron
 In Autocoders/Python/schema/default there are various schematron .rng files mixed with the normal F Prime RelaxNG .rng schema files. The schematron files validate xml in the same way as the RelaxNG schemas (within the XmlParser classes), but these schematron files will only generate command line errors, not exceptions like the schema files will. Here is a short description of each file:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 5b5f27f548..a06d01ad5c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -74,8 +74,7 @@ Contributors to the [fprime](https://github.com/nasa/fprime) repository should u
 F´ follows a standard git flow development model. Developers should start with a
 [fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) of one of the F´ repositories and then develop
 according to [git flow](https://docs.github.com/en/get-started/quickstart/github-flow). Remember to add an
-[upstream remote](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/configuring-a-remote-for-a-fork)
-to your fork such that you may fetch the latest changes.
+upstream remote to your fork such that you may fetch the latest changes.
 
 For each contribution, developers should first fetch the latest changes from upstream. Then create a new branch off
 `devel` and submit back to F´ using a pull request as described above.
diff --git a/RPI/README.md b/RPI/README.md
index 48fdac77f0..af22c23d84 100644
--- a/RPI/README.md
+++ b/RPI/README.md
@@ -17,7 +17,7 @@ This demo was developed on a Raspberry Pi 2 model B. The following directions ar
  
 **Disable use of the UART for the Linux console:**
 
-[Disable UART](https://www.raspberrypi.org/documentation/configuration/uart.md)
+[Disable UART](https://www.raspberrypi.com/documentation/computers/configuration.html)
 
 If the UART port is not set up correctly, there will be a file open error.
  
@@ -52,7 +52,7 @@ sudo apt update && sudo apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnu
 
 **Crosscompiling using CMake:**
 
-The following commands are described at length in the getting started [tutorial](../docs/Tutorials/HelloWorld/Tutorial.md). These commands will
+The following commands are described at length in the getting started [tutorial](../docs/Tutorials/README.md). These commands will
 go to the RPI directory and generate a build directory for the RPI example. This step generates a CMake Cache, sets the toolchain use to build the
 code and does an initial scan of the source tree. Since the RPI example sets a default F´ toolchain file in its CMakeLists.txt, we do not need to 
 supply one on the command line when generating the build. This only needs to be done once to prepare for the build because CMake will detect
diff --git a/Ref/PingReceiver/docs/sdd.md b/Ref/PingReceiver/docs/sdd.md
index 2f072ad024..3f0261c19d 100644
--- a/Ref/PingReceiver/docs/sdd.md
+++ b/Ref/PingReceiver/docs/sdd.md
@@ -3,7 +3,7 @@
 
 ## 1. Introduction
 
-The `Ref::PingReceiver` is a demonstration component that accepts pings from the Health Component [HTML](../../../Svc/Health/docs/sdd.html) [MD](../../../Svc/Health/docs/sdd.md) and has commands to disable ping responses for testing purposes.
+The `Ref::PingReceiver` is a demonstration component that accepts pings from the [Health Component](../../../Svc/Health/docs/sdd.md) and has commands to disable ping responses for testing purposes.
 
 ## 2. Requirements
 
@@ -26,8 +26,6 @@ The `Ref::PingReceiver` component has the following component diagram:
 
 ## 4. Dictionaries
 
-Dictionaries: [HTML](PingReceiver.html) [MD](PingReceiver.md)
-
 ## 5. Module Checklists
 
 ## 6. Unit Testing
diff --git a/Ref/README.md b/Ref/README.md
index 3760603d1e..a1b84e78d8 100644
--- a/Ref/README.md
+++ b/Ref/README.md
@@ -63,7 +63,7 @@ cd fprime/Ref/build-artifacts/<platform>/bin/
 - The F´ utility's build command can build individual components too.
 - The 'generate' command can take a toolchain argument for quickly generating a cross-compile `fprime-util generate raspberrypi` for example.
 
-Further work with the F´ utility can be found in the [Getting Started](../docs/Tutorials/HelloWorld/Tutorial.md) tutorial. Other tutorials
+Further work with the F´ utility can be found in the [Getting Started](../docs/Tutorials/README.md) tutorial. Other tutorials
 for many aspects of F´ are available [here](../docs/Tutorials/README.md).
 
 
diff --git a/Ref/RecvBuffApp/docs/sdd.md b/Ref/RecvBuffApp/docs/sdd.md
index 654ab09707..a337d9c25b 100644
--- a/Ref/RecvBuffApp/docs/sdd.md
+++ b/Ref/RecvBuffApp/docs/sdd.md
@@ -3,7 +3,7 @@
 
 ## 1. Introduction
 
-The `Ref::RecvBuffApp` is a demonstration component that receives data buffers from `Ref::SendBuffApp` [HTML](../../SendBuffApp/docs/sdd.html) [MD](../../SendBuffApp/docs/sdd.md)
+The `Ref::RecvBuffApp` is a demonstration component that receives data buffers from `Ref::SendBuffApp` [SDD](../../SendBuffApp/docs/sdd.md)
 
 ## 2. Requirements
 
@@ -26,8 +26,6 @@ The `Ref::RecvBuffApp` component has the following component diagram:
 
 ## 4. Dictionaries
 
-Dictionaries: [HTML](RecvBuff.html) [MD](RecvBuff.md)
-
 ## 5. Module Checklists
 
 ## 6. Unit Testing
diff --git a/Ref/SendBuffApp/docs/sdd.md b/Ref/SendBuffApp/docs/sdd.md
index 3c4cf48c5a..8b50323311 100644
--- a/Ref/SendBuffApp/docs/sdd.md
+++ b/Ref/SendBuffApp/docs/sdd.md
@@ -3,7 +3,7 @@
 
 ## 1. Introduction
 
-The `Ref::SendBuffApp` is a demonstration component that sends data buffers to `Ref::RecvBuffApp` [HTML](../../RecvBuffApp/docs/sdd.html) [MD](../../RecvBuffApp/docs/sdd.md)
+The `Ref::SendBuffApp` is a demonstration component that sends data buffers to `Ref::RecvBuffApp` ([SDD](../../RecvBuffApp/docs/sdd.md))
 
 ## 2. Requirements
 
@@ -26,8 +26,6 @@ The `Ref::SendBuffApp` component has the following component diagram:
 
 ## 4. Dictionaries
 
-Dictionaries: [HTML](SendBuff.html) [MD](SendBuff.md)
-
 ## 5. Module Checklists
 
 ## 6. Unit Testing
diff --git a/Ref/SignalGen/docs/sdd.md b/Ref/SignalGen/docs/sdd.md
index 5a4884bbcb..4b0353fe5d 100644
--- a/Ref/SignalGen/docs/sdd.md
+++ b/Ref/SignalGen/docs/sdd.md
@@ -3,7 +3,7 @@
 
 ## 1. Introduction
 
-The `Ref::SignalGen` is a demonstration component that receives data buffers from `Ref::SignalGen` [HTML](../../SendBuffApp/docs/sdd.html) [MD](../../SendBuffApp/docs/sdd.md). It is a source for testing plots in the ground software.
+The `Ref::SignalGen` is a demonstration component that receives data buffers from `Ref::SignalGen` ([SDD](../../SendBuffApp/docs/sdd.md)). It is a source for testing plots in the ground software.
 
 ## 2. Requirements
 
@@ -25,8 +25,6 @@ The `Ref::SignalGen` component has the following component diagram:
 
 ## 4. Dictionaries
 
-Dictionaries: [HTML](SignalGen.html) [MD](SignalGen.md)
-
 ## 5. Module Checklists
 
 ## 6. Unit Testing
diff --git a/Ref/docs/Ref.md b/Ref/docs/Ref.md
deleted file mode 100644
index 278ef30d60..0000000000
--- a/Ref/docs/Ref.md
+++ /dev/null
@@ -1,81 +0,0 @@
-
-<title>Ref Application Navigation</title>
-# Ref Deployment
-
-## SDD Links
-
-### Deployment
-
-[Ref SDD](sdd.md)
-
-### Modules
-|Module|Link]
-|---|---|
-|Ref/Top|[Link](../../Ref/Top/docs/sdd.md)|
-|Ref/RecvBuffApp|[Link](../../Ref/RecvBuffApp/docs/sdd.md)|
-|Ref/SendBuffApp|[Link](../../Ref/SendBuffApp/docs/sdd.md)|
-|Ref/SignalGen|[Link](../../Ref/SignalGen/docs/sdd.md)|
-|Ref/PingReceiver|[Link](../../Ref/PingReceiver/docs/sdd.md)|
-|Apps/ThermalControl|[Link](../../Apps/ThermalControl/docs/sdd.md)|
-|Apps/HeaterIf|[Link](../../Apps/HeaterIf/docs/sdd.md)|
-|Svc/BufferManager|[Link](../../Svc/BufferManager/docs/sdd.md)|
-|Svc/CmdDispatcher|[Link](../../Svc/CmdDispatcher/docs/sdd.md)|
-|Svc/CmdSequencer|[Link](../../Svc/CmdSequencer/docs/sdd.md)|
-|Svc/Seq|[Link](../../Svc/Seq/docs/sdd.md)|
-|Svc/GndIf|[Link](../../Svc/GndIf/docs/sdd.md)|
-|Svc/ActiveRateGroup|[Link](../../Svc/ActiveRateGroup/docs/sdd.md)|
-|Svc/RateGroupDriver|[Link](../../Svc/RateGroupDriver/docs/sdd.md)|
-|Svc/Sched|[Link](../../Svc/Sched/docs/sdd.md)|
-|Svc/ComLogger|[Link](../../Svc/ComLogger/docs/sdd.md)|
-|Svc/CmdRecord|[Link](../../Svc/CmdRecord/docs/sdd.md)|
-|Svc/SocketGndIf|[Link](../../Svc/SocketGndIf/docs/sdd.md)|
-|Svc/BuffGndSockIf|[Link](../../Svc/BuffGndSockIf/docs/sdd.md)|
-|Svc/TlmChan|[Link](../../Svc/TlmChan/docs/sdd.md)|
-|Svc/PassiveTextLogger|[Link](../../Svc/PassiveTextLogger/docs/sdd.md)|
-|Svc/PassiveConsoleTextLogger|[Link](../../Svc/PassiveConsoleTextLogger/docs/sdd.md)|
-|Svc/Time|[Link](../../Svc/Time/docs/sdd.md)|
-|Svc/Cycle|[Link](../../Svc/Cycle/docs/sdd.md)|
-|Svc/PosixTime|[Link](../../Svc/PosixTime/docs/sdd.md)|
-|Svc/ActiveLogger|[Link](../../Svc/ActiveLogger/docs/sdd.md)|
-|Svc/Fatal|[Link](../../Svc/Fatal/docs/sdd.md)|
-|Svc/PolyIf|[Link](../../Svc/PolyIf/docs/sdd.md)|
-|Svc/PolyDb|[Link](../../Svc/PolyDb/docs/sdd.md)|
-|Svc/PrmDb|[Link](../../Svc/PrmDb/docs/sdd.md)|
-|Svc/Ping|[Link](../../Svc/Ping/docs/sdd.md)|
-|Svc/Health|[Link](../../Svc/Health/docs/sdd.md)|
-|Svc/WatchDog|[Link](../../Svc/WatchDog/docs/sdd.md)|
-|Svc/FPport|[Link](../../Svc/FPport/docs/sdd.md)|
-|Svc/FPEvent|[Link](../../Svc/FPEvent/docs/sdd.md)|
-|Svc/QEvent|[Link](../../Svc/QEvent/docs/sdd.md)|
-|Svc/FPManager|[Link](../../Svc/FPManager/docs/sdd.md)|
-|Svc/FPStateMgr|[Link](../../Svc/FPStateMgr/docs/sdd.md)|
-|Svc/FPAction|[Link](../../Svc/FPAction/docs/sdd.md)|
-|Svc/FileUplink|[Link](../../Svc/FileUplink/docs/sdd.md)|
-|Svc/FileDownlink|[Link](../../Svc/FileDownlink/docs/sdd.md)|
-|Svc/AssertFatalAdapter|[Link](../../Svc/AssertFatalAdapter/docs/sdd.md)|
-|Svc/FatalHandler|[Link](../../Svc/FatalHandler/docs/sdd.md)|
-|Svc/FileManager|[Link](../../Svc/FileManager/docs/sdd.md)|
-|Drv/DataTypes|[Link](../../Drv/DataTypes/docs/sdd.md)|
-|Drv/BlockDriver|[Link](../../Drv/BlockDriver/docs/sdd.md)|
-|Fw/FilePacket|[Link](../../Fw/FilePacket/docs/sdd.md)|
-|Fw/Cfg|[Link](../../Fw/Cfg/docs/sdd.md)|
-|Fw/Buffer|[Link](../../Fw/Buffer/docs/sdd.md)|
-|Fw/Comp|[Link](../../Fw/Comp/docs/sdd.md)|
-|Fw/Obj|[Link](../../Fw/Obj/docs/sdd.md)|
-|Fw/Port|[Link](../../Fw/Port/docs/sdd.md)|
-|Fw/Cmd|[Link](../../Fw/Cmd/docs/sdd.md)|
-|Fw/Tlm|[Link](../../Fw/Tlm/docs/sdd.md)|
-|Fw/Prm|[Link](../../Fw/Prm/docs/sdd.md)|
-|Fw/Log|[Link](../../Fw/Log/docs/sdd.md)|
-|Fw/Time|[Link](../../Fw/Time/docs/sdd.md)|
-|Fw/Com|[Link](../../Fw/Com/docs/sdd.md)|
-|Fw/ComFile|[Link](../../Fw/ComFile/docs/sdd.md)|
-|Fw/SerializableFile|[Link](../../Fw/SerializableFile/docs/sdd.md)|
-|Fw/Types|[Link](../../Fw/Types/docs/sdd.md)|
-|Os|[Link](../../Os/docs/sdd.md)|
-|CFDP/Checksum|[Link](../../CFDP/Checksum/docs/sdd.md)|
-|Utils/Hash|[Link](../../Utils/Hash/docs/sdd.md)|
-|Utils/Monitors/FaultMonitor|[Link](../../Utils/Monitors/FaultMonitor/docs/sdd.md)|
-|Utils/Monitors/Monitor|[Link](../../Utils/Monitors/Monitor/docs/sdd.md)|
-|Utils/Monitors/SimpleMonitor|[Link](../../Utils/Monitors/SimpleMonitor/docs/sdd.md)|
-|Utils/Monitors/MSLMonitor|[Link](../../Utils/Monitors/MSLMonitor/docs/sdd.md)|
diff --git a/Ref/docs/sdd.md b/Ref/docs/sdd.md
index b24f9191dd..89cfbc8502 100644
--- a/Ref/docs/sdd.md
+++ b/Ref/docs/sdd.md
@@ -8,52 +8,42 @@ The application illustrates some example application components:
 
 |Component|Description|Link
 |---|---|---|
-|SendBuffApp | A component that sends a buffer | [HTML](../SendBuffApp/docs/sdd.html) [MD](../SendBuffApp/docs/sdd.md) |
-|RecvBuffApp | A component that receives a buffer | [HTML](../RecvBuffApp/docs/sdd.html) [MD](../RecvBuffApp/docs/sdd.md) |
-|BlockDriver  | A notional driver that relays buffers from SendBuffApp to RecvBuffApp | [HTML](../../Drv/BlockDriver/docs/sdd.html) [MD](../../Drv/BlockDriver/docs/sdd.md)|
-|SignalGen | A component that generates telemetry following a waveform| [HTML](../SignalGen/docs/sdd.html) [MD](../SignalGen/docs/sdd.md)|
-|PingReceiver|A test component that gets health pings that can be turned off|[HTML](../SignalGen/docs/sdd.html) [MD](../SignalGen/docs/sdd.md)| 
+|SendBuffApp | A component that sends a buffer | [SDD](../SendBuffApp/docs/sdd.md) |
+|RecvBuffApp | A component that receives a buffer | [SDD](../RecvBuffApp/docs/sdd.md) |
+|BlockDriver  | A notional driver that relays buffers from SendBuffApp to RecvBuffApp | [SDD](../../Drv/BlockDriver/docs/sdd.md)|
+|SignalGen | A component that generates telemetry following a waveform| [SDD](../SignalGen/docs/sdd.md)|
+|PingReceiver|A test component that gets health pings that can be turned off| [SDD](../SignalGen/docs/sdd.md)| 
 
 It interconnects those application components with reusable service components:
 
 |Component|Description|Link
 |---|---|---|
-|ActiveLogger|Logs events for downlink|[HTML](../../Svc/ActiveLogger/docs/sdd.html) [MD](../../Svc/ActiveLogger/docs/sdd.md)|
-|ActiveRateGroup|Executes a rate group by calling components|[HTML](../../Svc/ActiveRateGroup/docs/sdd.html) [MD](../../Svc/ActiveRateGroup/docs/sdd.md)|
-|BufferManager|Manages a pool of buffers|[HTML](../../Svc/BufferManager/docs/sdd.html) [MD](../../Svc/BufferManager/docs/sdd.md)|
-|CmdSequencer|Loads a set of commands from a binary file and executes them|[HTML](../../Svc/CmdSequencer/docs/sdd.html) [MD](../../Svc/CmdSequencer/docs/sdd.md)|
-|CmdDispatcher|Dispatches commands from a ground system to registered components|[HTML](../../Svc/CmddDispatcher/docs/sdd.html) [MD](../../Svc/CmdDispatcher/docs/sdd.md)|
-|FileDownlink|Component to downlink files to ground system|[HTML](../../Svc/FileDownlink/docs/sdd.html) [MD](../../Svc/FileDownlink/docs/sdd.md)|
-|FileManager|Component to perform various file operations|[HTML](../../Svc/FileManager/docs/sdd.html) [MD](../../Svc/FileManager/docs/sdd.md)|
-|FileUplink|Component to receive uplinked files from ground system|[HTML](../../Svc/FileUplink/docs/sdd.html) [MD](../../Svc/FileUplink/docs/sdd.md)|
-|FPManager|Component to handle fault events|[HTML](../../Svc/FPManager/docs/sdd.html) [MD](../../Svc/FPManager/docs/sdd.md)|
-|FPStateMgr|Component to exercise fault behaviors|[HTML](../../Svc/FPStateMgr/docs/sdd.html) [MD](../../Svc/FPStateMgr/docs/sdd.md)|
-|Health|Pings active components in the topology to verify their aliveness|[HTML](../../Svc/Health/docs/sdd.html) [MD](../../Svc/Health/docs/sdd.md)|
-|PrmDb|Loads sets of parameters from storage at startup and provides them to components|[HTML](../../Svc/PrmDb/docs/sdd.html) [MD](../../Svc/PrmDb/docs/sdd.md)|
-|RateGroupDriver|Sends messages to ActiveRateGroup instances to run a cycle|[HTML](../../Svc/RateGroupDriver/docs/sdd.html) [MD](../../Svc/RateGroupDriver/docs/sdd.md)|
-|TlmChan|Provides storage for telemetry channels and periodically sends them to the ground system|[HTML](../../Svc/TlmChan/docs/sdd.html) [MD](../../Svc/TlmChan/docs/sdd.md)|
-|PolyDb|Manages a database of polymorphic data values|[HTML](../../Svc/PolyDb/docs/sdd.html) [MD](../../Svc/PolyDb/docs/sdd.md)|
-
-There is a set of application-level components developed on previous projects that can be used:
+|ActiveLogger|Logs events for downlink| [SDD](../../Svc/ActiveLogger/docs/sdd.md)|
+|ActiveRateGroup|Executes a rate group by calling components| [SDD](../../Svc/ActiveRateGroup/docs/sdd.md)|
+|BufferManager|Manages a pool of buffers| [SDD](../../Svc/BufferManager/docs/sdd.md)|
+|CmdSequencer|Loads a set of commands from a binary file and executes them| [SDD](../../Svc/CmdSequencer/docs/sdd.md)|
+|CmdDispatcher|Dispatches commands from a ground system to registered components| [SDD](../../Svc/CmdDispatcher/docs/sdd.md)|
+|FileDownlink|Component to downlink files to ground system| [SDD](../../Svc/FileDownlink/docs/sdd.md)|
+|FileManager|Component to perform various file operations| [SDD](../../Svc/FileManager/docs/sdd.md)|
+|FileUplink|Component to receive uplinked files from ground system| [SDD](../../Svc/FileUplink/docs/sdd.md)|
+|Health|Pings active components in the topology to verify their aliveness| [SDD](../../Svc/Health/docs/sdd.md)|
+|PrmDb|Loads sets of parameters from storage at startup and provides them to components| [SDD](../../Svc/PrmDb/docs/sdd.md)|
+|RateGroupDriver|Sends messages to ActiveRateGroup instances to run a cycle| [SDD](../../Svc/RateGroupDriver/docs/sdd.md)|
+|TlmChan|Provides storage for telemetry channels and periodically sends them to the ground system| [SDD](../../Svc/TlmChan/docs/sdd.md)|
+|PolyDb|Manages a database of polymorphic data values| [SDD](../../Svc/PolyDb/docs/sdd.md)|
 
-|Component|Description|Link
-|---|---|---|
-|ThermalControl|Provided PID loops for thermal monitor and control|[HTML](../../Apps/ThermalControl/docs/sdd.html) [MD](../../Apps/ThermalControl/docs/sdd.md)|
 
 There is a set of useful utility components that can be used on supported operating systems:
 
 |Component|Description|Link
 |---|---|---|
-|PosixTime|Provides time stamps for telemetry on a posix systems|[HTML](../../Svc/PosixTime/docs/sdd.html) [MD](../../Svc/PosixTime/docs/sdd.md)|
-|PassiveConsoleTextLogger|Prints the text form of events to standard output|[HTML](../../Svc/PassiveConsoleTextLogger/docs/sdd.html) [MD](../../Svc/PassiveConsoleTextLogger/docs/sdd.md)|
-|SocketGndIf|Provides a socket for communicating with the ground system|[HTML](../../Svc/SocketGndIf/docs/sdd.html) [MD](../../Svc/SocketGndIf/docs/sdd.md)|
-
-Each software module that has a Software Design Document written can be found here: [HTML](deployment.html) [MD](Ref.md)
+|PosixTime|Provides time stamps for telemetry on a posix systems| [SDD](../../Svc/PosixTime/docs/sdd.md)|
+|PassiveConsoleTextLogger|Prints the text form of events to standard output| [SDD](../../Svc/PassiveConsoleTextLogger/docs/sdd.md)|
 
 
 ## 2. Topology
 
-The topology of the reference example is the interconnection of all the components used in the reference deployment (a deployment is a set of components connected together and compiled into a binary). There are a large number of connections so it is not feasible to show them all in one diagram. The following sections have views of the topology that show the connections for a particular purpose. The topology diagrams will be broken down into the core set of Command and Data Handling (C&DH) connections that would be reused from project to project as well as the connections unique to the reference example. The diagrams were generated using MagicDraw, while the [XML](../Top/RefTopologyAppAi.xml) defining the topology connections was generated using the MagicDraw plug-in developed for ISF.
+The topology of the reference example is the interconnection of all the components used in the reference deployment (a deployment is a set of components connected together and compiled into a binary). There are a large number of connections so it is not feasible to show them all in one diagram. The following sections have views of the topology that show the connections for a particular purpose. The topology diagrams will be broken down into the core set of Command and Data Handling (C&DH) connections that would be reused from project to project as well as the connections unique to the reference example. The diagrams were generated using MagicDraw, while the XML defining the topology connections was generated using the MagicDraw plug-in developed for ISF.
 
 ### 2.1 Commanding
 
diff --git a/Svc/ActiveLogger/docs/sdd.md b/Svc/ActiveLogger/docs/sdd.md
index dbace473f5..346a750def 100644
--- a/Svc/ActiveLogger/docs/sdd.md
+++ b/Svc/ActiveLogger/docs/sdd.md
@@ -34,9 +34,9 @@ The `Svc::ActiveLogger` component uses the following port types:
 
 Port Data Type | Name | Direction | Kind | Usage
 -------------- | ---- | --------- | ---- | -----
-[`Fw::Log`](../../../Fw/Log/docs/sdd.html) | LogRecv | Input | Synchronous | Receive events from components
-[`Fw::Com`](../../../Fw/Log/docs/sdd.html) | PktSend | Output | n/a | Send event packets to external user
-[`Svc::FatalEvent`](../../../Svc/Fatal/docs/sdd.html) | FatalAnnounce | Output | n/a | Send FATAL event (to health)
+[`Fw::Log`](../../../Fw/Log/docs/sdd.md) | LogRecv | Input | Synchronous | Receive events from components
+[`Fw::Com`](../../../Fw/Log/docs/sdd.md) | PktSend | Output | n/a | Send event packets to external user
+[`Svc::FatalEvent`](../../../Svc/Fatal/docs/sdd.md) | FatalAnnounce | Output | n/a | Send FATAL event (to health)
 
 ### 3.2 Functional Description
 
@@ -98,7 +98,7 @@ Document | Link
 -------- | ----
 Design Checklist | [Link](Checklist_Design.xlsx)
 Code Checklist | [Link](Checklist_Code.xlsx)
-Unit Test Checklist | [Link](Checklist_Unit_test.xlsx)
+Unit Test Checklist | [Link](Checklist_Unit_Test.xls)
 
 ## 6. Unit Testing
 
diff --git a/Svc/ActiveRateGroup/docs/sdd.md b/Svc/ActiveRateGroup/docs/sdd.md
index 392a2e54cd..14800f0fc5 100644
--- a/Svc/ActiveRateGroup/docs/sdd.md
+++ b/Svc/ActiveRateGroup/docs/sdd.md
@@ -35,8 +35,8 @@ The `Svc::ActiveRateGroup` component uses the following port types:
 
 Port Data Type | Name | Direction | Kind | Usage
 -------------- | ---- | --------- | ---- | -----
-[`Svc::Cycle`](../../Cycle/docs/sdd.html) | CycleIn | Input | Asynchronous | Receive a call to run one cycle of the rate group
-[`Svc::Sched`](../../Sched/docs/sdd.html) | RateGroupMemberOut | Output | n/a | Rate group ports
+[`Svc::Cycle`](../../Sched/docs/sdd.md) | CycleIn | Input | Asynchronous | Receive a call to run one cycle of the rate group
+[`Svc::Sched`](../../Sched/docs/sdd.md) | RateGroupMemberOut | Output | n/a | Rate group ports
 
 #### 3.2 Functional Description
 
@@ -98,7 +98,7 @@ Document | Link
 -------- | ----
 Design Checklist | [Link](Checklist_Design.xlsx)
 Code Checklist | [Link](Checklist_Code.xlsx)
-Unit Test Checklist | [Link](Checklist_Unit_Test.xlsx)
+Unit Test Checklist | [Link](Checklist_Unit_Test.xls)
 
 ## 6. Unit Testing
 
diff --git a/Svc/ActiveTextLogger/docs/sdd.md b/Svc/ActiveTextLogger/docs/sdd.md
index 20634e2e07..80ab267bbd 100644
--- a/Svc/ActiveTextLogger/docs/sdd.md
+++ b/Svc/ActiveTextLogger/docs/sdd.md
@@ -27,7 +27,7 @@ ISF-ATL-006 | The `Svc::ActiveTextLogger` component shall attempt to create a ne
 
 The `Svc::ActiveTextLogger` component has the following component diagram:
 
-![`Svc::ActiveTextLogger` Diagram](img/ActiveTextLoggerBDD.jpg "Svc::ActiveTextLogger")
+> TODO
 
 #### 3.1.2 Ports
 
@@ -35,7 +35,7 @@ The `Svc::ActiveTextLogger` component uses the following port types:
 
 Port Data Type | Name | Direction | Kind | Usage
 -------------- | ---- | --------- | ---- | -----
-[`Fw::LogText`](../../../Fw/Log/docs/sdd.html) | TextLogger | Input | Synchronous | Logging port
+[`Fw::LogText`](../../../Fw/Log/docs/sdd.md) | TextLogger | Input | Synchronous | Logging port
 
 ### 3.2 Functional Description
 
@@ -61,25 +61,11 @@ TODO
 
 ## 4. Dictionaries
 
-[Dictionaries](ActiveTextLogger.html)
-
 ## 5. Module Checklists
 
-Document | Link
--------- | ----
-Design Checklist | [Link](Checklist_Design.xlsx)
-Code Checklist | [Link](Checklist_Code.xlsx)
-Unit Test Checklist | [Link](Checklist_Unit_test.xlsx)
-
 ## 6. Unit Testing
 
-[Unit Test Output](../test/ut/output/test.txt)
-
-[Coverage Output - `ActiveTextLoggerImpl.cpp`](../test/ut/output/ActiveTextLoggerImpl.cpp.gcov)
-
-[Coverage Output - `ActiveTextLoggerComponentAc.cpp`](../test/ut/output/ActiveTextLoggerComponentAc.cpp.gcov)
-
-[Report](../test/ut/output/SvcActiveTextLogger_gcov.txt)
+To see unit test coverage run fprime-util check --coverage
 
 ## 7. Change Log
 
diff --git a/Svc/BufferManager/docs/sdd.md b/Svc/BufferManager/docs/sdd.md
index 7eb5e5031f..7b8abdacde 100644
--- a/Svc/BufferManager/docs/sdd.md
+++ b/Svc/BufferManager/docs/sdd.md
@@ -41,16 +41,16 @@ This fixed size is never exceeded by the outstanding allocations.
 Name | Type | Role
 -----| ---- | ----
 `timeCaller` | `Fw::Time` | TimeGet
-`tlmOut` | [`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.html) | Telemetry
-`eventOut` | [`Fw::LogEvent`](../../../Fw/Log/docs/sdd.html) | LogEvent
+`tlmOut` | [`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.md) | Telemetry
+`eventOut` | [`Fw::LogEvent`](../../../Fw/Log/docs/sdd.md) | LogEvent
 
 #### 3.3.2 Component-Specific Ports
 
 Name | Type | Kind | Purpose
 ---- | ---- | ---- | ----
-`bufferSendIn` | [`Fw::BufferSend`](../../../Fw/Buffer/docs/sdd.html) | guarded input | Receives buffers for deallocation
-`bufferGetCallee` | [`Fw::BufferGet`](../../../Fw/Buffer/docs/sdd.html) | guarded input (callee) | Receives requests for allocated buffers and returns the buffers
-`schedIn` | [`Svc::Sched`](../../../Svc/Sched/docs/sdd.html) | sync input (callee) | writes telemetry values (optional, if the user doesn't need BufferManager telemetry)
+`bufferSendIn` | [`Fw::BufferSend`](../../../Fw/Buffer/docs/sdd.md) | guarded input | Receives buffers for deallocation
+`bufferGetCallee` | [`Fw::BufferGet`](../../../Fw/Buffer/docs/sdd.md) | guarded input (callee) | Receives requests for allocated buffers and returns the buffers
+`schedIn` | [`Svc::Sched`](../../../Svc/Sched/docs/sdd.md) | sync input (callee) | writes telemetry values (optional, if the user doesn't need BufferManager telemetry)
 
 ### 3.4 Constants
 
diff --git a/Svc/CmdDispatcher/docs/sdd.md b/Svc/CmdDispatcher/docs/sdd.md
index 8147d5d4ba..96d447a967 100644
--- a/Svc/CmdDispatcher/docs/sdd.md
+++ b/Svc/CmdDispatcher/docs/sdd.md
@@ -32,11 +32,11 @@ The `Svc::CmdDispatcher` component uses the following port types:
 
 Port Data Type | Name | Direction | Kind | Usage
 -------------- | ---- | --------- | ---- | -----
-[`Fw::Cmd`](../../../Fw/Cmd/docs/sdd.html) | cmdSend | Output | n/a | Send commands to components
-[`Fw::CmdResponse`](../../../Fw/Cmd/docs/sdd.html) | compStat | Input | Asynchronous | Port for components to report command status
-[`Fw::CmdResponse`](../../../Fw/Cmd/docs/sdd.html) | seqStatus | Output | n/a | Send command status to command buffer source
-[`Fw::Com`](../../../Fw/Com/docs/sdd.html) | cmdBuff | Input | Asynchronous | Receive command buffer
-[`Fw::CmdReg`](../../../Fw/Cmd/docs/sdd.html) | cmdReg | Input | Synchronous | Command Registration 
+[`Fw::Cmd`](../../../Fw/Cmd/docs/sdd.md) | cmdSend | Output | n/a | Send commands to components
+[`Fw::CmdResponse`](../../../Fw/Cmd/docs/sdd.md) | compStat | Input | Asynchronous | Port for components to report command status
+[`Fw::CmdResponse`](../../../Fw/Cmd/docs/sdd.md) | seqStatus | Output | n/a | Send command status to command buffer source
+[`Fw::Com`](../../../Fw/Com/docs/sdd.md) | cmdBuff | Input | Asynchronous | Receive command buffer
+[`Fw::CmdReg`](../../../Fw/Cmd/docs/sdd.md) | cmdReg | Input | Synchronous | Command Registration 
 
 ### 3.2 Functional Description
 
@@ -99,10 +99,6 @@ sequenceDiagram
 
 `Svc::CmdDispatcher` has no significant algorithms.
 
-## 4. Dictionary
-
-Dictionaries: [HTML](CmdDispatcher.html)
-
 ## 4. Module Checklists
 
 Document | Link
diff --git a/Svc/CmdSequencer/docs/sdd.md b/Svc/CmdSequencer/docs/sdd.md
index b7262b74e6..4cb72797f5 100644
--- a/Svc/CmdSequencer/docs/sdd.md
+++ b/Svc/CmdSequencer/docs/sdd.md
@@ -236,7 +236,7 @@ A utility is provided that will convert a text file listing of commands and thei
 
 It can be run by invoking:
 
-`Gse/bin/run_tinyseqgen.sh <input text file>`
+`fprime-seqgen --help`
 
 The syntax of the file is as follows:
 
@@ -296,7 +296,7 @@ where:
 
 Note that the time is encoded in UTC with an epoch of 1/1/1970.
 
-An example can be seen in [Gse/bin/simple_sequence.seq](../../../Gse/bin/simple_sequence.seq)
+An example can be seen in the F´ GDS repository under `examples/`: https://github.com/fprime-community/fprime-gds/tree/devel/examples
 
 ### 3.4 Component State
 
diff --git a/Svc/FatalHandler/docs/sdd.md b/Svc/FatalHandler/docs/sdd.md
index 34cd51c550..cf3be4a366 100644
--- a/Svc/FatalHandler/docs/sdd.md
+++ b/Svc/FatalHandler/docs/sdd.md
@@ -23,7 +23,7 @@ FH-002 | The `Svc::FatalHandler` component shall suspend the thread calling FATA
 
 The `Svc::FatalHandler` component has the following component diagram:
 
-![`Svc::CmdDispatcher` Diagram](img/CommandDispatcherBDD.jpg "Svc::CmdDispatcher")
+> TODO
 
 #### 3.1.2 Ports
 
@@ -31,7 +31,7 @@ The `Svc::FatalHandler` component uses the following port types:
 
 Port Data Type | Name | Direction | Kind | Usage
 -------------- | ---- | --------- | ---- | -----
-[`Svc::Fatal`](../Fatal/docs/sdd.html) | FatalReceive | Input | Synch | Receive FATAL notifications
+[`Svc::Fatal`](../../Fatal/docs/sdd.md) | FatalReceive | Input | Synch | Receive FATAL notifications
 
 ### 3.2 Functional Description
 
@@ -43,7 +43,7 @@ For Unix variants, it delays for one second before exiting with a segmentation f
 
 The `Svc::FatalHandler` handles FATAL notifications:
 
-![FATAL Notification](img/FatalNotification.jpg) 
+![FATAL Notification](../../Fatal/docs/img/FatalEvent.jpg) 
 
 ### 3.4 State
 
@@ -59,21 +59,9 @@ TBD
 
 ## 4. Module Checklists
 
-Document | Link
--------- | ----
-Design Checklist | [Link](Checklist_Design.xlsx)
-Code Checklist | [Link](Checklist_Code.xlsx)
-Unit Test Checklist | [Link](Checklist_Unit_Test.xls)
-
 ## 5. Unit Testing
 
-[Unit Test Output](../test/ut/output/test.txt)
-
-[Coverage Summary](../test/ut/output/SvcCmdDispatcher_gcov.txt)
-
-[Coverage Output - `CommandDispatcherImpl.cpp`](../test/ut/output/CommandDispatcherImpl.cpp.gcov)
-
-[Coverage Output - `CommandDispatcherComponentAc.cpp`](../test/ut/output/CommandDispatcherComponentAc.cpp.gcov)
+To see unit test coverage run fprime-util check --coverage
 
 ## 6. Change Log
 
diff --git a/Svc/FileDownlink/docs/sdd.md b/Svc/FileDownlink/docs/sdd.md
index 0e44c68ea4..857ee57b98 100644
--- a/Svc/FileDownlink/docs/sdd.md
+++ b/Svc/FileDownlink/docs/sdd.md
@@ -30,7 +30,7 @@ FD-003 | `FileDownlink` shall wait for a cooldown after completing a file downli
 The design of `FileDownlink` assumes the following:
 
 1. File downlink occurs by dividing files into packets
-of type [`Fw::FilePacket`](../../../Fw/FilePacket/docs/sdd.html).
+of type [`Fw::FilePacket`](../../../Fw/FilePacket/docs/sdd.md).
 
 2. One file downlink happens at a time.
 
@@ -44,11 +44,11 @@ of type [`Fw::FilePacket`](../../../Fw/FilePacket/docs/sdd.html).
 Name | Type | Role
 -----| ---- | ----
 `timeCaller` | `Fw::Time` | TimeGet
-`cmdIn` | [`Fw::Cmd`](../../../Fw/Cmd/docs/sdd.html) | Cmd
-`cmdRegOut` | [`Fw::CmdReg`](../../../Fw/Cmd/docs/sdd.html) | CmdReg
-`cmdResponseOut` | [`Fw::CmdResponse`](../../../Fw/Cmd/docs/sdd.html) | CmdResponse
-`tlmOut` | [`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.html) | Telemetry
-`eventOut` | [`Fw::LogEvent`](../../../Fw/Log/docs/sdd.html) | LogEvent
+`cmdIn` | [`Fw::Cmd`](../../../Fw/Cmd/docs/sdd.md) | Cmd
+`cmdRegOut` | [`Fw::CmdReg`](../../../Fw/Cmd/docs/sdd.md) | CmdReg
+`cmdResponseOut` | [`Fw::CmdResponse`](../../../Fw/Cmd/docs/sdd.md) | CmdResponse
+`tlmOut` | [`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.md) | Telemetry
+`eventOut` | [`Fw::LogEvent`](../../../Fw/Log/docs/sdd.md) | LogEvent
 
 #### 3.3.2 Component-Specific Ports
 
@@ -57,8 +57,8 @@ Name | Type | Kind | Purpose
 `sendFile` | `Svc::SendFileRequest` | guarded_input | Enqueues file for downlink
 `fileComplete` | `Svc::SendFileComplete` | output | Emits notifications when a file downlink initiated by a port completes
 `Run` | `Svc::Sched` | async_input | Periodic clock input used to trigger internal state machine
-<a name="bufferGet">`bufferGet`</a> | [`Fw::BufferGet`](../../../Fw/Buffer/docs/sdd.html) | output (caller) | Requests buffers for sending file packets.
-<a name="bufferSendOut">`bufferSendOut`</a> | [`Fw::BufferSend`](../../../Fw/Buffer/docs/sdd.html) | output | Sends buffers containing file packets.
+<a name="bufferGet">`bufferGet`</a> | [`Fw::BufferGet`](../../../Fw/Buffer/docs/sdd.md) | output (caller) | Requests buffers for sending file packets.
+<a name="bufferSendOut">`bufferSendOut`</a> | [`Fw::BufferSend`](../../../Fw/Buffer/docs/sdd.md) | output | Sends buffers containing file packets.
 
 ### 3.4 Constants
 
diff --git a/Svc/FileUplink/docs/sdd.md b/Svc/FileUplink/docs/sdd.md
index bef295dba0..cc1120cfea 100644
--- a/Svc/FileUplink/docs/sdd.md
+++ b/Svc/FileUplink/docs/sdd.md
@@ -19,7 +19,7 @@ ISF-FU-001 | `FileUplink` shall receive file packets, assemble them into files,
 The design of `FileUplink` assumes the following:
 
 1. File uplink occurs by dividing files into packets
-of type [`Fw::FilePacket`](../../../Fw/FilePacket/docs/sdd.html).
+of type [`Fw::FilePacket`](../../../Fw/FilePacket/docs/sdd.md).
 
 2. In the nominal case of file uplink
 
@@ -40,15 +40,15 @@ packets of the next file.
 Name | Type | Role
 -----| ---- | ----
 `timeCaller` | `Fw::Time` | TimeGet
-`tlmOut` | [`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.html) | Telemetry
-`eventOut` | [`Fw::LogEvent`](../../../Fw/Log/docs/sdd.html) | LogEvent
+`tlmOut` | [`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.md) | Telemetry
+`eventOut` | [`Fw::LogEvent`](../../../Fw/Log/docs/sdd.md) | LogEvent
 
 #### 3.3.2 Component-Specific Ports
 
 Name | Type | Kind | Purpose
 ---- | ---- | ---- | ----
-<a name="bufferSendIn">`bufferSendIn`</a> | [`Fw::BufferSend`](../../../Fw/Buffer/docs/sdd.html) | async input | Receives buffers containing file packets.
-<a name="bufferSendOut">`bufferSendOut`</a> | [`Fw::BufferSend`](../../../Fw/Buffer/docs/sdd.html) | output | Returns buffers for deallocation.
+<a name="bufferSendIn">`bufferSendIn`</a> | [`Fw::BufferSend`](../../../Fw/Buffer/docs/sdd.md) | async input | Receives buffers containing file packets.
+<a name="bufferSendOut">`bufferSendOut`</a> | [`Fw::BufferSend`](../../../Fw/Buffer/docs/sdd.md) | output | Returns buffers for deallocation.
 
 ### 3.4 State
 
@@ -99,7 +99,7 @@ to zero and go to DATA mode; otherwise issue a
 
 Upon receipt of a DATA packet *P*, `FileUplink` does the following,
 where *I* is the 
-[sequence index](../../../Fw/FilePacket/docs/sdd.html) 
+[sequence index](../../../Fw/FilePacket/docs/sdd.md) 
 of *P*:
 
 1. If 
diff --git a/Svc/Health/docs/sdd.md b/Svc/Health/docs/sdd.md
index 1e3815fbb1..aeda4e00d1 100644
--- a/Svc/Health/docs/sdd.md
+++ b/Svc/Health/docs/sdd.md
@@ -35,10 +35,10 @@ The Svc::Health component uses the following port types:
 
 Port Data Type | Name | Direction | Kind | Usage
 -------------- | ---- | --------- | ---- | -----
-[`Svc::Ping`](../../../Svc/Ping/docs/sdd.html) | PingSend | Output | n/a | Send ping requests from components
-[`Svc::Ping`](../../../Svc/Ping/docs/sdd.html) | PingReturn | Input | Asynchronous | Receive ping responses from components
-[`Svc::Sched`](../../../Svc/Sched/docs/sdd.html) | Run | Input | Synchronous | Execute periodic behavior
-[`Svc::WatchDog`](../../../Svc/WatchDog/docs/sdd.html) | Wdog | Output | n/a | Send ping requests from components
+[`Svc::Ping`](../../../Svc/Ping/docs/sdd.md) | PingSend | Output | n/a | Send ping requests from components
+[`Svc::Ping`](../../../Svc/Ping/docs/sdd.md) | PingReturn | Input | Asynchronous | Receive ping responses from components
+[`Svc::Sched`](../../../Svc/Sched/docs/sdd.md) | Run | Input | Synchronous | Execute periodic behavior
+[`Svc::WatchDog`](../../../Svc/WatchDog/docs/sdd.md) | Wdog | Output | n/a | Send ping requests from components
 
 ### 3.2 Functional Description
 
@@ -83,7 +83,7 @@ Document | Link
 -------- | ----
 Design Checklist | [Link](Checklist_Design.xlsx)
 Code Checklist | [Link](Checklist_Code.xlsx)
-Unit Test Checklist | [Link](Checklist_Unit_test.xls)
+Unit Test Checklist | [Link](Checklist_Unit_Test.xls)
 
 ## 6. Unit Testing
 The Health unit tests are designed to test interfaces and functionality with the available ports, command processing, telemetry output, EVR and data product generation.
diff --git a/Svc/PolyDb/docs/sdd.md b/Svc/PolyDb/docs/sdd.md
index d71d249554..4706922df0 100644
--- a/Svc/PolyDb/docs/sdd.md
+++ b/Svc/PolyDb/docs/sdd.md
@@ -32,8 +32,8 @@ The Svc::PolyDb component uses the following port types:
 
 Port Data Type | Name | Direction | Kind | Usage
 -------------- | ---- | --------- | ---- | -----
-[`Svc::Poly`](../../PolyIf/docs/sdd.html) | getValue | Input | Guarded | Write `Fw::PolyType` values
-[`Svc::Poly`](../../PolyIf/docs/sdd.html) | setValue | Input | Guarded | Write `Fw::PolyType` values
+[`Svc::Poly`](../../PolyIf/docs/sdd.md) | getValue | Input | Guarded | Write `Fw::PolyType` values
+[`Svc::Poly`](../../PolyIf/docs/sdd.md) | setValue | Input | Guarded | Write `Fw::PolyType` values
 
 #### 3.2 Functional Description
 
@@ -71,7 +71,7 @@ Document | Link
 -------- | ----
 Design Checklist | [Link](Checklist_Design.xlsx)
 Code Checklist | [Link](Checklist_Design.xlsx)
-Unit Test Checklist | [Link](Checklist_Unit_Test.xlsx)
+Unit Test Checklist | [Link](Checklist_Unit_Test.xls)
 
 ## 5. Unit Testing
 
diff --git a/Svc/PolyIf/docs/sdd.md b/Svc/PolyIf/docs/sdd.md
index 5c4045c196..b2723bdef6 100644
--- a/Svc/PolyIf/docs/sdd.md
+++ b/Svc/PolyIf/docs/sdd.md
@@ -4,7 +4,7 @@
 ## 1. Introduction
 
 The `Svc::Poly` is used to pass the polymorphic `Fw::PolyType` between components. 
-See the [`Svc::PolyType`](../../../Fw/Types/docs/sdd.html) description for details on the class.
+See the [`Svc::PolyType`](../../../Fw/Types/docs/sdd.md) description for details on the class.
 
 The arguments are as follows:
 
diff --git a/Svc/PrmDb/docs/sdd.md b/Svc/PrmDb/docs/sdd.md
index 3f182e8292..a38d593914 100644
--- a/Svc/PrmDb/docs/sdd.md
+++ b/Svc/PrmDb/docs/sdd.md
@@ -32,8 +32,8 @@ The `Svc::PrmDb` component uses the following port types:
 
 Port | Name | Direction | Type | Usage
 ---- | ---- | --------- | ---- | -----
-[`Fw::PrmGet`](../../../Fw/Prm/docs/sdd.html) | getPrm | Input | Synchronous | Get a parameter
-[`Fw::PrmSet`](../../../Fw/Prm/docs/sdd.html) | setPrm | Input | Asynchronous | Update a parameter
+[`Fw::PrmGet`](../../../Fw/Prm/docs/sdd.md) | getPrm | Input | Synchronous | Get a parameter
+[`Fw::PrmSet`](../../../Fw/Prm/docs/sdd.md) | setPrm | Input | Asynchronous | Update a parameter
 
 #### 3.2 Functional Description
 
@@ -86,7 +86,7 @@ Document | Link
 -------- | ----
 Design Checklist | [Link](Checklist_Design.xlsx)
 Code Checklist | [Link](Checklist_Code.xlsx)
-Unit Test Checklist | [Link](Checklist_Unit_Test.xlsx)
+Unit Test Checklist | [Link](Checklist_Unit_Test.xls)
 
 ## 5. Dictionary
 
diff --git a/Svc/RateGroupDriver/docs/sdd.md b/Svc/RateGroupDriver/docs/sdd.md
index 14d957e2a1..e23a64f1e9 100644
--- a/Svc/RateGroupDriver/docs/sdd.md
+++ b/Svc/RateGroupDriver/docs/sdd.md
@@ -32,8 +32,8 @@ The Svc::RateGroupDriver component uses the following port types:
 
 Port Data Type | Name | Direction | Kind | Usage
 -------------- | ---- | --------- | ---- | -----
-[`Svc::Cycle`](../Sched/docs/sdd.html) | CycleIn | Input | Synchronous | Receive the system tick
-[`Svc::Cycle`](../Sched/docs/sdd.html) | CycleOut| Output | n/a | Used to drive rate groups
+[`Svc::Cycle`](../../Sched/docs/sdd.md) | CycleIn | Input | Synchronous | Receive the system tick
+[`Svc::Cycle`](../../Sched/docs/sdd.md) | CycleOut| Output | n/a | Used to drive rate groups
 
 #### 3.2 Functional Description
 
@@ -86,7 +86,7 @@ Document | Link
 -------- | ----
 Design Checklist | [Link](Checklist_Design.xlsx)
 Code Review Checklist | [Link](Checklist_Code.xlsx)
-Unit Test Checklist | [Link](Checklist_Unit_Test.xlsx)
+Unit Test Checklist | [Link](Checklist_Unit_Test.xls)
 
 ## 6. Unit Testing
 
diff --git a/Svc/TlmChan/docs/sdd.md b/Svc/TlmChan/docs/sdd.md
index 6cd8086d92..206e1aaa62 100644
--- a/Svc/TlmChan/docs/sdd.md
+++ b/Svc/TlmChan/docs/sdd.md
@@ -35,10 +35,10 @@ The `Svc::TlmChan` component uses the following port types:
 
 Port Data Type | Name | Direction | Kind | Usage
 -------------- | ---- | --------- | ---- | -----
-[`Svc::Sched`](../../Sched/docs/sdd.html) | Run | Input | Asynchronous | Execute a cycle to write changed telemetry channels
-[`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.html) | TlmRecv | Input | Synchronous Input | Update a telemetry channel
-[`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.html) | TlmGet | Input | Synchronous Input | Read a telemetry channel
-[`Fw::Com`](../../../Fw/Com/docs/sdd.html) | PktSend | Output | n/a | Write a set of packets with updated telemetry
+[`Svc::Sched`](../../Sched/docs/sdd.md) | Run | Input | Asynchronous | Execute a cycle to write changed telemetry channels
+[`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.md) | TlmRecv | Input | Synchronous Input | Update a telemetry channel
+[`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.md) | TlmGet | Input | Synchronous Input | Read a telemetry channel
+[`Fw::Com`](../../../Fw/Com/docs/sdd.md) | PktSend | Output | n/a | Write a set of packets with updated telemetry
 
 #### 3.2 Functional Description
 
@@ -81,7 +81,7 @@ Document | Link
 -------- | ----
 Design Checklist | [Link](Checklist_Design.xlsx)
 Code Checklist  | [Link](Checklist_Code.xlsx)
-Unit Test Checklist  | [Link](Checklist_Unit_Test.xlsx)
+Unit Test Checklist  | [Link](Checklist_Unit_Test.xls)
 
 ## 6. Unit Testing
 
diff --git a/Svc/TlmPacketizer/docs/sdd.md b/Svc/TlmPacketizer/docs/sdd.md
index d23f5397cb..09e363fceb 100644
--- a/Svc/TlmPacketizer/docs/sdd.md
+++ b/Svc/TlmPacketizer/docs/sdd.md
@@ -34,9 +34,9 @@ The `Svc::TlmChan` component uses the following port types:
 
 Port Data Type | Name | Direction | Kind | Usage
 -------------- | ---- | --------- | ---- | -----
-[`Svc::Sched`](../../Sched/docs/sdd.html) | Run | Input | Asynchronous | Execute a cycle to write changed telemetry channels
-[`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.html) | TlmRecv | Input | Synchronous Input | Update a telemetry channel
-[`Fw::Com`](../../../Fw/Com/docs/sdd.html) | PktSend | Output | n/a | Write a set of packets with updated telemetry
+[`Svc::Sched`](../../Sched/docs/sdd.md) | Run | Input | Asynchronous | Execute a cycle to write changed telemetry channels
+[`Fw::Tlm`](../../../Fw/Tlm/docs/sdd.md) | TlmRecv | Input | Synchronous Input | Update a telemetry channel
+[`Fw::Com`](../../../Fw/Com/docs/sdd.md) | PktSend | Output | n/a | Write a set of packets with updated telemetry
 
 #### 3.2 Functional Description
 
@@ -50,10 +50,6 @@ When a call to the `Run()` interface is called, the packet writes are locked and
 
 #### 3.3.1 External User Option
 
-This diagram shows the scenario where telemetry channels are written to packets:
-
-![External User Scenario](img/ExternalUserScenario.jpg) 
-
 ### 3.4 State
 
 `Svc::TlmPacketizer` has no state machines.
@@ -65,23 +61,11 @@ A configuration value in `TlmPacketizerImplCfg.h` defines a set of hash buckets
 
 ## 4. Dictionaries
 
-Dictionaries: [HTML](TlmPacketizer.html) [MD](TlmPacketizer.md)
-
 ## 5. Module Checklists
 
-Document | Link
--------- | ----
-Design Checklist | [Link](Checklist_Design.xlsx)
-Code Checklist  | [Link](Checklist_Code.xlsx)
-Unit Test Checklist  | [Link](Checklist_Unit_Test.xlsx)
-
 ## 6. Unit Testing
 
-File | Contents
----- | --------
-Unit Test Output | [Link](../test/ut/output/output.txt)
-Coverage - TlmPacketizerComponentImpl.cpp | [Link](../test/ut/output/TlmChanImpl.cpp.gcov)
-Coverage - TlmPacketizerComponentAc.cpp | [Link](../test/ut/output/TlmPacketizerComponentAc.cpp.gcov)
+To see unit test coverage run fprime-util check --coverage
 
 ## 7. Change Log
 
diff --git a/ci/README.md b/ci/README.md
index 6375414159..46bfaa0b30 100644
--- a/ci/README.md
+++ b/ci/README.md
@@ -1,5 +1,7 @@
 # F´Continuous Integration
 
+> Note: The information below is historical. Modern F´ uses GitHub Action for all of its CI.
+
 F´continuous integration was developed to work with Jenkins. The continuous integration project is
 designed to checkout a new pull request that has been submitted to F´, merge it with the base 
 branch, and then build the merged construct. Then the unit tests are built and run against this
@@ -16,11 +18,9 @@ a given pull request. It does not build on a set interval, nor does it build a s
 
 The Jenkins CI is setup to be built inside a docker container. This docker container is used to
 encapsulate the exact build environment without needing to setup a specific Jenkins machine with
-this build environment. It needs to be run on a Docker capable Jenkins machine. The Docker setup
-that powers this is at: [mk/docker](../docker/).
+this build environment. It needs to be run on a Docker capable Jenkins machine.
 
-Once Jenkins CI builds the Docker container from the Dockerfile, it runs the Python Test Framework,
-[ptf](/ptf), which includes the following test suites:
+Once Jenkins CI builds the Docker container from the Dockerfile, it runs the Python Test Framework, which includes the following test suites:
 
  1. Reference Build and Unit Tests
  2. Autocoder Unit Tests
diff --git a/docs/Tutorials/GpsTutorial/Tutorial.md b/docs/Tutorials/GpsTutorial/Tutorial.md
index efd50bdf52..ba2da79544 100644
--- a/docs/Tutorials/GpsTutorial/Tutorial.md
+++ b/docs/Tutorials/GpsTutorial/Tutorial.md
@@ -22,8 +22,8 @@ for use as a demo or to help debug issues that come up when going through the tu
 
 ## Prerequisites
 
-This tutorial assumes the user has gone through and understood [Getting Started Tutorial](../HelloWorld/Tutorial.md)
-and [MathComponent Tutorial](../MathComponent/Tutorial.md)
+This tutorial assumes the user has gone through and understood [HelloWorld Tutorial](../README.md)
+and [MathComponent Tutorial](../README.md)
 
 This tutorial requires the user to have some basic software skills and have installed F´. The prerequisite skills to
 understand this tutorial are as follows:
@@ -35,7 +35,7 @@ understand this tutorial are as follows:
 
 Installation can be done by following the installation guide found at: [INSTALL.md](../../INSTALL.md). This guide
 will walk the user through the installation process and verify the installation. In addition, users may wish to
-follow the [Getting Started Tutorial](../HelloWorld/Tutorial.md) in order to get a feel for the F´ environment and
+follow the [HelloWorld Tutorial](../README.md) in order to get a feel for the F´ environment and
 tools.
 
 ## Creating a Custom F´ Component
@@ -56,8 +56,8 @@ diagram captures the ports needed for our desired functionality.
 The F’ designs are specified by XML files that are processed by code generators to create C++ source and header files.
 An XML file represents a single entity in the F´ system (Component, Port, Serializable, or Deployment). Command, Event,
 and Telemetry Channel specifications are also written in XML.  Further information is in the full F´ user guide.
-[User Guide](../../UsersGuide/FprimeUserGuide.pdf). This application does not need any custom ports, as we are using the
-standard ports to create our GPS handler. Custom ports can be seen in the [Math Component Tutorial](../MathComponent/Tutorial.md).
+[User Guide](https://nasa.github.io/fprime/UsersGuide/guide.html). This application does not need any custom ports, as we are using the
+standard ports to create our GPS handler. Custom ports can be seen in the [Math Component Tutorial](../README.md).
 
 In this section, we will create a directory for our GPS component, and design the component through XML. The first step in making the component is to make a project directory to hold our project, and a component subdirectory for our GPS.
 
@@ -853,12 +853,12 @@ which represents our software.
 Sample versions of these files are provided below and are annotated with comments representing the changes
 made to support the Gps Application. **Note:** These files are available in a working repository at:
 [https://github.com/LeStarch/fprime/tree/gps-application](https://github.com/LeStarch/fprime/tree/gps-application)
-in case the user prefers a direct checkout of working code.  The files are linked below:
+in case the user prefers a direct checkout of working code.  The files are listed below:
 
-1. [Top/GpsAppTopologyAi.xml](GpsApp/Top/GpsAppTopologyAppAi.xml)
-2. [Top/Components.hpp](GpsApp/Top/Components.hpp)
-3. [Top/Topology.cpp](GpsApp/Top/Topology.cpp)
-4. [Top/Main.cpp](GpsApp/Top/Main.cpp)
+1. `GpsApp/Top/GpsAppTopologyAi.xml`
+2. `GpsApp/Top/Components.hpp`
+3. `GpsApp/Top/Topology.cpp`
+4. `GpsApp/Top/Main.cpp`
 
 
 We will also need to update the `CMakeLists.txt` in the `Top` directory to change the name of "RefTopologyAppAi.xml" to
@@ -902,7 +902,7 @@ If you see output similar to the following, when running with the USB GPS you ha
 development of our tutorial. We'll discuss how to cross compile for the Raspberry PI and run on the Raspberry pi next.
 
 Once the ground system loads in the user's browser, the user can start seeing what the software is doing. If it doesn't
-load, then the user should go navigate to: https://localhost:5000.
+load, then the user should go navigate to: `https://localhost:5000`.
 
 First, click on the "Channels" tab at the top. The user should at least see the "rateGroup1Comp.RgMaxTime" channel. If
 the GPS is working and has lock, then the user should see the GPS channels as well. This is seen below.  Later we will
diff --git a/docs/UsersGuide/best/dynamic-memory.md b/docs/UsersGuide/best/dynamic-memory.md
index 6f87664343..f4b5d6a48d 100644
--- a/docs/UsersGuide/best/dynamic-memory.md
+++ b/docs/UsersGuide/best/dynamic-memory.md
@@ -112,7 +112,7 @@ This component is designed for simplicity of implementation. System memory usage
 multiplied by the size of the memory regions. This memory is allocated as a large array on the stack. Valid memory 
 allocations will always be returned or a software error will be tripped.
 
-Svc.StaticMemory is described in more detail [here](../api/c++/html/svc_static_memory.html).
+Svc.StaticMemory is described in more detail [here](../api/c++/html/svc_static_memory_component.html).
 
 **When To Use Svc.StaticMemory**
 
diff --git a/docs/UsersGuide/best/ground-interface.md b/docs/UsersGuide/best/ground-interface.md
index 27c9d759be..33323d1aa2 100644
--- a/docs/UsersGuide/best/ground-interface.md
+++ b/docs/UsersGuide/best/ground-interface.md
@@ -84,10 +84,10 @@ nothing to retry.
 
 Uplink handles received data, unpacks F´ data types, and routes these to the greater F´ system. In a typical formation,
 these com buffers are sent to the command dispatcher and raw buffers are sent to the file uplink. Uplink is implemented with
-the [Svc.Deframer](../api/c++/html/svc_deframer.html) component. This component may be rate group driven in which case
+the [Svc.Deframer](../api/c++/html/svc_deframer_component.html) component. This component may be rate group driven in which case
 it polls for data or it may be driven by a driver's receive output port in which case it handles the data on that
 incoming port call. Svc.Deframer implements the
-[DeframingProtocolInterface](../api/c++/html/class_deframing_protocol_interface.html).
+[DeframingProtocolInterface](../api/c++/html/class_svc_1_1_deframing_protocol_interface.html).
 
 Svc.Deframer unpacks F´ data from the supplied buffer using a
 [Svc::DeframingProtocol](../api/c++/html/class_svc_1_1_deframing_protocol.html), which calls back through the
@@ -99,8 +99,8 @@ complete. This buffer is updated with the latest data and then processed for mes
 ### Downlink
 
 Downlink takes in F´ data and wraps the data with bytes supporting the necessary protocol. This assembled data is then
-sent to the driver for handling. Downlink is implemented with the [Svc.Framer](../api/c++/html/svc_framer.html)
-component, which implements the [FramingProtocolInterface](../api/c++/html/class_framing_protocol_interface.html).
+sent to the driver for handling. Downlink is implemented with the [Svc.Framer](../api/c++/html/svc_framer_component.html)
+component, which implements the [FramingProtocolInterface](../api/c++/html/class_svc_1_1_framing_protocol_interface.html).
 
 Svc.Framer packs F´ data using a [Svc::FramingProtocol](../api/c++/html/class_svc_1_1_framing_protocol.html), which
 calls back through the FramingProtocolInterface to send framed packets out to the driver.
@@ -113,7 +113,7 @@ To add a custom wire protocol an implementation needs to be written for two inte
 
 Svc::FramingProtocol implementors need to implement one function: frame, taking in a pointer to the data to frame, the
 size of the data, and a packet type for the data. The base class supplies a
-[FramingProtocolInterface](../api/c++/html/class_framing_protocol_interface.html) member variable, `m_interface`, that
+[FramingProtocolInterface](../api/c++/html/class_svc_1_1_framing_protocol_interface.html) member variable, `m_interface`, that
 allows implementors to call out for allocating data and sending the newly framed data. A minimal implementation is:
 
 ```c++
@@ -134,7 +134,7 @@ Here the protocol starts a frame with `0xdeadbeef`, followed by the data size, a
 
 Svc::DeframingProtocol implementors need to implement one function: deframe, taking in a circular buffer supplying data,
 filling the needed variable, and returning a status. The base class supplies a
-[DeframingProtocolInterface](../api/c++/html/class_deframing_protocol_interface.html) member variable, `m_interface`,
+[DeframingProtocolInterface](../api/c++/html/class_svc_1_1_deframing_protocol_interface.html) member variable, `m_interface`,
 that allows implementors to call out for allocating data and routing the deframed data. A minimal implementation is:
 
 ```c++
diff --git a/docs/UsersGuide/best/hub-pattern.md b/docs/UsersGuide/best/hub-pattern.md
index b539e5ca29..0a5189c16c 100644
--- a/docs/UsersGuide/best/hub-pattern.md
+++ b/docs/UsersGuide/best/hub-pattern.md
@@ -16,5 +16,5 @@ ARINC 653 Channels, High-speed hardware buses between nodes, and UARTs between n
 
 ## Generic Hub
 
-There is now a standard implementation of the hub pattern. The [GenericHub](../api/c++/html/svc_generic_hub.html) is an
+There is now a standard implementation of the hub pattern. The [GenericHub](../api/c++/html/svc_generic_hub_component.html) is an
 implementation of the hub pattern that passes through F´ ports and `Fw::Buffer`s.
\ No newline at end of file
diff --git a/docs/UsersGuide/cmake/Customization.md b/docs/UsersGuide/cmake/Customization.md
index de0739dacf..9e842d1dff 100644
--- a/docs/UsersGuide/cmake/Customization.md
+++ b/docs/UsersGuide/cmake/Customization.md
@@ -15,7 +15,7 @@ Adding a utility executable that depends on F prime code is easy. Just perform a
 making this call in order to set the utility's name. This executable will then be output as part
 of the deployment's build. A separate tools deployment may be used to build only utilities.
 
-See: [API](API.md)
+See: [API](cmake-api.md)
 
 ## Custom Build-System Commands (Make Targets)
 
@@ -29,9 +29,9 @@ add targets that don't have both per-module and global steps.
 See:
   - [add_custom_target](https://cmake.org/cmake/help/latest/command/add_custom_target.html) to view
 information on CMake targets.
-  - [Target](support/Target.md) for the format of the target file
-  - [API](API.md) for the syntax of the register call
-  - [dict.cmake](../target/dict.cmake) as an example of adding targets
+  - [Target](Targets.md) for the format of the target file
+  - [API](cmake-api.md) for the syntax of the register call
+  - [F´ standard targets](https://github.com/nasa/fprime/tree/devel/cmake/target) as an example of adding targets
 
 **Example (Raw Global Target):**
 
diff --git a/docs/UsersGuide/cmake/Migration.md b/docs/UsersGuide/cmake/Migration.md
index 818095db8a..71887622b7 100644
--- a/docs/UsersGuide/cmake/Migration.md
+++ b/docs/UsersGuide/cmake/Migration.md
@@ -36,9 +36,9 @@ maintained. This is done on a per-module basis. These dependencies are then roll
 2. `register_fprime_module`: add library to the build. Done for **all** components and ports.
 3. `register_fprime_executable`: add an executable output to the build. Done for **all** Topologies.
 
-A guide to `CMakeLists.txt` for Modules is found here: [module](module.md)
+A guide to `CMakeLists.txt` for Modules is found here: [module](https://nasa.github.io/fprime/UsersGuide/api/cmake/module.html)
 
-A guide to the API function calls is found here: [API](API.md)
+A guide to the API function calls is found here: [API](cmake-api.md)
 
 ## Creating Deployments
 
@@ -55,9 +55,9 @@ done in the deployment `CMakeLists.txt` with the CMake `project` command.
 In one of the modules added in the Deployment with `add_fprime_subdirectory`, one or more executable
 should be added with `register_fprime_executable`.
 
-A guide to `CMakeLists.txt` for Deployments is found here: [deployment](deployment.md)
+A guide to `CMakeLists.txt` for Deployments is found here: [deployment](https://nasa.github.io/fprime/UsersGuide/api/cmake/deployment-CMakeLists.txt-template.html)
 
-A guide to the API function calls is found here: [API](API.md)
+A guide to the API function calls is found here: [API](cmake-api.md)
 
 ## Cross-Compiling
 
@@ -73,9 +73,9 @@ compilations. i.e. unit tests are treated as a separate platform.
 
 This is a **difference from the old make system**.
 
-A guide to toolchains can be found here: [toolchain](toolchain.md)
+A guide to toolchains can be found here: [toolchain](cmake-toolchains.md)
 
-A guide to platforms can be found here: [platform](platform.md)
+A guide to platforms can be found here: [platform](cmake-platforms.md)
 
 
 ## Building Deployments
@@ -139,5 +139,5 @@ cd ../build_ut
 make check
 ```
 ## Global Build Options:
- - Options: [Options](Options.md) describes the CMake system options
- - Targets: [Targets](targets/Targets.md) describes built in support targets like `dict`
\ No newline at end of file
+ - Options: [Options](https://nasa.github.io/fprime/UsersGuide/api/cmake/options.html) describes the CMake system options
+ - Targets: [Targets](Targets.md) describes built in support targets like `dict`
\ No newline at end of file
diff --git a/docs/UsersGuide/cmake/cmake-advanced.md b/docs/UsersGuide/cmake/cmake-advanced.md
index d268af0a4c..3c847f8eb7 100644
--- a/docs/UsersGuide/cmake/cmake-advanced.md
+++ b/docs/UsersGuide/cmake/cmake-advanced.md
@@ -79,8 +79,8 @@ provide libraries and executables to the system.
 Top-level deployment directories (`Ref` folder) use the deployment templates. It is there to setup
 the entry point to the build system.
 
-For more on Modules, see: [module.md](module.md)
-For more on Deployments, see: [deployment.md](deployment.md)
+For more on Modules, see: [module.md](https://nasa.github.io/fprime/UsersGuide/api/cmake/module.html)
+For more on Deployments, see: [deployment.md](https://nasa.github.io/fprime/UsersGuide/api/cmake/deployment-CMakeLists.txt-template.html)
 
 
 ## Cross-Compiling With CMake
@@ -103,4 +103,4 @@ library/build system, adding custom make targets, building utilities, etc. These
 here: [Customization](Customization.md)
 
 
-Further documentation can be found in the SDD: [SDD.md](sdd.md)
\ No newline at end of file
+Further documentation can be found in the SDD: [SDD.md](https://github.com/nasa/fprime/blob/devel/cmake/docs/sdd.md)
\ No newline at end of file
diff --git a/docs/UsersGuide/cmake/cmake-api.md b/docs/UsersGuide/cmake/cmake-api.md
index e4131ef917..c72d10d81f 100644
--- a/docs/UsersGuide/cmake/cmake-api.md
+++ b/docs/UsersGuide/cmake/cmake-api.md
@@ -6,7 +6,7 @@ descriptions of module-level functions. Options describe the runtime options tha
 takes. Users wanting to alter the build should look here.
 
 - [API](../api/cmake/API.md): Module API function documentation
-- [Options](../api/cmake/Options.md): Runtime build options
+- [Options](../api/cmake/options.md): Runtime build options
 
 An index of all available documentation is available at [CMake API Index](../api/cmake/index.md). This documentation is generated from the source code available [here](https://github.com/nasa/fprime/tree/devel/cmake). Below is a description of some of the main API functionalities.
 
diff --git a/docs/UsersGuide/cmake/cmake-intro.md b/docs/UsersGuide/cmake/cmake-intro.md
index 9df9fe772e..129fc0e9cf 100644
--- a/docs/UsersGuide/cmake/cmake-intro.md
+++ b/docs/UsersGuide/cmake/cmake-intro.md
@@ -48,14 +48,10 @@ link to all the other modules they use.
 
 `add_fprime_subdirectory`, `register_fprime_module`, `register_fprime_executable` docs are here: [API](./cmake-api.md).
 
-A template module `CMakeLists.txt` is documented: [module-CMakeLists.txt-template.md](../api/cmake/module-CMakeLists.txt-template.md)
-and the template is available here:
-[https://github.com/nasa/fprime/tree/master/cmake/module-CMakeLists.txt.template](https://github.com/nasa/fprime/tree/master/cmake/module-CMakeLists.txt.template).
+A template module `CMakeLists.txt` is documented: [module-CMakeLists.txt-template.md](https://nasa.github.io/fprime/UsersGuide/api/cmake/module-CMakeLists.txt-template.html)
 Remember it should be renamed to `CMakeLists.txt` in your module's folder.
 
-A template deployment `CMakeLists.txt` is documented: [deployment-CMakeLists.txt-template.md](../api/cmake/deployment-CMakeLists.txt-template.md)
-and available here:
-[https://github.com/nasa/fprime/tree/master/cmake/deployment-CMakeLists.txt.template]([https://github.com/nasa/fprime/tree/master/cmake/deployment-CMakeLists.txt.template]).
+A template deployment `CMakeLists.txt` is documented: [deployment-CMakeLists.txt-template.md](https://nasa.github.io/fprime/UsersGuide/api/cmake/deployment-CMakeLists.txt-template.html).
 Remember it should be renamed to `CMakeLists.txt` in your deployments folder.
 
 When building a module, ensure it at least calls `register_fprime_module`. Deployments may call
diff --git a/docs/UsersGuide/dev/baremetal-multicore.md b/docs/UsersGuide/dev/baremetal-multicore.md
index 99c4c05cbb..02f29f9338 100644
--- a/docs/UsersGuide/dev/baremetal-multicore.md
+++ b/docs/UsersGuide/dev/baremetal-multicore.md
@@ -85,7 +85,7 @@ design active components. It is impractical to assume that all projects can, at
 use of the framework provided **Active Components**.  Thus F´ was augmented with the ability to virtualize threading, such
 that projects could use these components during development as they migrate to a fully passive-component system.
 
-To activate this feature see: [Configuring F´](../user/configuration.md). Continue reading for all the fancy details of
+To activate this feature see: [Configuring F´](../dev/configuring-fprime.md). Continue reading for all the fancy details of
 how this system is designed.  TODO: put a link to the thread scheduler API documentation.
 
 ### Defining Custom Tasks
diff --git a/docs/UsersGuide/dev/configure-ide.md b/docs/UsersGuide/dev/configure-ide.md
index d2b331f5f7..e626ba2aea 100644
--- a/docs/UsersGuide/dev/configure-ide.md
+++ b/docs/UsersGuide/dev/configure-ide.md
@@ -75,7 +75,7 @@ the IDE as deliberate settings, but they can be set as part of the build setup.
 | **Custom Configuration**   | | |
 | -DFPRIME_CONFIG_DIR        | path/to/project/conf/dir    | **unneeded** |
 
-**Note:** See [CMake Settings](cmake-settings.md) for a further description of these and other settings.
+**Note:** See [CMake Settings](https://nasa.github.io/fprime/UsersGuide/api/cmake/options.html) for a further description of these and other settings.
 
 ## IDE Examples
 
diff --git a/docs/UsersGuide/dev/gds-cli-dev.md b/docs/UsersGuide/dev/gds-cli-dev.md
index df609612c2..234ff39f21 100644
--- a/docs/UsersGuide/dev/gds-cli-dev.md
+++ b/docs/UsersGuide/dev/gds-cli-dev.md
@@ -1,6 +1,6 @@
 # GDS CLI - Developer's Guide
 
-This guide is for programmers who intend to maintain and develop code for the Ground Data System's command-line interface suite. For regular users who just want to use these CLI tools, please see the [user guide](../../docs/UsersGuide/gds/GDS_CLI_USER_GUIDE.md).
+This guide is for programmers who intend to maintain and develop code for the Ground Data System's command-line interface suite. For regular users who just want to use these CLI tools, please see the [user guide](../gds/gds-cli.md).
 
 - [CLI Requirements](#cli-requirements)
     - [Primary Requirements](#primary-requirements)
diff --git a/docs/UsersGuide/user/enum-arr-ser.md b/docs/UsersGuide/user/enum-arr-ser.md
index b0f528fa46..d6eb8b8e89 100644
--- a/docs/UsersGuide/user/enum-arr-ser.md
+++ b/docs/UsersGuide/user/enum-arr-ser.md
@@ -10,7 +10,7 @@ system unless otherwise noted. Included in this document:
     - [Enums](#enums)
     - [Arrays](#arrays)
     - [Serializables](#serializables)
-    - [C++ Classes](c-classes)
+    - [C++ Classes](#c-classes)
 - [Conclusion](#conclusion)
 
 # Primitive Types
diff --git a/docs/UsersGuide/user/fpp-user-guide.md b/docs/UsersGuide/user/fpp-user-guide.md
index 4500db24b6..eaf7628021 100644
--- a/docs/UsersGuide/user/fpp-user-guide.md
+++ b/docs/UsersGuide/user/fpp-user-guide.md
@@ -5,5 +5,5 @@ F´ v3 introduced a new way of modeling with F´, the FPP (F Prime Prime) modeli
 To go into more detail, the full FPP documentation can be found here: [FPP Wiki](https://github.com/fprime-community/fpp/wiki).
 
 **Quick links:**
-- [FPP User Guide](https://fprime-community.github.io/fpp/fpp-users-guide.html)
-- [FPP Language Specification](https://fprime-community.github.io/fpp/fpp-spec.html)
+- [FPP User Guide](https://nasa.github.io/fpp/fpp-users-guide.html)
+- [FPP Language Specification](https://nasa.github.io/fpp/fpp-spec.html)
diff --git a/docs/UsersGuide/user/v3-migration-guide.md b/docs/UsersGuide/user/v3-migration-guide.md
index 7c75afbdf7..503360f1ad 100644
--- a/docs/UsersGuide/user/v3-migration-guide.md
+++ b/docs/UsersGuide/user/v3-migration-guide.md
@@ -16,7 +16,7 @@ without needing to convert everything.
 
 `fpp-from-xml` is a tool included with the FPP tool suit to help convert from XML to FPP.  Further information on the
 FPP tool suite and FPP in general can be found at:
-[https://fprime-community.github.io/fpp/fpp-users-guide.html](https://fprime-community.github.io/fpp/fpp-users-guide.html)
+[https://nasa.github.io/fpp/fpp-users-guide.html](https://nasa.github.io/fpp/fpp-users-guide.html)
 
 ## Topology Changes
 
@@ -61,7 +61,7 @@ this->cmdResponse_out(opCode, cmdSeq, Fw::COMMAND_OK);
 ```c++
 this->cmdResponse_out(opCode, cmdSeq, Fw::CmdResponse::OK);
 ```
-[source](https://github.com/nasa/fprime/blob/release/v3.0.0/Ref/SignalGen/SignalGen.cpp)
+[source](https://github.com/nasa/fprime/blob/034216bc73ac91e78ba03fda25362050a695a960/Ref/SignalGen/SignalGen.cpp)
 
 The following user-facing enumeration types must be updated.
 
diff --git a/docs/projects.md b/docs/projects.md
index e1585f91c8..6b79e04935 100644
--- a/docs/projects.md
+++ b/docs/projects.md
@@ -13,6 +13,6 @@ Here are the projects and programs identified applying the F´ code:
 | [Mars Helicopter (Ingenuity)](https://mars.nasa.gov/technology/helicopter/) | Airborne | [NASA's JPL](https://www.jpl.nasa.gov/) | Linux | Qualcomm’s Snapdragon 801 | Jul. 30, 2020 | Ongoing | Target: Mars |
 | [Lunar Flashlight CubeSat](https://www.jpl.nasa.gov/missions/lunar-flashlight) | Technology Demonstration, CubeSat/SmallSat | [NASA's JPL](https://www.jpl.nasa.gov/) | VxWorks | Sphinx (GR712 - LEON3FT SPARC) | Dec. 11, 2022 |Ongoing | [Publication](https://digitalcommons.usu.edu/cgi/viewcontent.cgi?article=5263&context=smallsat) - Target: Moon |
 | [Near Earth Asteroid Scout CubeSat](https://www.jpl.nasa.gov/missions/near-earth-asteroid-scout-neascout) | Technology Demonstration, CubeSat/SmallSat | [NASA's JPL](https://www.jpl.nasa.gov/) | VxWorks | Sphinx (GR712 - LEON3FT SPARC) | Nov. 16, 2022 | Ongoing | [Publication](https://digitalcommons.usu.edu/cgi/viewcontent.cgi?article=5263&context=smallsat) - Target: Asteroids and Comets |
-| [OWLS (Ocean Worlds Life Surveyor instrument)](https://ml.jpl.nasa.gov/projects/owls/owls.html) | Instrument | [NASA's JPL](https://www.jpl.nasa.gov/) |  |  |  |  |  |
+| [OWLS (Ocean Worlds Life Surveyor instrument)](https://www.jpl.nasa.gov/go/owls) | Instrument | [NASA's JPL](https://www.jpl.nasa.gov/) |  |  |  |  |  |
 | [CADRE (Cooperative Autonomous Distributed Robotic Explorers)](https://www.nasa.gov/directorates/spacetech/game_changing_development/projects/CADRE) | Robot | [NASA's JPL](https://www.jpl.nasa.gov/) |  |  |  |  |  |
 | [COLDArm (Cold Operable Lunar Deployable Arm)](https://www.nasa.gov/feature/cold-operable-lunar-deployable-arm-coldarm/) | Robotic arm | [NASA's JPL](https://www.jpl.nasa.gov/) |  |  |  |  |  |
diff --git a/docs/upcoming.md b/docs/upcoming.md
index db0601efc7..ebc89d4e19 100644
--- a/docs/upcoming.md
+++ b/docs/upcoming.md
@@ -11,7 +11,7 @@ The F´  team conducts a number of events to build familiarity with the product
 
 ## F´ Tutorial
 
-The F´ tutorial is intended to help new users familiarize themselves with the F´ framework and tool suite. Instructors will walk through the [LED Blinker Tutorial](https://fprime_community.github.io/fprime-workshop-led-blinker), covering the following:
+The F´ tutorial is intended to help new users familiarize themselves with the F´ framework and tool suite. Instructors will walk through the [LED Blinker Tutorial](https://fprime-community.github.io/fprime-workshop-led-blinker), covering the following:
 - Software Modeling using FPP, the domain specific language supporting F´
 - Component Implementation
 - Unit Testing


Test patch:
diff --git a/docs/UsersGuide/dev/testAPI/markdown/contents.md b/docs/UsersGuide/dev/testAPI/markdown/contents.md
index ba59dda980..b010d7cd0b 100644
--- a/docs/UsersGuide/dev/testAPI/markdown/contents.md
+++ b/docs/UsersGuide/dev/testAPI/markdown/contents.md
@@ -22,4 +22,4 @@ contain the root `toctree` directive. -->
 
 * [Integration Test API User Guide](../user_guide.md)
 
-* [GDS Overview](../../../../../Gds/README.md)
+* [GDS Overview](https://github.com/fprime-community/fprime-gds)
diff --git a/docs/UsersGuide/dev/testAPI/markdown/histories.md b/docs/UsersGuide/dev/testAPI/markdown/histories.md
index 540c041b5e..591d5a223f 100644
--- a/docs/UsersGuide/dev/testAPI/markdown/histories.md
+++ b/docs/UsersGuide/dev/testAPI/markdown/histories.md
@@ -11,7 +11,7 @@ Presently there are several implementations of history within the GDS. They are
 
 # History (superclass)
 
-[history.py](../../../../../src/fprime_gds/common/history/history.py)
+[history.py](https://github.com/fprime-community/fprime-gds/blob/devel/src/fprime_gds/common/history/history.py)
 
 An ordered history that defines what interfaces a history should have within the GDS
 
@@ -85,7 +85,7 @@ Accessor for the number of objects in the history
 
 ChronologicalHistory is the primary history of the Test API.
 
-[chrono.py](../../../../../src/fprime_gds/common/history/chrono.py)
+[chrono.py](https://github.com/fprime-community/fprime-gds/blob/devel/src/fprime_gds/common/history/chrono.py)
 
 A chronologically-ordered history that relies on predicates to provide filtering, searching, and
 retrieval operations. This history will re-order itself based on FSW time.
@@ -234,7 +234,7 @@ Returns:
 
 Test History is an optional history for the IntegrationTestAPI. It supports predicate searching and maintains the object order it was enqueued with.
 
-[test.py](../../../../../src/fprime_gds/common/history/test.py)
+[test.py](https://github.com/fprime-community/fprime-gds/blob/devel/src/fprime_gds/common/history/test.py)
 
 A receive-ordered history that relies on predicates to provide filtering, searching, and
 retrieval operations
@@ -351,7 +351,7 @@ Returns:
 
 Ram history is used by the Standard Pipeline making it the default history for several GDS Tools.
 
-[ram.py](../../../../../src/fprime_gds/common/history/ram.py)
+[ram.py](https://github.com/fprime-community/fprime-gds/blob/devel/src/fprime_gds/common/history/ram.py)
 
 A simple implementation of a history that maintains items in RAM. This is used for simplicity, but isn’t exactly
 robust nor persistent. Given that it is in the RAM, it is driven from the decoders object, which should run off the
@@ -413,7 +413,7 @@ Returns:
 
 |Quick Links|
 |:----------|
-|[Integration Test API User Guide](../../../user_guide.md)|
+|[Integration Test API User Guide](../user_guide.md)|
 |[GDS Overview](../../../../../README.md)|
 |[Integration Test API](integration_test_api.md)|
 |[Histories](histories.md)|
diff --git a/docs/UsersGuide/dev/testAPI/markdown/integration_test_api.md b/docs/UsersGuide/dev/testAPI/markdown/integration_test_api.md
index ceccae54c4..9f0597e3a7 100644
--- a/docs/UsersGuide/dev/testAPI/markdown/integration_test_api.md
+++ b/docs/UsersGuide/dev/testAPI/markdown/integration_test_api.md
@@ -673,7 +673,7 @@ Args:
 |Quick Links|
 |:----------|
 |[Integration Test API User Guide](../user_guide.md)|
-|[GDS Overview](../../../../../Gds/README.md)|
+|[GDS Overview](https://github.com/fprime-community/fprime-gds)|
 |[Integration Test API](integration_test_api.md)|
 |[Histories](histories.md)|
 |[Predicates](predicates.md)|
diff --git a/docs/UsersGuide/dev/testAPI/markdown/predicates.md b/docs/UsersGuide/dev/testAPI/markdown/predicates.md
index d6d50782a7..a3d004b0a9 100644
--- a/docs/UsersGuide/dev/testAPI/markdown/predicates.md
+++ b/docs/UsersGuide/dev/testAPI/markdown/predicates.md
@@ -36,7 +36,7 @@ Args:
 |Quick Links|
 |:----------|
 |[Integration Test API User Guide](../user_guide.md)|
-|[GDS Overview](../../../../../Gds/README.md)|
+|[GDS Overview](https://github.com/fprime-community/fprime-gds)|
 |[Integration Test API](integration_test_api.md)|
 |[Histories](histories.md)|
 |[Predicates](predicates.md)|
diff --git a/docs/UsersGuide/dev/testAPI/markdown/standard_pipeline.md b/docs/UsersGuide/dev/testAPI/markdown/standard_pipeline.md
index 1028d29cd2..07a1ef278e 100644
--- a/docs/UsersGuide/dev/testAPI/markdown/standard_pipeline.md
+++ b/docs/UsersGuide/dev/testAPI/markdown/standard_pipeline.md
@@ -166,7 +166,7 @@ Returns:
 |Quick Links|
 |:----------|
 |[Integration Test API User Guide](../user_guide.md)|
-|[GDS Overview](../../../../../Gds/README.md)|
+|[GDS Overview](https://github.com/fprime-community/fprime-gds)|
 |[Integration Test API](integration_test_api.md)|
 |[Histories](histories.md)|
 |[Predicates](predicates.md)|
diff --git a/docs/UsersGuide/dev/testAPI/markdown/test_logger.md b/docs/UsersGuide/dev/testAPI/markdown/test_logger.md
index de95126139..f7b3caca09 100644
--- a/docs/UsersGuide/dev/testAPI/markdown/test_logger.md
+++ b/docs/UsersGuide/dev/testAPI/markdown/test_logger.md
@@ -70,7 +70,7 @@ Saves the write-only workbook. Should be called only once when the log is comple
 |Quick Links|
 |:----------|
 |[Integration Test API User Guide](../user_guide.md)|
-|[GDS Overview](../../../../../Gds/README.md)|
+|[GDS Overview](https://github.com/fprime-community/fprime-gds)|
 |[Integration Test API](integration_test_api.md)|
 |[Histories](histories.md)|
 |[Predicates](predicates.md)|
diff --git a/docs/UsersGuide/dev/testAPI/markdown/time_type.md b/docs/UsersGuide/dev/testAPI/markdown/time_type.md
index 6b80d0b9c7..1923c382f6 100644
--- a/docs/UsersGuide/dev/testAPI/markdown/time_type.md
+++ b/docs/UsersGuide/dev/testAPI/markdown/time_type.md
@@ -227,7 +227,7 @@ Returns:
 |Quick Links|
 |:----------|
 |[Integration Test API User Guide](../user_guide.md)|
-|[GDS Overview](../../../../../Gds/README.md)|
+|[GDS Overview](https://github.com/fprime-community/fprime-gds)|
 |[Integration Test API](integration_test_api.md)|
 |[Histories](histories.md)|
 |[Predicates](predicates.md)|
diff --git a/docs/UsersGuide/dev/testAPI/user_guide.md b/docs/UsersGuide/dev/testAPI/user_guide.md
index ef93d9e14a..2059175b83 100644
--- a/docs/UsersGuide/dev/testAPI/user_guide.md
+++ b/docs/UsersGuide/dev/testAPI/user_guide.md
@@ -608,4 +608,4 @@ The integration test API uses predicates for filtering, searching and asserting.
 ## Known Bugs and Idiosyncrasies
 
 
-Known bugs and idiosyncrasies are tracked here: [Test API Issues](https://github.com/nasa/fprime/labels/Test%20API)
+Known bugs and idiosyncrasies are tracked here: [Test API Issues](https://github.com/nasa/fprime/labels/Test%20API)
\ No newline at end of file
diff --git a/docs/latest.md b/docs/latest.md
index 91121b4e77..4c88970140 100644
--- a/docs/latest.md
+++ b/docs/latest.md
@@ -11,4 +11,4 @@ This is the documentation for the latest F´ framework. It is kept consistent wi
 | Tutorials             | [Tutorials](./Tutorials/README.md)  |
 | User Guide            | [User Guide](./UsersGuide/guide.md) |
 | Design and Philosophy | [Design](./Design/general.md)       |
-| How-To Guides         | [How-To](./How-To/general.md)       |
+| How-To Guides         | [How-To](./HowTo/general.md)       |