There's two documents. One is interactions/relationships/interrelations between components (the now).
Second is purpose (the future/past). All architecture evolves to fit the purpose. Some purposes are wrong. Some are outdated. For example, some were built to suit a testing suite or specific library but become unnecessary later. Product decisions go here too.
PNG file to document relationships.
ADR (Architectural Decision Record) and RFCs for purpose, in plaintext. You can put it on a wiki.
Unit tests for components. We don't try to document components. Tests come with problems, but they keep the docs up to date.
We don't maintain the docs. The source of truth is the code (and the tests). We keep records for that reasons - a record doesn't need maintenance. A new decision can link to every other thing that affected the decision.
Many decisions are shaped by edge cases. Tests cover some. Git blame should cover the remainder. I could give a half hour talk on this, but you want to design your workflow so that any line of code can be traced to the decision that caused it.