-
Notifications
You must be signed in to change notification settings - Fork 2
Sim docs #113
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Sim docs #113
Changes from 70 commits
38040a5
59791d6
001054f
a373052
b349559
cf7212f
d5efa71
014256c
b67f558
ed136da
248b398
870907c
860499d
e425c13
32ffbca
bd803f3
6f941d6
c485bd9
3ed78f9
b991646
614202f
7cc4f1e
14d8995
b0c872c
74dac3c
9b42afd
64d11d0
271afad
85276e8
e163e84
2ac3f92
64250b3
8fb65dd
25db917
ff508a5
637b145
82bc360
87beda2
91840da
e624ad9
b7ca865
558c2af
c5e176c
89ebff6
ae9014a
6bd5fb4
5fab55c
2418f07
7370768
38c7a13
3d7b240
ae72acf
5eb995c
28891aa
6a3b36a
14b1364
92f54c9
f301f7c
802a0ba
add0b98
d42f512
a9d5707
13e3bb4
7696b01
6b78d68
adc8879
cc11eba
2656e95
bdbbaec
e603014
5a280d1
22f530a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -58,5 +58,6 @@ | |
| "edu.wpi.first.math.**.struct.*", | ||
| ], | ||
| "java.compile.nullAnalysis.mode": "automatic", | ||
| "java.debug.settings.onBuildFailureProceed": true | ||
| "java.debug.settings.onBuildFailureProceed": true, | ||
| "java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx8G -Xms100m -Xlog:disable" | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
printf 'FILE: .vscode/settings.json\n'
wc -l .vscode/settings.json
printf '\n--- lines around 62 ---\n'
sed -n '50,75p' .vscode/settings.json
printf '\n--- occurrences of java.jdt.ls.vmargs ---\n'
rg -n '"java\.jdt\.ls\.vmargs"' -S .
printf '\n--- workspace docs mentioning VS Code / Java settings ---\n'
rg -n 'VS Code|vscode|java\.jdt\.ls\.vmargs|JDT LS|Gradle|Glass' -S README* .github .vscode docs . 2>/dev/null | sed -n '1,200p'Repository: Spectrum3847/2026-Spectrum Length of output: 805 Lower the tracked JDT LS heap. 🤖 Prompt for AI Agents |
||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| This folder contains extra assets for the odometry, 3D field, and joystick views. For more details, see the "Custom Fields/Robots/Joysticks" page in the AdvantageScope documentation (available through the documentation tab in the app or the URL below). | ||
|
|
||
| https://docs.advantagescope.org/more-features/custom-assets |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| { | ||
| "name": "3847 - FM", | ||
| "isFTC": false, | ||
| "disableSimplification": false, | ||
| "rotations": [ | ||
| { | ||
| "axis": "x", | ||
| "degrees": 90 | ||
| }, | ||
| { | ||
| "axis": "z", | ||
| "degrees": 90 | ||
| } | ||
| ], | ||
| "position": [ | ||
| 0, | ||
| 0, | ||
| 0 | ||
| ], | ||
| "cameras": [], | ||
| "components": [ | ||
| { | ||
| "zeroedRotations": [ | ||
| { | ||
| "axis": "x", | ||
| "degrees": 90 | ||
| }, | ||
| { | ||
| "axis": "z", | ||
| "degrees": 90 | ||
| } | ||
| ], | ||
| "zeroedPosition": [ | ||
| 0, | ||
| 0, | ||
| 0 | ||
| ] | ||
| }, | ||
| { | ||
| "zeroedRotations": [ | ||
| { | ||
| "axis": "x", | ||
| "degrees": 90 | ||
| }, | ||
| { | ||
| "axis": "z", | ||
| "degrees": 90 | ||
| } | ||
| ], | ||
| "zeroedPosition": [ | ||
| 0, | ||
| 0, | ||
| 0 | ||
| ] | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| { | ||
| "name": "3847 - PM", | ||
| "isFTC": false, | ||
| "disableSimplification": false, | ||
| "rotations": [{ | ||
| "axis": "x", | ||
| "degrees": 90 | ||
| }, { | ||
| "axis": "z", | ||
| "degrees": 90 | ||
| }], | ||
| "position": [ | ||
| 0, | ||
| 0, | ||
| 0 | ||
| ], | ||
| "cameras": [], | ||
| "components": [ | ||
| { | ||
| "zeroedRotations": [ | ||
| { | ||
| "axis": "x", | ||
| "degrees": 90 | ||
| }, | ||
| { | ||
| "axis": "z", | ||
| "degrees": 90 | ||
| } | ||
| ], | ||
| "zeroedPosition": [ | ||
| 0, | ||
| 0, | ||
| 0 | ||
| ] | ||
| }, | ||
| { | ||
| "zeroedRotations": [ | ||
| { | ||
| "axis": "x", | ||
| "degrees": 90 | ||
| }, | ||
| { | ||
| "axis": "z", | ||
| "degrees": 90 | ||
| } | ||
| ], | ||
| "zeroedPosition": [ | ||
| 0, | ||
| 0, | ||
| 0 | ||
| ] | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -24,25 +24,28 @@ The pattern from existing subsystems: instantiate a `frc.spectrumLib.sim.ArmSim` | |
| | `LinearSim` | A telescoping/sliding ligament — elevator, intake extension. | | ||
| | `RollerSim` | A spinning indicator with direction + relative speed — intake roller, indexer wheels, launcher flywheel. | | ||
|
|
||
| They mimic the behavior of the subsystem with a custom Sim class in different subsystem folders. | ||
|
|
||
| These came from Team 604's sample project and were adapted; the principle of "always move the root/origin to change display position" (commented at the top of `RobotSim.java`) is the most useful thing to remember. | ||
|
|
||
| ## MapleSim Physics | ||
| ## AdvantageScope | ||
|
|
||
| We use AdvantageScope as a simulation tool in addition to a log analysis tool. Its main job during sim is the **3D Field** view: a better way to watch the robot drive around the field than staring at raw pose numbers. | ||
|
|
||
| Start the robot sim first (`./gradlew simulateJava` or `WPILib: Simulate Robot Code`), then open AdvantageScope and connect to `localhost`. The robot publishes [`Robot.field2d`](../../src/main/java/frc/robot/Robot.java) to `SmartDashboard/Field2d`, and `robotPeriodic()` updates it from `swerve.getRobotPose()`. In sim, that pose comes from MapleSim through `mapleSimDrive.getSimulatedDriveTrainPose()`, so the robot model in AdvantageScope is showing the drivetrain simulation, not a fake hand-entered pose. | ||
|
|
||
| For the usual 3D field setup: | ||
|
|
||
| [MapleSim (IronMaple)](https://github.com/Shenzhen-Robotics-Alliance/maple-sim) handles the physics — drivetrain dynamics, game-piece interaction, projectile flight. [`RobotSim.intakeSimulation`](../../src/main/java/frc/robot/RobotSim.java) wires up an over-the-bumper fuel intake: | ||
| 1. Open AdvantageScope's **3D Field** tab. | ||
| 2. Set the source to the live NetworkTables connection. | ||
| 3. Drag `SmartDashboard/Field2d/Robot` into the robot pose slot. | ||
| 4. If an auto is selected, drag `SmartDashboard/Field2d/Auto Routine` in as a trajectory/poses object so the planned path and simulated robot motion can be compared. | ||
|
|
||
| ```java | ||
| IntakeSimulation.OverTheBumperIntake( | ||
| "Fuel", | ||
| Robot.getSwerve().getMapleSimSwerveDrivetrain().mapleSimDrive, | ||
| Inches.of(29), | ||
| Inches.of(12), | ||
| IntakeSimulation.IntakeSide.FRONT, | ||
| 80); // max game pieces | ||
| ``` | ||
| You can also drive things like FuelInFlight and whatnot to simulate flying fuel. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
# Locate the referenced documentation and any mentions of FuelInFlight / AdvantageScope / NetworkTables.
git ls-files | rg '(^|/)docs/tools/simulation\.md$|FuelInFlight|AdvantageScope|NetworkTables|simulation'Repository: Spectrum3847/2026-Spectrum Length of output: 189 🏁 Script executed: #!/bin/bash
set -euo pipefail
# Inspect the documentation file around the referenced line.
file="docs/tools/simulation.md"
wc -l "$file"
cat -n "$file" | sed -n '1,120p'Repository: Spectrum3847/2026-Spectrum Length of output: 6845 🏁 Script executed: #!/bin/bash
set -euo pipefail
# Search for the specific term and nearby implementation details.
rg -n -C 3 'FuelInFlight|flying fuel|AdvantageScope|NetworkTables|Network Table|NT' .Repository: Spectrum3847/2026-Spectrum Length of output: 50385 🏁 Script executed: #!/bin/bash
set -euo pipefail
# Read only the relevant documentation and search for implementation references.
printf '\n=== docs/tools/simulation.md ===\n'
wc -l docs/tools/simulation.md
cat -n docs/tools/simulation.md | sed -n '1,120p'
printf '\n=== FuelInFlight references ===\n'
rg -n -C 4 'FuelInFlight|flying fuel|fuel in flight|AdvantageScope|NetworkTables|Network Table|NT' . || trueRepository: Spectrum3847/2026-Spectrum Length of output: 50385 🌐 Web query:
💡 Result: Based on current technical documentation, there is no tool or standard feature named "FuelInFlight" related to AdvantageScope, NetworkTables, or robot simulation [1][2][3]. AdvantageScope is a widely used FRC data visualization and log analysis tool that supports NetworkTables (NT4), WPILOG files, and Driver Station logs [1][3][4]. For visualizing poses (such as robot odometry or trajectories) in AdvantageScope, the standard approach involves publishing structured data to NetworkTables [5][6]. Key aspects of this process include: 1. Data Format: AdvantageScope supports standard WPILib struct and protobuf serialization [5]. Developers typically use the StructPublisher class in WPILib to publish Pose2d or Pose3d objects to a specific NetworkTables path [5][6]. 2. Path Usage: You define a NetworkTables path (e.g., /MyPose) and associate it with the appropriate struct (e.g., Pose2d.struct) [5][6]. 3. Simulation Integration: AdvantageScope can connect directly to a robot simulator or read.wpilog files generated during simulation [1][3][4]. Simulation frameworks (like AdvantageKit) can automatically generate these logs, which AdvantageScope then renders for 2D or 3D visualization [7][2][4]. If "FuelInFlight" is a custom project, library, or specific simulation component, it does not appear in standard FRC or AdvantageScope documentation. You may wish to check the specific documentation for your proprietary codebase or simulation environment. Citations:
🏁 Script executed: #!/bin/bash
set -euo pipefail
# Inspect the simulation code that publishes the fuel/flying-ball data.
ast-grep outline src/main/java/frc/robot/RobotSim.java --view expanded || true
printf '\n=== RobotSim fuel-related slice ===\n'
cat -n src/main/java/frc/robot/RobotSim.java | sed -n '1,260p'
printf '\n=== fuel / ball physics references ===\n'
rg -n -C 3 'FuelPhysicsSim|ballSim|getTotalIntaked|publish.*NT|NetworkTables|FuelInFlight|Sim/Fuel' src/main/java/frc/robot src/main/java/frc/spectrumLibRepository: Spectrum3847/2026-Spectrum Length of output: 33657 🏁 Script executed: #!/bin/bash
set -euo pipefail
# Locate and inspect the fuel physics simulation class and any published topic names.
fuel_file=$(git ls-files | rg 'FuelPhysicsSim\.java$' | head -n 1)
printf 'Fuel file: %s\n' "$fuel_file"
wc -l "$fuel_file"
cat -n "$fuel_file" | sed -n '1,260p'
printf '\n=== references to topic/path strings in fuel simulation ===\n'
rg -n '"[^"]*(Fuel|fuel|Ball|ball|Sim/)"|Telemetry\.log|StructPublisher|Field2d|NetworkTables' "$fuel_file" src/main/java/frc/robot/Robot.java src/main/java/frc/robot/RobotSim.java || trueRepository: Spectrum3847/2026-Spectrum Length of output: 17597 🏁 Script executed: #!/bin/bash
set -euo pipefail
# Identify any simulation-time publications for the ball/fuel visualization.
rg -n -C 4 'Telemetry\.log\("Sim/Fuel"|Sim/Fuel|createSimBallLaunch|FuelPhysicsSim|getBallSim|getTotalIntaked|NetworkTables|StructPublisher|Field2d|Pose2d|Pose3d' src/main/java/frc/robot src/main/java/frc/spectrumLibRepository: Spectrum3847/2026-Spectrum Length of output: 50383 🏁 Script executed: #!/bin/bash
set -euo pipefail
# Inspect the publishing helpers in FuelPhysicsSim around the NT API and the tick method.
file="src/main/java/frc/rebuilt/FuelPhysicsSim.java"
sed -n '760,860p' "$file"
printf '\n=== tick / publishing section ===\n'
sed -n '2260,2325p' "$file"Repository: Spectrum3847/2026-Spectrum Length of output: 6717 🏁 Script executed: #!/bin/bash
set -euo pipefail
# Look for the exact topic names and data types used for the ball visualization.
rg -n -C 3 'StructArrayPublisher|DoublePublisher|IntegerPublisher|publish|create.*Publisher|tableKey|balls|Pose3d|Pose2d|trajectory|FuelInFlight' src/main/java/frc/rebuilt/FuelPhysicsSim.javaRepository: Spectrum3847/2026-Spectrum Length of output: 28420 🏁 Script executed: #!/bin/bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
text = Path("src/main/java/frc/rebuilt/FuelPhysicsSim.java").read_text()
for needle in [
"StructArrayPublisher",
"tableKey",
"Pose3d",
"Pose2d",
"launchBall(",
"publish",
"Sim/Fuel",
"ballPos",
"ballPositions",
]:
idx = text.find(needle)
print(f"--- {needle} ---")
if idx == -1:
print("not found")
else:
start = max(0, idx-400)
end = min(len(text), idx+1200)
print(text[start:end])
print()
PYRepository: Spectrum3847/2026-Spectrum Length of output: 9973 🏁 Script executed: #!/bin/bash
set -euo pipefail
# If the NT publisher names are difficult to spot in the full file, extract the exact methods around the publishing section.
file="src/main/java/frc/rebuilt/FuelPhysicsSim.java"
awk 'NR>=779 && NR<=860 {print NR ":" $0}' "$file"
printf '\n=== around 2288 ===\n'
awk 'NR>=2280 && NR<=2335 {print NR ":" $0}' "$file"Repository: Spectrum3847/2026-Spectrum Length of output: 6202 Name the actual sim topics. Replace 🤖 Prompt for AI Agents |
||
|
|
||
| When the intake command starts, `mapleSimIntakeFuel()` calls `startIntake()` on the simulated intake; the moment a simulated fuel piece is in range, MapleSim transfers it to the robot. `mapleSimLaunchFuel()` reads the held-piece count and creates `RebuiltFuelOnFly` projectiles using the actual `ShotCalculator` outputs — same code path as match-day, so a shot that lands in sim should also land on the real field if the calibration is right. | ||
| That view is especially useful for autos. Select the auto in Elastic or Glass, enable the simulated Driver Station, and watch whether the robot starts in the right place, follows the expected route, and ends with the correct heading. If the AdvantageScope robot jumps, drives mirrored from what you expected, or misses the drawn path, check pose reset first: autos seed pose through the swerve reset path, and in sim that also calls `mapleSimDrive.setSimulationWorldPose(...)`. | ||
|
|
||
| The trajectory is published to NetworkTables under `SimShot/FuelProjectileSuccessfulShot` (or `…UnsuccessfulShot`). Drag those into Glass's `Field2d` overlay to see shots in flight. | ||
| AdvantageScope can also replay the same data from a `.wpilog` after the run. That makes the workflow: test the auto in sim, use 3D Field live while it runs, then open the saved log if you need to scrub frame-by-frame through the exact moment the path or pose estimate went sideways. | ||
|
|
||
| ## What Simulation Catches (and Doesn't) | ||
|
|
||
|
|
@@ -71,6 +74,5 @@ A few things to check first when a sim result doesn't match reality: | |
|
|
||
| ## See Also | ||
|
|
||
| * [MapleSim dependency page](../dependencies/maple-sim.md) for the version we run. | ||
| * [PathPlanner](../dependencies/pathplanner.md) for trajectory generation, which feeds into the sim swerve. | ||
| * WPILib's [simulation docs](https://docs.wpilib.org/en/stable/docs/software/wpilib-tools/robot-simulation/index.html) for `Mechanism2d` and `Field2d` basics. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,11 +1,11 @@ | ||
| { | ||
| "Docking": { | ||
| "Data": [ | ||
| "DockNode ID=0x00000001 Pos=6,1072 Size=979,323 Selected=0x48913727", | ||
| "DockNode ID=0x00000002 Pos=995,825 Size=1237,566 Split=X", | ||
| "DockNode ID=0x00000003 Parent=0x00000002 SizeRef=625,413 Selected=0xFA2A8FFA", | ||
| "DockNode ID=0x00000004 Parent=0x00000002 SizeRef=610,413 Selected=0xA6A62DF3", | ||
| "DockNode ID=0x00000005 Pos=2,21 Size=2242,790 Split=X", | ||
| "DockNode ID=0x00000001 Pos=4,942 Size=983,285 Selected=0x48913727", | ||
| "DockNode ID=0x00000003 Pos=983,443 Size=877,514 Split=X", | ||
| "DockNode ID=0x00000004 Parent=0x00000003 SizeRef=238,497 Selected=0xFA2A8FFA", | ||
| "DockNode ID=0x00000006 Parent=0x00000003 SizeRef=235,497 Selected=0xA6A62DF3", | ||
| "DockNode ID=0x00000005 Pos=9,29 Size=2242,790 Split=X", | ||
|
Comment on lines
+4
to
+8
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
file="simgui-window.json"
echo "== File info =="
wc -l "$file"
echo
echo "== Relevant lines =="
cat -n "$file" | sed -n '1,120p'
echo
echo "== Coordinate check =="
python3 - <<'PY'
import json, re, sys, pathlib
path = pathlib.Path("simgui-window.json")
text = path.read_text()
# Extract all quoted strings and look for common ImGui layout fields.
strings = re.findall(r'"([^"]*)"', text)
nums = []
for s in strings:
if any(k in s for k in ("Pos=", "Size=", "SizeRef=", "MainWindow", "DockNode")):
nums.append(s)
print("Matched strings:", len(nums))
for s in nums:
print(s)
# Parse simple numeric extents where possible
def parse_kv(s):
out = {}
for key in ("Pos", "Size", "SizeRef"):
m = re.search(rf'{key}=(-?\d+),(-?\d+)', s)
if m:
out[key] = (int(m.group(1)), int(m.group(2)))
return out
xs, ys = [], []
for s in strings:
kv = parse_kv(s)
if "Pos" in kv:
x, y = kv["Pos"]
xs.append(x); ys.append(y)
if "Size" in kv:
w, h = kv["Size"]
# only for strings that also have Pos
if "Pos" in kv:
x, y = kv["Pos"]
xs.append(x + w); ys.append(y + h)
print()
if xs and ys:
print("Observed x range:", min(xs), "to", max(xs))
print("Observed y range:", min(ys), "to", max(ys))
PYRepository: Spectrum3847/2026-Spectrum Length of output: 6360 Keep the Glass layout within the window bounds. 🤖 Prompt for AI Agents |
||
| "DockNode ID=0x00000011 Parent=0x00000005 SizeRef=1872,784 Split=X", | ||
| "DockNode ID=0x00000008 Parent=0x00000011 SizeRef=322,445 Split=Y Selected=0x39AD1970", | ||
| "DockNode ID=0x0000000A Parent=0x00000008 SizeRef=187,370 Split=Y Selected=0x39AD1970", | ||
|
|
@@ -24,13 +24,13 @@ | |
| "GLOBAL": { | ||
| "font": "Proggy Dotted", | ||
| "fps": "120", | ||
| "height": "1415", | ||
| "height": "974", | ||
| "maximized": "1", | ||
| "style": "0", | ||
| "userScale": "2", | ||
| "width": "2256", | ||
| "width": "1920", | ||
| "xpos": "0", | ||
| "ypos": "29" | ||
| "ypos": "34" | ||
| } | ||
| }, | ||
| "Table": { | ||
|
|
@@ -55,63 +55,63 @@ | |
| "###/SmartDashboard/Alerts": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x00000013,0", | ||
| "Pos": "1876,21", | ||
| "Pos": "1883,29", | ||
| "Size": "368,183" | ||
| }, | ||
| "###/SmartDashboard/Auto Chooser": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x0000000E,0", | ||
| "Pos": "2,414", | ||
| "Pos": "9,422", | ||
| "Size": "322,78" | ||
| }, | ||
| "###/SmartDashboard/Field2d": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x00000009,0", | ||
| "Pos": "326,21", | ||
| "Pos": "333,29", | ||
| "Size": "1548,790" | ||
| }, | ||
| "###/SmartDashboard/Scheduler": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x00000014,0", | ||
| "Pos": "1876,206", | ||
| "Pos": "1883,214", | ||
| "Size": "368,605" | ||
| }, | ||
| "###/SmartDashboard/Sim/LeftView": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x00000004,0", | ||
| "Pos": "1622,825", | ||
| "Size": "610,566" | ||
| "DockId": "0x00000006,0", | ||
| "Pos": "1425,443", | ||
| "Size": "435,514" | ||
| }, | ||
| "###/SmartDashboard/Sim/TopView": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x00000003,0", | ||
| "Pos": "995,825", | ||
| "Size": "625,566" | ||
| "DockId": "0x00000004,0", | ||
| "Pos": "983,443", | ||
| "Size": "440,514" | ||
| }, | ||
| "###/SmartDashboard/VisionSystemSim-main/Sim Field": { | ||
| "Collapsed": "0", | ||
| "Pos": "1080,167", | ||
| "Size": "500,250" | ||
| "Pos": "937,167", | ||
| "Size": "513,250" | ||
| }, | ||
| "###Addressable LEDs": { | ||
| "Collapsed": "0", | ||
| "Pos": "290,100", | ||
| "Size": "197,54" | ||
| "Size": "229,60" | ||
| }, | ||
| "###FMS": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x0000000C,0", | ||
| "Pos": "2,21", | ||
| "Size": "322,391" | ||
| "Pos": "9,29", | ||
| "Size": "322,230" | ||
| }, | ||
| "###Joysticks": { | ||
| "Collapsed": "0", | ||
| "Pos": "6,824", | ||
| "Size": "976,102" | ||
| "Pos": "26,752", | ||
| "Size": "1156,202" | ||
| }, | ||
| "###Keyboard 0 Settings": { | ||
| "Collapsed": "0", | ||
| "Pos": "10,50", | ||
| "Pos": "502,141", | ||
| "Size": "300,560" | ||
| }, | ||
| "###Keyboard 1 Settings": { | ||
|
|
@@ -122,25 +122,25 @@ | |
| "###NetworkTables": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x00000001,0", | ||
| "Pos": "6,1072", | ||
| "Size": "979,323" | ||
| "Pos": "4,942", | ||
| "Size": "983,285" | ||
| }, | ||
| "###NetworkTables Info": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x00000001,1", | ||
| "Pos": "6,1072", | ||
| "Size": "979,323" | ||
| "Pos": "4,942", | ||
| "Size": "983,285" | ||
| }, | ||
| "###System Joysticks": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x00000001,2", | ||
| "Pos": "27,1035", | ||
| "Size": "935,312" | ||
| "Pos": "4,942", | ||
| "Size": "983,285" | ||
| }, | ||
| "###Timing": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x0000000F,0", | ||
| "Pos": "2,494", | ||
| "Pos": "9,502", | ||
| "Size": "322,317" | ||
| }, | ||
| "Debug##Default": { | ||
|
|
@@ -151,8 +151,8 @@ | |
| "Robot State": { | ||
| "Collapsed": "0", | ||
| "DockId": "0x0000000D,0", | ||
| "Pos": "2,253", | ||
| "Size": "32,38" | ||
| "Pos": "9,261", | ||
| "Size": "322,159" | ||
| } | ||
| } | ||
| } | ||
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
Repository: Spectrum3847/2026-Spectrum
Length of output: 250
🏁 Script executed:
Repository: Spectrum3847/2026-Spectrum
Length of output: 1257
🌐 Web query:
Java debug settings onBuildFailureProceed last successful artifact after build failure documentation💡 Result:
The setting
java.debug.settings.onBuildFailureProceedis a configuration option specifically for the Visual Studio Code Debugger for Java extension [1][2]. It is unrelated to retrieving artifacts after a build failure [3]. ### Understanding java.debug.settings.onBuildFailureProceed This setting controls whether the VS Code Java debugger automatically continues and launches the program even if the workspace build (compilation) fails [1]. * When set totrue: The debugger suppresses the "Build failed, do you want to continue?" prompt and proceeds with the launch using the previously compiled (and potentially outdated) classes [1][3]. * When set tofalse(default): The debugger displays a warning prompt when a build failure occurs, allowing the user to choose whether to continue, always continue (which updates the setting totrue), or fix the errors [1][4][3]. This setting does not manage or retrieve build artifacts; it solely dictates the debugger's behavior in the presence of compiler errors within the IDE [3]. ### Managing Artifacts After Build Failures If you are looking to retrieve artifacts from a "last successful build" after a failure, this functionality is typically found in CI/CD platforms rather than local Java debugger settings [5][6][7]. * Jenkins: The Copy Artifact plugin allows you to select artifacts from the "Last successful build" of a project [6]. Pipeline scripts can use selectors likelastSuccessful()to target these builds [8][9]. * TeamCity: Artifact dependencies can be configured to import artifacts from the "Latest successful build" specifically [7]. If you are encountering build failures in a local VS Code environment, thejava.debug.settings.onBuildFailureProceedsetting will not help you access a previous successful build; it will only force the debugger to run the current, broken state of your code [3]. If you need a stable version, you should revert your source code to the last known good commit using your version control system (e.g., Git) [1][4].Citations:
Do not proceed after a failed build
java.debug.settings.onBuildFailureProceedshould befalsehere; when enabled, the debugger skips the build-failed prompt and can launch with stale classes, which makes validation results misleading.Suggested setting
📝 Committable suggestion
🤖 Prompt for AI Agents