TfTHacker/timeline-for-bases
Timeline view for Bases in Obsidain
- Repository: https://github.com/TfTHacker/timeline-for-bases
- Commit:
f72f35d787114201541048b665ebc1b22ce0f0aa - Generated: 2026-11-14T00:20:52+00:00
- Scorer 0.1.0, scoring prov-4+qual-2+sec-2, report schema v2
Scores
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 1 | possible | 65% | 100% |
| Code quality | 64 | weak | 90% | 100% |
| Security | 66 | weak | 85% | 100% |
AI provenance
Weak signals consistent with AI-assisted development. 1 commit(s) carry explicit AI attribution, too few to characterize the codebase.
- Explicitly attributed share (lower bound): 0.8%
- Unattributed share in AI-consistent velocity bursts: 0.0%
- Estimated AI-generated share: 0.8%
| AI tool | Attributed commits | Lines added |
|---|---|---|
| Claude Code | 1 | 64 |
Current source lines last changed by AI-attributed commits: 34 of 4,315.
Too few lines in one group to compare finding densities.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2026-03 | 6,330 | 1% |
| 2026-04 | 1,472 | 0% |
Evidence
- Claude Code: trailer 'Co-Authored-By: Claude' (28d69158b00b)
AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.
Code quality
Code quality is weak: test-to-source ratio 0.10, no CI test run detected; 14% of function code in complex or long functions; 3% duplicated lines. Weakest area: testing.
| Area | Score |
|---|---|
| Complexity (lizard) | 66 |
| Duplication | 84 |
| Code smells (Opengrep) | 56 |
| Tests and CI | 41 |
| Documentation | 85 |
| Type safety | 100 |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 330; mean complexity 3.4, 90th percentile 8; 6 complex and 2 long functions
- Duplicated lines: 2.8% of 3,248 compared
- Tests: 412 test lines for 4,315 source lines (ratio 0.10); CI test commands: none detected; 3% of recent source commits also change tests
- Docs missing or thin: contributing
Most complex functions:
- renderRow in src/timeline-view.ts: complexity 48, 119 lines
- renderTimeline in src/timeline-view.ts: complexity 26, 114 lines
- renderContextHeader in src/timeline-view.ts: complexity 25, 85 lines
- renderGridLines in src/timeline-view.ts: complexity 19, 54 lines
- resolveEntryDatesFromCache in src/timeline-view.ts: complexity 19, 32 lines
Security
Security posture is weak: 15 known vulnerabilities in 5 dependencies; 4 high-severity workflow issues. Weakest area: posture.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 80 |
| Vulnerable dependencies (OSV) | 56 |
| CI workflows (zizmor) | 51 |
| Posture (policy, updates, signing, lockfiles) | 0 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 15 in 5 packages (critical 0, high 10, medium 5, low 0)
-
Posture checks passed: lockfiles; missing: security policy, dependency updates, signed commits
Top findings
| Severity | Finding | Location |
|---|---|---|
| high | osv/GHSA-3jxr-9vmj-r5cp: [email protected] (npm) is affected by GHSA-3jxr-9vmj-r5cp |
package-lock.json |
| high | osv/GHSA-6j4f-fj2g-mc7p: [email protected] (npm) is affected by GHSA-6j4f-fj2g-mc7p |
package-lock.json |
| high | osv/GHSA-mh99-v99m-4gvg: [email protected] (npm) is affected by GHSA-mh99-v99m-4gvg |
package-lock.json |
| high | osv/GHSA-qhr7-859c-m2p7: [email protected] (npm) is affected by GHSA-qhr7-859c-m2p7 |
package-lock.json |
| high | osv/GHSA-rgw5-rvv9-x895: [email protected] (npm) is affected by GHSA-rgw5-rvv9-x895 |
package-lock.json |
| high | osv/GHSA-rf6f-7fwh-wjgh: [email protected] (npm) is affected by GHSA-rf6f-7fwh-wjgh |
package-lock.json |
| high | osv/GHSA-2883-xcg3-v3hh: [email protected] (npm) is affected by GHSA-2883-xcg3-v3hh |
package-lock.json |
| high | osv/GHSA-52cp-r559-cp3m: [email protected] (npm) is affected by GHSA-52cp-r559-cp3m |
package-lock.json |
| high | osv/GHSA-5p4m-2wfm-xmqj: [email protected] (npm) is affected by GHSA-5p4m-2wfm-xmqj |
package-lock.json |
| high | osv/GHSA-c2c7-rcm5-vvqj: [email protected] (npm) is affected by GHSA-c2c7-rcm5-vvqj |
package-lock.json |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:20 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:23 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/release.yml:51 |
| high | zizmor/cache-poisoning: runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low] |
.github/workflows/release.yml:23 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename: Detected that function argument dirPath has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low] |
scripts/push-to-nexus.mjs:13 |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal: Detected possible user input going into a path.join or path.resolve function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low] |
scripts/push-to-nexus.mjs:17 |
| medium | opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal: Detected possible user input going into a path.join or path.resolve function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to sanitize or validate user input first. [confidence low] |
scripts/push-to-nexus.mjs:18 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename: Detected that function argument filename has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low] |
scripts/push-to-nexus.mjs:20 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename: Detected that function argument filename has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low] |
scripts/push-to-nexus.mjs:24 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename: Detected that function argument filename has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low] |
scripts/push-to-nexus.mjs:24 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename: Detected that function argument watchPath has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low] |
scripts/watch.mjs:58 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename: Detected that function argument watchPath has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low] |
scripts/watch.mjs:59 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-regexp: RegExp() called with a indent function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controll [confidence low] |
src/timeline-base-yaml.ts:35 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-regexp: RegExp() called with a indent function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controll [confidence low] |
src/timeline-base-yaml.ts:60 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-regexp: RegExp() called with a key function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controlled [confidence low] |
src/timeline-view.ts:611 |
Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.
Repository profile
- Source lines: 4,315; test lines: 412
| Language | Lines |
|---|---|
| TypeScript | 4,463 |
| JavaScript | 233 |
| Shell | 31 |